-
Release v0.20.0
StableSome checks failedcheck-self-bootstrap / check (pull_request) Failing after 3smanifest-check / manifest-vs-tag consistency (pull_request) Successful in 5smanifest-check / check (pull_request) Successful in 0scheck-self-bootstrap / check (push) Failing after 3srelease / decide + act (push) Successful in 6srelease / release (push) Successful in 0sreleased this
2026-07-02 12:10:58 +02:00 | 1237 commits to main since this releaseFirst-cut reliability hardening. Every issue that surfaced on the first external toolkit-driven cut (tmux-tell) is now fixed at the substrate. Upgrade is a pin bump — fragment-check wiring is opt-in, everything else is transparent.
Added
Push-whitelist pre-flight on path-α cuts.
draft-release.shnow probes the consumer's default-branch protection before doing any work. Fails fast + names the missing identity ifrelease-botisn't onpush_whitelist_usernames, instead of the late mid-cutNot allowed to push to protected branchrejection that leaves the manifest desynced. Only fails on a definitive misconfig; warns-and-proceeds otherwise.docs/integration.mdnames it as a path-α precondition.reusable-changelog-fragment-check.yml+scripts/fragment-check.sh. Consumers wire it into theirpull_requestworkflow to fail-loud on unknown-kind fragments (e.g..documentation.md) before merge, instead of at the next cut. See docs/integration.md § fragment-check.yml for the consumer stanza. Closes #271.Changed
docs/operations.mdgained an annualrelease-botPAT rotation-cadence section. No action required on existing installs; consult before regenerating theRELEASE_TOOLKIT_TOKENActions secret. Closes #273.Fixed
External cuts no longer halt on the post-cut bake-reset step. The reusable's bake-reset blocks now guard
git commitwithgit diff --cached --quiet, so the empty-staging case (every external consumer — the bake-reset is toolkit-self-only by design) cleanly skips the commit + push instead of failing "nothing to commit" and cascading into the manifest never landing. This unblocks every external toolkit-driven cut. Toolkit-self behavior unchanged.forgejo_find_pr_by_headno longer mutates a random open PR. Forgejo'shead=query filter is empirically ignored, so.[0].numberwas picking whichever PR the API sorted first — releasing PATCHes onto a random open feature PR instead of the actual rolling PR. Now filters response client-side by exacthead.label/head.refmatch. No consumer-side change required. Closes #274.Rolling-PR prepare-commit push now authenticates with the path-α PAT. Previously it reused the
actions/checkoutsystem token, which Forgejo Actions' anti-recursion safeguard suppresses — so no CI ran on the rolling PR and its required checks could never satisfy. The push now injectsFORGEJO_TOKEN(theRELEASE_TOOLKIT_TOKENPAT) as an HTTPAuthorizationheader, mirroring the manifest push. Necessary but not sufficient — the consumer must still setRELEASE_TOOLKIT_TOKENto a real-user PAT (the documented path-α setup).release-decidedetects thechore(release): prepare vX.Y.Zcommit anywhere in the merged range, not only at HEAD. Previously, any commit landing on top of the prepare commit (a rebase nudge, a CHANGELOG dedupe) shifted HEAD off the prepare subject and the cut was silently skipped — the manifest stayed at the old version, no tag/release, stale rolling PR against the old baseline. The range scan is a full git-log walk. Existing Layer 2/3 safeguards still gate — a stale prepare commit in range falls through tomode=updateloudly. Squash-merge of the rolling PR is not yet covered; tracked as #259.Fragment vs conventional-commit duplicate suppressed at generation layer. When a fragment and a CC subject reference the same issue number,
release-prep.shnow suppresses the CC-subject bullet in favour of the fragment prose (richer wins). A[changelog-dedup]line is logged to stderr for auditability. Closes #258.release-prep.shPR body assembly now re-normalizes throughchangelog_merge_sectionsso any surviving duplicate### Kindheadings collapse to one section per kind. Belt-and-suspenders on top of the merge already done inchangelog_transition. Closes #272.Removed / Deprecated
None.
Upgrade
Pin your consumer wrapper's
uses:@<ref>tov0.20.0. Fragment-check wiring is opt-in (add.forgejo/workflows/fragment-check.ymlper docs/integration.md if you want the pre-merge gate). Everything else is transparent.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)