Skip to content

fix(release): correct manifest-digest capture + cross-arch smoke pull#246

Merged
VijitSingh97 merged 1 commit into
mainfrom
fix/release-digest-and-smoke-pull
Jun 14, 2026
Merged

fix(release): correct manifest-digest capture + cross-arch smoke pull#246
VijitSingh97 merged 1 commit into
mainfrom
fix/release-digest-and-smoke-pull

Conversation

@VijitSingh97

Copy link
Copy Markdown
Collaborator

Two bugs in the new buildx release flow (#243/#245), surfaced on the first real amd64 release run from an arm64 host. The 1.0.1 release got through the gate (matrix 270/0) and built + pushed all 5 amd64 rc images, then failed at smoke.

Bugs

  1. Digest captureimagetools inspect --format '{{.Manifest.Digest}}' renders the whole descriptor block for a buildx OCI index, not the sha, so the stored digest was multi-line garbage (promote would fail). Parse the Digest: line instead — verified equal to imagetools inspect --raw | shasum -a 256. Factored into manifest_digest(), used by stage_push and the --resume-promote path.
  2. Smoke docker pull — resolves the build host's arch, so on an arm64 Mac an amd64-only image fails no matching manifest for linux/arm64. Pull --platform ${PLATFORMS%%,*} explicitly (Docker can pull, not run, a non-native image — enough for the label check).

Verified against the live rc images

$ manifest_digest pithead-tor:v1.0.1-rc.1            -> sha256:93f3d5be…   (clean index sha)
$ docker pull --platform linux/amd64 …-rc.1          -> ok, label = 1.0.1   (on the arm64 host)

shellcheck clean · make test green.

Unblocks 1.0.1 with no rebuild

The rc images are built + valid. After merge: make release --resume-promote --draft re-captures their digests (now correctly) and promotes :1.0.1 + :latest + cuts the draft — no re-run of the matrix or the amd64 build.

Two bugs in the buildx flow (#243/#245) that surfaced on the first real amd64 release
run from an arm64 host:

1. Digest capture used `imagetools inspect --format '{{.Manifest.Digest}}'`, which for a
   buildx OCI index renders the whole descriptor block, not the sha — so the stored
   "digest" was multi-line garbage and promote would have failed. Parse the `Digest:`
   line instead (verified == `imagetools inspect --raw | shasum -a 256`). Factored into
   manifest_digest(), used by stage_push and the --resume-promote path.

2. Smoke did a plain `docker pull`, which resolves the build HOST's arch — on an arm64
   host an amd64-only image fails "no matching manifest for linux/arm64". Pull the target
   platform explicitly (`--platform ${PLATFORMS%%,*}`); Docker can pull (not run) a
   non-native image, which is all the label check needs.

Verified against the live v1.0.1-rc.1 images: manifest_digest returns the clean index
sha, and `pull --platform linux/amd64` succeeds on the arm64 build host. The 1.0.1 rc
images are already built + valid, so this unblocks promoting them (no rebuild).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@VijitSingh97 VijitSingh97 merged commit a8b3e44 into main Jun 14, 2026
11 checks passed
@VijitSingh97 VijitSingh97 deleted the fix/release-digest-and-smoke-pull branch June 14, 2026 05:15
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