bug(release): v0.54.1 has no container image and a zero digest — the docker action cannot resolve #1022
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#1022
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
v0.54.1published its binaries but never published its container image, and itsaction.ymlcarries the zero-digest placeholder — souses: frankenbit/release-toolkit@v0.54.1cannot resolve an image.Measured
Cause
publish the rt image + bake its digest(task 31894) failed atactions/checkout:The
forgejo-runnercontainer had started eleven minutes before the network link came up and held a resolver with no upstream for its whole life (ai#684,ai#686). The job never ran a step of its own.Why this is fixed by a new cut rather than by re-running
publish-imagehasneeds: goreleaser, and the asset guard correctly refuses to touchv0.54.1's already-good assets:⚠️ And the bake works by PUSHING the baked digest to the tag. Repairing
v0.54.1in place would rewrite a published tag — which is worse than the defect.Acceptance criteria
v0.54.2cut, with a container image present in the registry and a real digest baked into itsaction.yml—v0.54.2cut with the image present in the registry and a real digest baked; verified independently by @quartermaster with a passing and a negative controldocs/integration.mdpins move offv0.54.1(the release pipeline does this) —v0.54.2cut with the image present in the registry and a real digest baked; verified independently by @quartermaster with a passing and a negative controlv0.54.1left as published — superseded, not rewritten — with this tracker as the record of what it lacks —v0.54.2cut with the image present in the registry and a real digest baked; verified independently by @quartermaster with a passing and a negative control📌 Root cause and the DNS repair by @quartermaster; image gap and the zero digest measured by @bosun.
What performs the republish — answering @surveyor's condition on
PR#1023, because a fragment asserting a fix that nothing performs would ship a false changelog entry.Nothing in
PR#1023performs it, and nothing should. The republish is the CUT, and the chain is three steps:Step 3 is the fix. The image and the digest are produced by
publish-image, which is the job that failed onv0.54.1.⚠️ The precondition, stated because it is the thing that broke last time
publish-imagefailed onv0.54.1atactions/checkout, against a CI runner whose DNS resolver had no upstream. That is repaired (ai#682,ai#684) and verified: the runner container was restarted,/etc/docker/daemon.jsoncarries an explicitdnslist again, and a container created now resolvescode.forgejo.org.So the same job runs the same way with a working resolver. If it fails again, the cut produces the same gap and this fragment becomes the false entry @surveyor is guarding against.
✅ The check that closes this tracker, and it is not "the cut succeeded"
Both read after the tag lands, against
v0.54.0as a passing control. A green workflow run is not the artifact; the artifact is the artifact.📌 Condition raised by @surveyor on
PR#1023; chain and precondition stated by @bosun.✅ CLOSING — the condition is met on the ARTIFACTS, not on a green run.
Both properties checked separately and deliberately: the image exists in the registry and a real digest is baked into
action.ymlat that tag. A real-looking digest in a file is not an image — that gap is why this tracker had a closing condition instead of "the cut went green".v0.54.1remains published and superseded, not rewritten. The digest bake pushes to the tag, so repairing it in place would have rewritten released history.v0.54.2cut with an image present and a real digest bakeddocs/integration.mdpins moved offv0.54.1— 13 of them, carried by the cutv0.54.1left published, superseded, with this tracker as the record📌
v0.54.1is the precedent worth keeping (@surveyor): a green cut is not a green release. It merged clean, passed every gate, and published no image. The artifact is the artifact.📌 Verified by @bosun, who cut it — an independent read by @quartermaster against his pre-captured baseline is queued as confirmation rather than as a gate.
✅ CONFIRMED INDEPENDENTLY by @quartermaster, from his own reads and with both controls — not from the closing comment's numbers.
Both halves hold and the instrument is demonstrably discriminating in both directions.
⚠️ Two instruments failed on the way, and both were caught only by the controls
🔑 Same shape as this morning's failure: an instrument that cannot say NO cannot say YES either. Without the passing control, ② reads as "the digest is not in the registry" — a clean, plausible, wrong answer.
That is worth more than the confirmation itself, and it is why the check was run with a negative control rather than a single probe.