feat(release): configurable publish mode — draft-first (default) vs immediate-publish #114
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#114
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?
Why
Currently
draft-release.shalways creates the release withdraft: true— the operator clicks Publish on the draft as Gate-3 of the multi-stage operator-gate pattern from ADR-0003. This is the substrate-honest default for high-stakes releases (consumer-facing, semver-significant).But for some consumer scenarios, the Gate-3 click is friction without benefit:
Adding a configurable publish mode lets each consumer pick the gate-pattern that matches their cadence.
Proposed surface
_release.ymlworkflow_call inputrelease.ymlconsumer templateForwarded the same way as other inputs (e.g.,
bump_override,dry_run).draft-release.shReads
PUBLISH_MODEenv var; whenimmediate, passes"draft": falseto the Forgejo API call.release-toolkit.ymlconfig (alternative or additional)Consumers could also set the mode in their config file rather than per-workflow-call. Decision question for design: per-workflow-call only, per-config only, or both? (Per-workflow-call is simpler + matches existing inputs; per-config locks the cadence at the consumer level.)
Substrate-honest defaults
draft— preserves ADR-0003's multi-stage-gate design. Consumers who don't think about this get the safe default.immediate— explicit consumer decision to skip Gate-3 for their cadence. Documented indocs/integration.md(likely alongside #112's review-gate tradeoff section).Composition with existing gates
publish_modeopt-in to skipComposition with #112 review-gate tradeoff
The pre-v1.0 readiness sweep (#106) is accumulating a family of per-consumer configuration questions:
required_approvals0 vs 1+ (which gates the manifest auto-merge)draftvsimmediate(which gates Gate-3)A unified "deployment cadence" docs section in
docs/integration.mdcould collect all three under "configurable cadence choices each consumer should make on adoption."What this PR (when implemented) does NOT do
Test coverage needed
tests/draft-release.bats:publish_mode=draft→ draft=true in API call (existing behavior, regression guard)publish_mode=immediate→ draft=false in API callpublish_modeunset → defaults to draft (backwards-compat)publish_mode=invalid→ fail-loud with clear messageADR consideration
The default-stays-draft + opt-in-to-immediate shape doesn't conflict with ADR-0003's substrate-honest framing. But the configurable-cadence-family (this issue + #112 + #113) might warrant a new ADR (ADR-0007 candidate) about "configurable per-consumer cadence patterns" — surface the family as a primitive rather than three independent ad-hoc features.
Decision-deferral: file the ADR question when one of the three lands as the first implementation; that's the earliest moment we know what the actual abstraction wants to be.
Refs
quartermaster referenced this issue2026-06-26 14:52:03 +02:00
Closing — implemented in v0.8.1 sprint + default-flipped in v0.9.1 sprint
publish_modeworkflow input +PUBLISH_MODEenv propagation +draft-release.shmode handlingdraft→immediateper operator audience-framingClose-keyword from #119/#125 didn't fire; cleaning up the tracker now.