chore(release): v0.63.0 #1448
No reviewers
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
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!1448
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "release-prep/rolling"
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?
Changelog density — clean
Advisory mirror of the cut-time gate, computed when this description was written. It carries no authority: the cut re-runs these checks against the section as it stands then, and this branch is recreated from
mainon every compose.Added
mirror-release.ymlgains a guardedforce_recreate(#1426).Changed
None.
Fixed
digest-pin-verifydistinguishes stale anchors from wrong tags (#1458)Removed
None.
Deprecated
None.
Upgrade
None.
Internal
mirror-drift-checknow grades the newest release instead of excluding it permanently (#1445)ec96f54870c63143695ac63143695aa768bd2096a768bd209670964794fd70964794fde1f4d3d49de1f4d3d49dd1458fd213d1458fd2138ec52206118ec52206110ab48d11b60ab48d11b64bea5600a3APPROVED @
4bea5600. The artifact is clean. There is one live red, it is real, it is not caused by this PR, and it cannot block — so my stamp is the only enforcement and I am saying explicitly why I am not using it to hold.The artifact — graded, not skimmed
🔴 The red:
readme-pin-check / check— reproduced locally, and it is the SECOND stepNot in
status_check_contexts, so nothing holds the merge on it. I builtrtfrom this head and ran the gate's exact argv:The docs pin exactly one version —
@v0.62.4, 18 times — and that tag's action is unusable. An adopter followingdocs/integration.mdtoday getssha256:000…0.⚠️ I nearly reported a mechanism that does not exist, and the correction is the useful part
My first pass read
action.ymlat each tag from a local clone and produced this:I was one paragraph from writing "the bake is intermittent — 3 of the last 5 succeeded, so a spot-check would have said it works." It is not intermittent. Three of those eight reads were STALE:
git fetch --tagsdoes not move a tag ref that already exists locally, and the bake step force-moves the tag after committing the digest. Aftergit fetch --force --tags,v0.62.1,v0.61.0andv0.60.0all moved and all carry real digests — confirmed against the API, which never touched my clone.Corrected, it is perfectly deterministic: exactly the two tags whose goreleaser run FAILED carry the placeholder, and every successful run baked a real digest. The mechanism is the job order —
goreleaserpublishes the release,publish-imagebakes and force-moves the tag afterwards — so a failure anywhere downstream of publication leaves a published release whose tag never got its digest. Fail-closed protects the tag from a WRONG pin; it cannot un-publish the release.📌
readme-pin-check.yml's own step doesgit fetch --force --tagsand its comment explains only the MISSING-tag case ("A missing local tag is COULD-NOT-GRADE"). The--forceis load-bearing for a second reason the comment does not name: a stale tag is not missing, it answers confidently, and it answers wrong. Worth one line in that comment — it is the failure I actually hit.The number in
#1453's titleIts title says "five tags pin an all-zeros image digest". Swept all 122 tags after the force-fetch:
Three different true numbers — 14 tag-wide, 2 in the last eight, 1 doc-pinned — and they answer three different questions. The one that describes adopter exposure is
1. I am not asking anyone to renumber the title; I am recording the scope beside each figure so the next reader does not reconcile them.✅ Why I am not holding on it
Merging cuts
v0.63.0and does not touch the doc pins —prepdoes not advance them;mirror-release.ymldoes, after a manual mirror publish. So at merge time the docs still say@v0.62.4whatever happens.Holding this PR does not repair
v0.62.4and does not protect anyone from it. It would block the release train to protest a defect in an already-published release — a delay that fixes nothing, which is the false-hold shape this file warns costs nothing visible and wears the clothing of caution.🔴 The one thing that IS actionable, and it is an ORDERING
The path that advances the doc pins does not run the digest check.
mirror-release.yml's "point the README at what the mirror can now serve" job runsrt readme-pin-check --fix— mirror servability — and nothing grades the tag's action digest before the pin moves. That is how@v0.62.4became the pinned version while carrying the placeholder, and the detector that would have caught it (#1453/#1462) landed in this release cycle, after the fact.✅ The ask, and it is not this PR's job to carry it: do not advance the doc pins to
v0.63.0untiltag-action-digest-checkpasses onv0.63.0. Either add the digest check to the--fixjob before it opens the pin PR, or addreadme-pin-check / checktostatus_check_contextsso the pin PR cannot merge red. Today the only thing standing between a broken tag and the docs is a red on an advisory context.¶41 — you asked me to read the composed sequence, and the trigger does not fire
#1447(rt post-cut's manifest push, insidereusable-release.yml's cut path) and#1449(mirror-drift-check.yml,on: release: [published]).The trigger is both touch one ordered construct AND at least one MOVES state the other READS. The second half is false here:
mirror-drift-check.ymlcontains zero references tomanifestorlast_released_sha— it readsgitea.com's mirror state, not the manifestpost-cutwrites. They are independent, not composed.📌 And the ordering hazard that DOES live in that pair was already found and handled —
#1445's header: the release-event run cannot grade its own tag,EXCLUDE_TAGis set for the whole run, so the newest release had no drift signal until the next cut. The daily cron with an emptyEXCLUDE_TAGis the fix, and thenewest-releasepending context makes the gap visible immediately. I checked for your hazard and found their remedy for a different one.What I did NOT check
The
.giteatwins are not byte-identical to their.forgejocounterparts (11 of them). I did not grade that and I am not reporting it:gitea-twin-check / checkis required and green, and it is the gate that owns the invariant — a hand-rolledcmphere would be a first opinion with a false witness. I also did not re-verify the 17 fragments' individual prose;fragment-checkandchangelog-body-checkare both required and both green.⚠️ This is the ROLLING PR — the release bot force-pushes it on every base move, and
dismiss_stale_approvals=true. This stamp is bound to4bea5600and expires the moment the base moves. Re-ping me if it does; do not merge on a dismissed row.Landing identity record
4bea5600a3e1d5812900e051fd050c5bb246792f4bea5600a3e1d5812900e051fd050c5bb246792fThis is a post-merge identity record. It does not retroactively review the landed object; it records whether the server landed the object that an official approval named.