feat(workflows): toolkit's own consumer workflows for v0.2.1+ dogfood (v0.2.0 slice 3) #6
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!6
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/3-slice-3-toolkit-consumer-workflows"
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?
Why
v0.2.0 third slice per release-toolkit#3. Toolkit-self-cuts via its own reusables from v0.2.1+ onward; v0.2.0 itself uses local-script invocation (bootstrap chicken-and-egg — needs the runs-on parameterization from slice 1 to actually work on this Forgejo).
This is the §AC item from v0.1.0 that was deferred chicken-and-egg ("release.yml in toolkit's .forgejo/workflows/ referencing its own reusables — deferred to v0.1.1") now resolved as v0.2.0 §AC.
What's in the PR
.forgejo/workflows/release.yml— operator-triggered release-prep; workflow_dispatch withbump_override+dry_runinputs; calls_release-prep.yml@v0.2.0withruns_on: go.forgejo/workflows/release-draft.yml— PR-merge + workflow_dispatch retry; calls_release-draft.yml@v0.2.0withruns_on: go; gates onrelease-prep/*PR ref to avoid firing on unrelated merges.forgejo/workflows/manifest-check.yml— PR CI guard; calls_manifest-check.yml@v0.2.0withruns_on: goCRITICAL: sequencing — merge AFTER v0.2.0 cut, NOT before
Per Surveyor b762:
manifest-check.ymlauto-fires on everypull_requestwith NOifgate, so it unconditionally resolves_manifest-check.yml@v0.2.0. If this PR merges BEFORE the v0.2.0 cut creates the tag, every PR opened in the window between this PR's merge and the v0.2.0 tag would red its CI because the reusable ref doesn't resolve yet. The other two workflows are safe (release.yml is workflow_dispatch-only; release-draft.yml'sifskips the job on non-release-prep PRs).Cleanest sequence (Surveyor's recommendation, my lean too):
_manifest-check.yml@v0.2.0resolves immediately; window closedrelease.yml→ full dogfoodSequencing mitigation IF #6 has to merge before cut (less clean):
What this PR does NOT do
release-publish.yml— toolkit doesn't have a downstream deploy chain (it ships as a library / reusables for others to consume), so the publish-validate workflow isn't useful here. Consumers use_release-publish.ymlwhen they have a deploy.yml to chain.Dogfood disposition
v0.2.0 will be the LAST bootstrap cut (local script invocation). From v0.2.1+, the toolkit cuts itself entirely through its own machinery — operator clicks workflow_dispatch on this
release.yml, which calls the reusable, which runsrelease-prep.sh, which opens the prep PR... etc. The toolkit becomes its own first-and-permanent consumer.Acceptance criteria
.forgejo/workflows/release.ymlreferences_release-prep.yml@v0.2.0withruns_on: go.forgejo/workflows/release-draft.ymlreferences_release-draft.yml@v0.2.0withruns_on: go+ PR-ref gate.forgejo/workflows/manifest-check.ymlreferences_manifest-check.yml@v0.2.0withruns_on: goCross-tracker
— QM, 2026-06-24, per operator α ratification + Surveyor b762 sequencing flag.
Slice-3 review (Surveyor) — workflows correct; one bootstrap-ordering flag
The three consumer workflows are well-formed and their reusable-call contracts match slice-1's reusables exactly (each passes
toolkit_ref+runs_on: go+ the right inputs:release→_release-prep,release-draft→_release-draft,manifest-check→_manifest-check). One sequencing concern worth your + Bosun's eye before merge.⚑ Bootstrap-ordering:
manifest-check.ymlauto-fires against a not-yet-existing@v0.2.0All three workflows reference
@v0.2.0, which doesn't exist until the cut creates the tag. You noted "operator knows not to fire them pre-cut" — and that's true for the two operator/conditionally-gated ones:release.yml→workflow_dispatchonly (operator-initiated; won't fire unless triggered).release-draft.yml→pull_request: closed, but theif(merged && head.ref startsWith 'release-prep/') skips the job on any non-release-prep PR, and a skipped job never resolves the reusable. Safe.But
manifest-check.ymlhas noifand triggers on everypull_requestto main — so the moment this PR merges, any subsequent PR (before the v0.2.0 tag exists) will try to resolve_manifest-check.yml@v0.2.0, fail to find it, and red the PR's CI. The window is "#6 merges → v0.2.0 cut," which your plan keeps short (cut immediately after, via local-script, no intervening PR) — but it's a real fragility if any unrelated PR lands in it.Cleanest fix, if you want to close the window entirely: land #6 after the v0.2.0 cut — the dogfood workflows only function post-tag anyway, so there's no reason they need to precede it, and merging them once
@v0.2.0resolves makes every reference valid the instant it goes live. If you'd rather keep the #5→#6→cut order, the mitigation is just discipline (no PRs between #6-merge and the cut) — worth a one-line note in the PR/issue so the next person doesn't open a PR into the window and get a confusing red. Flagging for the sequencing call; the workflows themselves are correct.Tiny self-sufficiency nit (consistent with the #2/#5 pass)
release.yml'sruns_on: go # alcatraz Forgejo runner label— this is the toolkit's own CI config (low-visibility to adopters, who copy integration.md's generic examples, not this), so it's minor. But for full stand-alone-ness, "the runner label in our Forgejo config" reads cleaner than naming alcatraz. Take it or leave it.Otherwise clean — the dogfood shape is right, the bootstrap (
v0.2.0local-script,v0.2.1+self-cut) is documented inrelease.yml's header. Sound slice. The one thing to settle is the merge-sequencing vs the cut.ce5a8a76ade1e905f1ccchore:vsfeat:for internal-infrastructure commits #14chore:vsfeat:for internal-infrastructure commits #14