Compare commits
6 Commits
v0.3.20-mac
...
v0.3.26
| Author | SHA1 | Date | |
|---|---|---|---|
| de2752557d | |||
| 9221c25474 | |||
| 997e1ab3a9 | |||
| 2be6b9d9a8 | |||
| ebfe1f11a6 | |||
| 7f8102985e |
@@ -428,20 +428,62 @@ jobs:
|
||||
|
||||
- name: Upload to Gitea release
|
||||
if: gitea.event_name == 'push'
|
||||
shell: powershell
|
||||
env:
|
||||
TOKEN: ${{ secrets.REGISTRY_TOKEN }}
|
||||
COMMIT_SHA: ${{ gitea.sha }}
|
||||
VERSION: ${{ needs.compute-version.outputs.version }}
|
||||
run: |
|
||||
set "TAG=v${{ needs.compute-version.outputs.version }}-win"
|
||||
echo Creating release %TAG%...
|
||||
curl -s -X POST -H "Authorization: token %TOKEN%" -H "Content-Type: application/json" -d "{\"tag_name\": \"%TAG%\", \"name\": \"Triple-C v${{ needs.compute-version.outputs.version }} (Windows)\", \"body\": \"Automated build from commit %COMMIT_SHA%\"}" "%GITEA_URL%/api/v1/repos/%REPO%/releases" > release.json
|
||||
for /f "tokens=2 delims=:," %%a in ('findstr /c:"\"id\"" release.json') do set "RELEASE_ID=%%a" & goto :found
|
||||
:found
|
||||
echo Release ID: %RELEASE_ID%
|
||||
for %%f in (artifacts\*) do (
|
||||
echo Uploading %%~nxf...
|
||||
curl -s -X POST -H "Authorization: token %TOKEN%" -H "Content-Type: application/octet-stream" --data-binary "@%%f" "%GITEA_URL%/api/v1/repos/%REPO%/releases/%RELEASE_ID%/assets?name=%%~nxf"
|
||||
)
|
||||
$ErrorActionPreference = "Stop"
|
||||
$tag = "v$env:VERSION-win"
|
||||
$headers = @{ Authorization = "token $env:TOKEN" }
|
||||
$api = "$env:GITEA_URL/api/v1/repos/$env:REPO"
|
||||
|
||||
# Idempotent get-or-create. The old cmd-batch version swallowed
|
||||
# curl errors and parsed the release id with findstr, so a 409 on
|
||||
# a pre-existing tag yielded an empty RELEASE_ID and uploads went to
|
||||
# a malformed .../releases//assets URL while the step still reported
|
||||
# success. Look the release up by tag first; create only on 404.
|
||||
try {
|
||||
$release = Invoke-RestMethod -Method Get -Headers $headers -Uri "$api/releases/tags/$tag"
|
||||
Write-Host "Release $tag already exists, reusing"
|
||||
} catch {
|
||||
if ($_.Exception.Response.StatusCode.value__ -eq 404) {
|
||||
Write-Host "Release $tag not found, creating"
|
||||
$body = @{
|
||||
tag_name = $tag
|
||||
name = "Triple-C v$env:VERSION (Windows)"
|
||||
body = "Automated build from commit $env:COMMIT_SHA"
|
||||
} | ConvertTo-Json
|
||||
$release = Invoke-RestMethod -Method Post -Headers $headers `
|
||||
-ContentType "application/json" -Body $body -Uri "$api/releases"
|
||||
} else {
|
||||
throw
|
||||
}
|
||||
}
|
||||
|
||||
$releaseId = $release.id
|
||||
if (-not $releaseId) { throw "Failed to resolve release id for $tag" }
|
||||
Write-Host "Release ID: $releaseId"
|
||||
|
||||
# Upload each artifact. Delete any same-named asset left over from a
|
||||
# partial prior run first, so the upload replaces rather than 409s.
|
||||
$existing = Invoke-RestMethod -Method Get -Headers $headers -Uri "$api/releases/$releaseId/assets"
|
||||
foreach ($file in Get-ChildItem -File -Path artifacts\*) {
|
||||
$name = $file.Name
|
||||
$dupe = $existing | Where-Object { $_.name -eq $name }
|
||||
if ($dupe) {
|
||||
Write-Host "Deleting existing asset $name (id $($dupe.id))"
|
||||
Invoke-RestMethod -Method Delete -Headers $headers -Uri "$api/releases/$releaseId/assets/$($dupe.id)" | Out-Null
|
||||
}
|
||||
Write-Host "Uploading $name..."
|
||||
$uploadUri = "$api/releases/$releaseId/assets?name=$([uri]::EscapeDataString($name))"
|
||||
curl.exe -fsS --retry 5 --retry-all-errors --retry-delay 5 --max-time 600 `
|
||||
-X POST -H "Authorization: token $env:TOKEN" `
|
||||
-H "Content-Type: application/octet-stream" `
|
||||
--data-binary "@$($file.FullName)" $uploadUri
|
||||
if ($LASTEXITCODE -ne 0) { throw "Upload of $name failed (curl exit $LASTEXITCODE)" }
|
||||
}
|
||||
|
||||
create-tag:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -70,7 +70,7 @@ export default function FileManagerModal({ projectId, projectName, onClose }: Pr
|
||||
>
|
||||
<div className="bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-lg shadow-xl w-[36rem] max-h-[80vh] flex flex-col">
|
||||
{/* Header */}
|
||||
<div className="flex items-center justify-between px-4 py-3 border-b border-[var(--border-color)]">
|
||||
<div className="flex items-center justify-between px-4 py-3 border-b border-[var(--border-color)] flex-shrink-0">
|
||||
<h2 className="text-sm font-semibold">Files — {projectName}</h2>
|
||||
<button
|
||||
onClick={onClose}
|
||||
@@ -177,7 +177,7 @@ export default function FileManagerModal({ projectId, projectName, onClose }: Pr
|
||||
</div>
|
||||
|
||||
{/* Footer */}
|
||||
<div className="flex items-center justify-between px-4 py-3 border-t border-[var(--border-color)]">
|
||||
<div className="flex items-center justify-between px-4 py-3 border-t border-[var(--border-color)] flex-shrink-0">
|
||||
<button
|
||||
onClick={uploadFile}
|
||||
className="text-xs text-[var(--accent)] hover:text-[var(--accent-hover)] transition-colors"
|
||||
|
||||
@@ -292,6 +292,16 @@ if ls "$SCHEDULER_DIR/tasks/"*.json >/dev/null 2>&1; then
|
||||
echo "entrypoint: restored crontab from persisted tasks"
|
||||
fi
|
||||
|
||||
# ── Claude Code self-update ──────────────────────────────────────────────────
|
||||
# Update the Claude Code CLI to the latest version on container start, before
|
||||
# any terminal session launches `claude`. Runs as the claude user (the CLI is
|
||||
# installed under /home/claude/.claude/bin). Non-fatal and time-bounded so a
|
||||
# slow or offline network never blocks container readiness.
|
||||
echo "entrypoint: checking for Claude Code updates..."
|
||||
timeout 120 su -s /bin/bash claude -c 'export PATH="/home/claude/.claude/bin:/home/claude/.local/bin:$PATH"; claude update' \
|
||||
&& echo "entrypoint: Claude Code is up to date" \
|
||||
|| echo "entrypoint: warning — Claude Code update skipped or failed (continuing)"
|
||||
|
||||
# ── Stay alive as claude ─────────────────────────────────────────────────────
|
||||
echo "Triple-C container ready."
|
||||
exec su -s /bin/bash claude -c "exec sleep infinity"
|
||||
|
||||
Reference in New Issue
Block a user