chore(mirror): set-adopter-pin pushes the pin to main instead of opening a PR that needs a human merge #1524
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit#1524
Loading…
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?
Measured
After the v0.64.0 mirror publish,
mirror-release.yml'sset-adopter-pinjob did its job:rt readme-pin-check --fixmoved every adopter pin@v0.63.0→@v0.64.0and opened #1519 asrelease-botat 2026-10-02 20:49. Every one of its 30 status contexts was green.It then sat until a human merged it by hand (alex, 22:08, zero review rows — an admin bypass, since
apply_to_admins: false). For those 79 minutesreadme-pin-check / mirrorfailed on every other PR graded in that window, for a reason none of them caused. That cost is written intoreadme-pin-check.yml's own header as consequence 1.Live
mainbranch protection, read 2026-10-02:required_approvals1enable_push_whitelist/push_whitelist_usernamestrue/["release-bot"]apply_to_adminsfalsereadme-pin-check / digest; notreadme-pin-check / mirrorrelease-botalready pushes tomaindirectly under this rule:63134a1andaa6f603(v0.64.0 post-cut bookkeeping) are both authored and committed byrelease-bot, with no PR. So the credential and the whitelist entry exist and work; the pin job just does not use them.Why it matters
readme-pin-check / mirroris red on every unrelated PR. That teaches people to ignore that context, and it is the only context that tells them the README names something a stranger cannot fetch.release-botcannot approve its own PR (Forgejo blocks self-approval globally, AGENTS.md section 8), so the PR path can never finish without a person.Proposal
RELEASE_TOOLKIT_TOKENis set andrt preflight-push-whitelist alphadoes not refuse → fast-forward push to the default branch asrelease-bot, then read it back.main(#78) nor open a PR that gets graded (#1393), so there is no working route to fall back to.One difference from the manifest: a refused alpha falls back to gamma instead of failing. The cut must not leave a release half-done, but a pin that lands later by PR is still correct.
Why not a repo variable (opt-in, PR by default)? Considered and declined. The manifest fork has no variable; its switch is the credential. In this repo the same PAT already pushes the post-cut commits to
main, so an opt-in would protect nothing, and two rules for the same fork are easy to confuse.Both paths re-grade the rewritten tree (
readme-pin-checkwithout--fix, andtag-action-digest-check) before the commit. On alpha, thepush: mainruns grade the commit after it lands.First draft (superseded): push-only, retiring the PR path.
Acceptance criteria
set-adopter-pintakes the PAT asRELEASE_TOKEN_OVERRIDE(the name the credential resolver reads), and no step readssecrets.GITHUB_TOKEN. — DONE @ #1525 (dd871e8, reviewed asdd871e8)RELEASE_TOOLKIT_TOKENthe job fails with an::error::that names the secret and the manual remedy. — DONE @ #1525 (dd871e8, reviewed asdd871e8)dd871e8, reviewed asdd871e8)readme-pin-check(no--fix) andtag-action-digest-check; either one failing stops the job. — DONE @ #1525 (dd871e8, reviewed asdd871e8)rt preflight-push-whitelist alphapassing → push; refusing → PR with no push attempt; push rejected → PR. Pinned by an arm that runs the real fragment. — DONE @ #1525 (dd871e8, reviewed asdd871e8)dd871e8, reviewed asdd871e8)dd871e8, reviewed asdd871e8)readme-pin-check.yml's consequence-1 comment describes both windows. — DONE @ #1525 (dd871e8, reviewed asdd871e8).giteatwin regenerated;rt gitea-twin --checkpasses. — DONE @ #1525 (dd871e8, reviewed asdd871e8)Landed via #1525: fast-forward merge pinned to the approved head, so
main=dd871e878a476038fff8cf4d31ff34402b5c0806= the reviewed head (no merge commit).dd871e8. The code review is in review 7204 (bound todd871e8, no open findings); finding 4 of review 7203 was declined and the decline accepted.success, 30/30 contexts ondd871e8before merge.ac-closure-checkand a scan of every PR comment, review body and the title found no closing keyword.Not yet exercised live:
set-adopter-pinruns only after amirror-release.ymldispatch. The next mirror publish is its first real run. Look foradopter-pin path=alpha: pushed …(expected here, since release-bot is on main's push whitelist) oradopter-pin path=gamma: PR #….Closing by hand.