Skip to content

fix(ci): stream build_final CAS restores and free the CAS before export - #355

Merged
hanthor merged 1 commit into
mainfrom
fix/build-final-disk
Oct 2, 2026
Merged

hanthor merged 1 commit into
mainfrom
fix/build-final-disk

Conversation

@hanthor

@hanthor hanthor commented Oct 2, 2026

Copy link
Copy Markdown
Member

tromso:latest has never been published. The two most recent attempts:

  • Run 36954176555: chunk2 lost its runner while pushing its CAS, so build_final was skipped. The rerun was superseded by the scheduled run below.
  • Scheduled run 36971374464: all chunks were green, then build_final died in Download and Merge CAS Chunks with the runner out of disk (No space left on device writing its own diag log). oras pull -o . stages every multi-GB tarball on disk next to the cache it is unpacking into.

This ports the fixes xfce-linux needed before its first :latest published today (run 36964825435):

  • Streamed restore. scripts/cas-restore-stream.sh and scripts/ghcr-blob-stream.py pipe the blob through zstd and tar, still with --exclude=sources. They resume GHCR's recurring PROTOCOL_ERROR mid-stream cuts with HTTP Range, and verify the sha256.
  • Free the CAS before export. A new step checks the final artifact out to .build-out and deletes the CAS, so the squashed image fits. just export reuses the checkout when EXPORT_REUSE_CHECKOUT=1. Local just build is unchanged.

This touches only the x86_64 build_final job. The aarch64 job is skipped today; its download step gets the same streamed restore.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TexZnEN3jq4jRUi8T3zZuY

build_final in scheduled run 36971374464 died in "Download and Merge CAS
Chunks" with the runner itself out of disk ("No space left on device"
writing its own diag log). `oras pull -o .` stages each multi-GB tarball
on disk beside the cache it is unpacking into. This ports xfce-linux's
fix (#159, #203):

- scripts/cas-restore-stream.sh + scripts/ghcr-blob-stream.py stream the
  blob through zstd and tar (sources/ still excluded). They also resume
  GHCR's recurring mid-stream PROTOCOL_ERROR cuts with HTTP Range and
  verify the digest.
- A new step checks the final artifact out to .build-out and deletes the
  CAS before export, because the cache and the squashed image do not fit
  together. `just export` reuses that checkout when
  EXPORT_REUSE_CHECKOUT=1; local `just build` is unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TexZnEN3jq4jRUi8T3zZuY
Signed-off-by: hanthor <hanthor@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

❌ Plain Install End-to-End Test (stable) — FAILED

Step Details
ISO build N/A · N/A
Plain E2E N/A
Result ❌ skipped

Workflow run

@hanthor
hanthor merged commit fd592ee into main Oct 2, 2026
15 of 17 checks passed
@hanthor

hanthor commented Oct 2, 2026

Copy link
Copy Markdown
Member Author

Merged on green required checks. The E2E failures are expected and pre-existing: Payload image ghcr.io/tuna-os/tromso:latest is missing or not pullable. This PR is the fix for publishing that image.

@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

❌ LUKS End-to-End Test (stable) — FAILED

Step Details
ISO build N/A · N/A
LUKS E2E N/A
Result ❌ skipped

Workflow run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant