chore(ci): run the release-toolkit PR gates from one pr.yml at v0.66.0 #64
No reviewers
Labels
No labels
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
status/blocked
status/deferred
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/purser!64
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/63-pr-gates-v0.66.0"
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?
Refs #63. Part of frankenbit/release-toolkit#1530.
This PR runs purser's three release-toolkit PR gates from one
pr.yml, which callsreusable-pr-gates.yml@v0.66.0. It also movesrelease.ymlto the same tag, up from v0.36.0.It also fixes two changelog texts that v0.66.0's gates grade. One of them would otherwise turn every purser PR red. See "Changelog fixes" below.
What changes
.forgejo/workflows/pr.yml. Its job id isgates, so the context ispr / gates (pull_request).layout: combined, withmanifest,fragmentsandchangelog_bodyset to'on'.register,ac_closureandworkflow_parsestay at their default, off.pull_requesttypes includeedited, and there is nopaths:filter (ADR-0013 D4, frankenbit/release-toolkit#644).secrets:line, because pr-gates needs none (C3).manifest-check.yml,fragment-check.ymlandchangelog-body-check.yml.release.yml: thereusable-release.ymlpin moves from@v0.36.0to@v0.66.0. Its comment namingreusable-release.yml@v0.36.0now names v0.66.0, which still has nobuild_commandorasset_pathsinput, soattach-release-assetstays.release-toolkit.yml: the comment listing the workflow files is updated.changelog.d/63.internal.md.pr / gates (pull_request)after it has posted on purser's rolling release PR.Carry-forward from the old wrappers
pr.ymlmanifest-check.ymlruns_on: goruns_on: go,manifest: 'on'fragment-check.ymlruns_on: go, pluspaths: ['changelog.d/**']fragments: 'on'. The paths filter is dropped on purpose (D4). Coverage now runs on every PR.changelog-body-check.ymlruns_on: go, pluspaths: ['CHANGELOG.md']changelog_body: 'on'. The paths filter is dropped on purpose (D4).None of the three wrappers passed a density threshold,
valid_kinds,fragments_dir,changelog_pathorconfig_path. All of them ran on the defaults.At v0.36.0, the fragment reusable had no density inputs. Only the body reusable had the five thresholds, all empty, which means rt's defaults: 30, 25, 2, 100 and 75. pr-gates has one set of five, also empty by default, and it feeds both
fragmentsandchangelog_body. So both gates still grade at rt's defaults.valid_kinds,fragments_dir,fragment_length_warn_chars(500),changelog_pathandconfig_pathkeep the same defaults as before.release.ymlacross v0.36.0 to v0.66.0I diffed
reusable-release.yml'son: workflow_call:block between the two tags.release_pr_reviewersandcut_gatewere added, both optional. None was removed or renamed. The four that purser passes (runs_on,bump_override,dry_run,publish_mode) all still exist.publish_modewent from'draft'to'immediate'at v0.43.0. I checked every tag in between. purser passes${{ inputs.publish_mode || 'draft' }}explicitly, so it stays on draft, and that line is unchanged.secrets: inherit.attach-release-assetreadsmodeandcut_tag, and both still exist.release.ymlis the@v0.36.0comment aboutbuild_commandandasset_paths. The same file at v0.66.0 has neither input, so the comment still holds and now names v0.66.0.I read every
### Upgradeand### Removedsection from v0.37.0 to v0.66.0. Only two of them had content: v0.38.0, where the bash gates were retired, and v0.43.0, where the Codeberg mirror was retired. Neither touches purser.Behaviour changes that do reach purser, outside those sections:
No-Changelog:line (v0.54.0). Density is graded and FAILs on a violation (v0.39.0).RELEASE_TOOLKIT_TOKEN.release.ymlcomment saying purser runs withoutRELEASE_TOOLKIT_TOKENis therefore stale. I left it alone. This PR does not change it.rtwith a minisign check.RELEASE_TOOLKIT_MINISIGN_PUBLIC_KEYis set at org scope (/orgs/frankenbit/actions/variables) and is not overridden at repo scope.Changelog fixes (operator chose this option)
CHANGELOG.md[0.4.0](commit624e35e). At v0.48.2,rt changelog-body-checkcheck 5 went from Warn to Fail. Check 5 flags a section that mixes bullets and prose. The old body wrapper ran only on PRs that touchedCHANGELOG.md. pr-gates runs the check on every PR, so every PR is graded against the newest block,[0.4.0]. That block failed:27a5d6b, which edited the same released section for the density gate.changelog.d/61.fixed.md(commit2c29adc). One sentence ran past 30 words, and it is now split in two with the meaning unchanged.rt prep --dry-run(v0.66.0) on the pre-fix tree, and its cut-timecompose-verifymirror reported "clean". Since v0.48.0, a fragment contributes only its summary line to the composed section.Local re-run with
rtbuilt from v0.66.0 (b1a9578), on head2c29adc:manifest: all checks passed.fragments: coverage PASS and density PASS, with 2 fragments graded and no findings.changelog_body: "passed with warnings". Checks 1 to 6 and 8 pass, including check 5. Check 7 warns on sentences of 28 and 30 words, and check 9 warns on an 88-word paragraph. Both warnings are below the failure line.rt prep --dry-run: "Cut-time changelog gates - clean". All ten lines PASS: register-check and checks 1 to 9, for the would-be v0.4.1.Self-bootstrap note
This is not toolkit-self, so no re-pin is involved. purser gets each toolkit change from the tag it pins.
Review
@alex, please verify at source (release-toolkit AGENTS.md section 6):
pr / gatesrun;workflow_calldiff above, at both tags.🤖 Generated with Claude Code
HOLD: pushing two new commits (option A, the changelog fixes). The current head
eb36faf6acis superseded. I will post the new full head SHA when the push lands.New head:
2c29adcf57(eb36fafplus624e35eand2c29adc, the changelog fixes). HOLD lifted. The PR body is updated: the decision is resolved, the toolkit side is frankenbit/release-toolkit#1551, and the claim about 61.fixed.md at cut time is corrected.Verdict: APPROVE at
2c29adcf57Summary: purser's three gates move to one
pr.ymlatreusable-pr-gates.yml@v0.66.0, andrelease.ymlmoves from v0.36.0, the longest jump, with nothing it passes or reads affected. The two option-A commits are needed, and624e35epreserves the released text word for word. Nothing is blocking. Two items are for the record: one commit message makes a claim already measured false, and the gates now run on every PR.Head pinned with
rt review-submit-check(rc=0, READY) immediately before this review. Base41cd0d3is purser's livemain. Three commits, all authored as Alexander Saratow.Job logs (Axis C), read in the browser
Runs 270 and 271, job 1, both at commit
2c29adcf57:layout=combined; on gates: manifest fragments changelog_body.caller scan over 4 top-level workflow file(s),remote v0.66.0 .forgejo/workflows/pr.yml,resolved toolkit ref: v0.66.0 (source=baked),per-gate script: .release-toolkit/scripts/pr-gates.sh.PASS - this head already contains origin/main at 41cd0d3...Cache restored from key: rt-v0.66.0-linux-amd64(the runner's cache is shared across repos), thenminisign signature OK,signed for v0.66.0 (trusted comment matches),cache hit ... verifying restored binary,checksum OK (189ebf7f9a65...). Because the restored binary is re-verified against the signed checksum, a cache shared between repos cannot hand purser a different binary.all checks passed;present: changelog.d/61.fixed.md, changelog.d/63.internal.md, coverage PASS and density PASS;PASS: check 5 (style): all sections consistent, thenpassed with warnings(check 7 and check 9 WARNs);skipped;every expected gate ran (manifest fragments changelog_body).Statuses: 10, combined
success, includinggo-ci / lint + build + testandpr / gates (pull_request).The option-A commits, with a live discriminator
At
eb36faf, before them, run 268 job 1 logs:FAIL: check 5 (style): mixed bullet+prose in section(s): Added (bullets=2 prose=8)andchangelog-body-check: FAILED;FAIL: pre-existing fragment: 61.fixed.md → check 7 (sentence length) ... exceed 30 words, non-blocking on a PR.At head, check 5 passes and 61.fixed.md grades clean. So:
624e35eis required. Without it, every purser PR is red until the next cut, because pr-gates grades the newest block on every PR.- **dashboard**: choose a certificate's expiry at issue time (#18)is #18's commit subject (9f99148). Nit: the message says "four prose paragraphs"; the diff moves two.2c29adcsplits one sentence,... until publication. So the step could never run in draft mode, the default for push events., with its meaning unchanged.rt prep --dry-runon the pre-fix tree reported clean, because fragments contribute only their summary line, so that claim is false (release-toolkit#1551, comment 115255). It is tidy-up only. The message cannot be amended here (no force-push), so this review records the correction.release.yml: v0.36.0 to v0.66.0, verified independentlycut_gateandrelease_pr_reviewerswere added, both optional. Nothing was removed or became required, and there are no declared secrets.mode(v0.66.0 line 124) andcut_tag(line 136), whichattach-release-assetreads, still exist.publish_mode's default changed from'draft'to'immediate'at v0.43.0. purser passes${{ inputs.publish_mode || 'draft' }}explicitly, unchanged, so cuts stay drafts and the asset job still attaches before publication.build_command/asset_pathscomment, now naming v0.66.0. It is accurate: neither input exists at v0.66.0.Carry-forward and behaviour change
Defaults: the three wrappers passed only
runs_on: go.config_path,fragments_dir,valid_kinds,fragment_length_warn_charsandchangelog_pathkeep identical defaults at v0.66.0, and changelog_body's five thresholds stay empty (rt defaults).Behaviour change. Every old wrapper except manifest carried a
paths:filter (changelog.d/**andCHANGELOG.md).fragment-check@v0.36.0also had no coverage or density input. So three things are new on every purser PR:no-changelog:line);That is the ADR-0013 wiring rule, and option A exists because of it. It is worth stating to contributors;
63.internal.mdsays it.pr.yml:editedis in the types, there is nopaths:and nosecrets:, the pin matchesrelease.yml's (D6), and the on/off values are quoted.Protection, read live:
enable_status_check: false.Follow-ups, not this PR
release.ymlcomment saying purser runs without the org token.RELEASE_PR_REVIEWERS=lookoutis unused.push: mainrun.After the merge (ADR-0013 D4)
pr / gates (pull_request)must post on purser's next rolling release PR before Alex turns checks on. The prep PR is the one whose whole content is CHANGELOG.md (purser#41), and changelog_body now grades it at PR time.