v0.4.0 architectural arc: release-please-shaped drifting-PR + push-trigger mechanic #52
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#52
Loading…
Add table
Add a link
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?
Goal
Reinstate the auto-fire / single-button release flow without exposing the Forgejo expression-engine bug (#41/#47). Adopt the operator's preferred shape (drifting/rolling release PR + single release action that triggers on merge), modeled on Google's release-please.
Why now
#41 closed in v0.3.4 (PR #51) by removing the broken
pull_request.closedauto-fire entirely —release-draft.ymlis now operator-dispatch-only viaworkflow_dispatch. That's the substrate-honest stopgap; the architectural redesign is the real fix.Substrate constraint that shapes the design
Forgejo's Actions expression engine cannot reliably resolve
github.*/forgejo.*accesses pulling from thepull_requestevent payload on.closedevents:if:guards (job fires when it should skip)forgejo.*namespace is parity-by-definition withgithub.*— namespace-swap doesn't helpTherefore: the redesign must not depend on
pull_requestevent payload expressions for any load-bearing decision.Proposed shape (release-please-style)
Trigger:
on: push: branches: [main]only.State:
.release-toolkit-manifest.json(or extend existing config) tracking:Logic in a single workflow:
git log <last-released-sha>..HEAD(shell, not expressions)_release-draft.yml+ tag) → update manifestrelease-prep.shagainst the accumulated bump) → push torelease-prep/vX.Y.Zbranch → open/refresh PRSingle workflow run handles both paths with internal branching, same as release-please.
Acceptance criteria
.release-toolkit-manifest.jsonschema designed + documented — schema shipped (fields:schema,last_released_sha,last_released_version,last_released_tag,last_released_at; verifiable at.release-toolkit-manifest.jsononforgejo/main; ADR-0004 governs the design). Machine-managed; operator-not-to-hand-edit convention documented in.forgejo/workflows/release.ymlheader.release.ymlworkflow onpush:maintriggers both the rolling-PR update AND the post-merge release cut — landed as.forgejo/workflows/release.yml; header comment names the three modes (mode=noop/mode=update/mode=cut) and the load-bearing decision hook (release-decide.sh). Currently live on release-toolkit + tmux-tell + cellblock + ember + jam-site consumers.git log+ manifest read), nopull_requestexpressions —release-decide.shwalksgit log <last_released_sha>..HEAD; the entire release pipeline avoidspull_requestexpressions per Forgejo-engine-bug substrate constraint. Recently hardened via #259 (buried-prepare walk) + #331 (squash-merge regex) + #366-#370 (multi-layer safeguards).0.33.0per manifest.docs/integration.mdupdated with the new consumer-side template (likely 15-20 lines, similar to release-please's) — updated; sections include## What you get,## Prerequisites,## Bootstrapping a new consumer repo,## Adoption,## Runner requirements (#357),## Manifest vs tag anchor precedence (#380),## Per-project configuration overrides,## Default branch (#370). Consumer template lives at## Bootstrapping a new consumer repo.v0.35.02026-07-23 via the toolkit; cellblock is a live consumer perdocs/case-study-cellblockreference on tmux-tell). Migration path documented underdocs/integration.md§ "Adoption".scripts/release-prep.sh+scripts/draft-release.shreused (not rewritten) — orchestrated by the new entry-point step — both scripts survive as the orchestrated worker steps invoked byrelease-decide.sh+.forgejo/workflows/reusable-release.yml; not rewritten. Header comment:mode=update -> ... invoke release-prep.sh --rolling-mode/mode=cut -> ... invoke draft-release.sh.bump_overrideUX preserved (operator can still force a major/minor cut when needed) —.forgejo/workflows/release.yml:36-59preservesworkflow_dispatchwithbump_override+dry_runinputs. Header comment: "workflow_dispatch retained as a fast-path for emergency cuts (bump_override + dry_run inputs preserve v0.3.x dispatch ergonomics)."Open design questions
bump_overridework in the rolling-PR mechanic? (release-please uses PR labels for this; we could too)Refs
Filed: 2026-06-25 from the v0.3.4 sprint convergence with operator + Surveyor.
AC-hygiene sweep 2026-07-24 (Quartermaster; per Bosun 3f6b dispatch): all 8 ACs substrate-verified across
.release-toolkit-manifest.json+.forgejo/workflows/release.yml+docs/integration.md+ ~30 successful dogfood cuts (v0.4.0 → v0.33.0). Done-not-ticked → ticked with evidence pointers. The v0.4.0 architectural arc is the load-bearing substrate the current release-toolkit runs on; every subsequent cut-mechanism improvement (#259, #331, #366+) sits on top of it.forgejo-actions referenced this issue2026-06-25 20:49:00 +02:00