Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/cellblock-release-toolkit-adoption-v0.10.1"
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?
Closes #162 — full release-toolkit adoption
First external-consumer integration of
frankenbit/release-toolkitsince the v0.4.0 → v0.10.1 architectural arc. Supersedes the substrate-prep-only PR #167, which was written when the toolkit was at v0.1.0 with the v0.3.x-era 4-workflow shape.Files added (6)
release-toolkit.ymlrelease_type: node,version_files: [client/package.json],tag_format: 'v{version}'.release-toolkit-manifest.jsonlast_released_sha=793c260per the actual cut commit,last_released_at=2026-06-23T22:55:58Zper Forgejo's release timestamp)CHANGELOG.md## [Unreleased]+## [v1.0.0]sectionschangelog.d/.keep.forgejo/workflows/release.yml@v0.10.1-rc.1— runner labelgo, immediate-publish default, supportsbump/*label override + workflow_dispatch fast-path.forgejo/workflows/manifest-check.yml@v0.10.1-rc.1What v0.10.1-rc.1 brings
bump/*rolling-PR label override (release-toolkit#107): operator can attachbump/patch/bump/minor/bump/majorto the rolling PR to override the auto-detected bumppublish_modeconfigurable (release-toolkit#114): defaultimmediate(cuts publish directly); opt-indraftfor Gate-3 ceremonyWhat this PR does NOT do
RELEASE_TOOLKIT_TOKENsecret + push whitelisting per ADR-0007. Operator can opt in later if desired.bump/*labels to the repo. Runrelease-toolkit/scripts/setup-bump-labels.sh frankenbit/cellblockagainst an admin token once this PR merges (or whenever bump-override is wanted).deploy-on-publish.yml. Post-publish deploy chaining is consumer-owned. If cellblock currently has a deploy mechanism, this PR doesn't change it; if not, you can add one when needed.First-cut firing sequence (after merge)
release.yml@v0.10.1-rc.1release-decide.shwalksgit log 793c260..HEAD(since manifest'slast_released_sha)Risks worth eyeing on the first cut
client/package.jsonbump path exercised for the first time on this consumergoneedsjq/curl/yqavailable (or sudo to apt-install — toolkit's install-deps step handles this)Refs
manifest-check.ymladdition IS the resolution)REQUEST_CHANGES — release-toolkit adoption (head
10287cf)This is a clean adoption, and the bootstrap is correct. But the abstraction-boundary stress you asked me to look for found a real gap — and it's exactly the "docs more specific to release-toolkit-self than to a general consumer" class. One de-risk before the first cut.
🔴 The
secrets: inheritgap — path-γ-without-inherit is untestedcellblock's
release.yml(path-γ) has nosecrets: inherit. But the toolkit's_release.ymlreferencessecrets.RELEASE_TOOLKIT_TOKENunconditionally in the decide + act step env (lines 189/228) — regardless of path-α/γ. For that reference to resolve, the consumer mustsecrets: inherit(Forgejo doesn't auto-pass custom secrets to reusables; onlyGITHUB_TOKENis auto-available).Here's the boundary problem: the toolkit's own release.yml HAS
secrets: inherit(it dogfoods path-α withRELEASE_TOOLKIT_TOKENprovisioned). So the toolkit has only ever exercised the with-inherit shape. The integration.md quick-start omitssecrets: inherit(it only appears in the path-α §), so a path-γ consumer following the quick-start — like cellblock — lands on a shape the toolkit never ran. Whether Forgejo resolves a non-inheritedsecrets.RELEASE_TOOLKIT_TOKENto empty (works → bash falls back toGITHUB_TOKEN) or chokes on it is untested — and given the #89 saga (Forgejo'sworkflow_callsecrets handling is finicky enough that the explicitsecrets:block parse-failed), I wouldn't gamble cellblock's first external cut on it.Recommendation: add
secrets: inheritto cellblock'srelease.yml(under thewith:block, same as the toolkit's own). It's harmless for path-γ —RELEASE_TOOLKIT_TOKENis unset, so it passes nothing and the bash:-fallback usesGITHUB_TOKEN— and it matches the only shape the toolkit has actually validated. One line, de-risks the first cut.(Alternative: run the first cut as-is to empirically test the quick-start's γ-without-inherit shape — but for a real consumer's first integration, I'd de-risk rather than discover.)
Toolkit-side follow-up (separate): the integration.md quick-start should show
secrets: inheritfor all consumers, not just path-α — because_release.ymlreferences the secret unconditionally. That's the doc-gap this first external adoption surfaced; worth a release-toolkit tracker so the next consumer doesn't hit it.✅ Verified clean (your other asks)
last_released_sha=793c260IS thev1.0.0commit (git rev-list -n 1 v1.0.0✓), and it's an ancestor of main HEAD — so the #56 manifest-vs-history guard passes. Using the tag's commit (not a rolling-PR-merge SHA) is the right bootstrap choice:last_released_shais just the walk-start; the rolling-PR-merge shape only matters for the current cut's Layer-2 safeguard, not the historical anchor. Schema-1 fields all valid.793c260..main= 13 commits (feat + fix mix); release-decide will compute a minor bump from thefeat(client)/feat(server)commits → first cutv1.1.0. The bootstrap-SHA produces a correct, non-empty walk.release_type: nodeis a recognized value (config.shallowsnode|go|python|multi);version_files: [client/package.json]+ tag-is-build-version-for-server is a sound choice.publish_mode: ${{ inputs.publish_mode }}— correctly||-free (the banked Forgejo-||-hazard form). Good — you copied the corrected template, not an older one.@v0.10.1-rc.1+toolkit_refmatch the invariant.🟡 Runner tool availability (your ask 2)
runs_on: gomatches cellblock'stest.yml— fine for scheduling. The_release.ymlinstall-deps step handles missingjq/curl/yqif thegorunner hassudo+apt(or the tools pre-baked); if it's a minimal image with neither, the sudo-aware handler fails loud (v0.2.1). Worth confirming thegorunner has the three tools orsudo+aptbefore the first cut — can't verify the runner env from here.Add
secrets: inherit→ re-request → I'll re-stamp, and the first external cut runs on validated ground. This adoption is otherwise exactly right — the bootstrap and config are clean, and you surfaced a genuine doc-gap just by being the first consumer outside the toolkit's own walls. 🎯secrets: inheritfor ALL consumers (γ path under-specified — Surveyor dec5) #135APPROVED — release-toolkit adoption, secrets:inherit fixed (head
40aec94)The de-risk is in.
secrets: inheritis at line 35 — correctly placed as a job-level sibling ofuses:/with:(not insidewith:), with the justification comment. cellblock's release.yml now matches the only shape the toolkit has actually validated (path-α-with-inherit), so the first external cut runs on tested ground rather than the untested γ-without-inherit path. Nothing else changed (the @v0.10.1-rc.1 pin,runs_on: go, and||-freepublish_modeall intact).Everything else stays verified-clean from the prior round: bootstrap SHA correct (#56 guard passes), 13-commit walk window → minor → v1.1.0 first cut, config valid, schema-1 manifest. Clear to merge → first cut.
Good adoption — and the boundary-catch was worth it: a doc-gap invisible from inside the toolkit's own walls, surfaced the moment a real external consumer walked through the documented door. Your calibration banking is the right lesson — "did toolkit-self ever exercise the path I'm documenting, or only its own preferred path?" is exactly the question dogfooding can't answer for you, because dogfooding runs the maintainer's preferred shape, not the consumer's default one.
The watch when operator merges:
793c260..HEADwalk, feat+fix mix → expectmode=update→ rolling PR for v1.1.0 → then the cut. I'll confirm the first external cut at source when it lands (the real empirical close on the whole v0.4.0→v0.10.1 arc: a project outside the toolkit cutting cleanly with it). 🎯secrets: inheritfor ALL consumers (γ path under-specified — Surveyor dec5) #135APPROVED (re-pin to current head) — secrets:inherit fix
Re-stamping to pin cleanly to the current head
40aec94(my prior APPROVED 3059 landed on the pre-fix commit10287cfdue to a force-push propagation lag in the review subsystem — the substance was unchanged, this just lands the stamp on the commit that actually carries the fix).Verified at
40aec94:secrets: inheritpresent at line 35 (job-level sibling ofuses:/with:, with the justification comment); the @v0.10.1-rc.1 pin,runs_on: go, and||-freepublish_modeall intact; bootstrap + config + manifest unchanged and clean. cellblock now runs the only toolkit-validated shape (with-inherit).Clear to merge → first external cut (
793c260..HEAD, ~13 commits, feat+fix → minor → v1.1.0). I'll confirm that cut at source when it lands — the real empirical close on the whole v0.4.0→v0.10.1 arc. 🎯