chore(release): v0.9.0 #120

Merged
alex merged 1 commit from release-prep/rolling into main 2026-06-26 17:57:36 +02:00
Member

Added

Rolling-PR bump-override mechanism (#107) — operator can attach bump/patch, bump/minor, or bump/major to the open rolling PR (release-prep/rolling) to override the auto-detected bump level. The slash separator enables Forgejo's exclusive-label group behavior: picking bump/minor auto-removes bump/patch / bump/major from the same PR — Forgejo enforces single-select at the UI/API layer. release-decide.sh's read step keeps a defense-in-depth fail-loud guard against multiple-bump-label scenarios.

Scope (per operator clarification 2026-06-26): rolling-PR-only. Labels on author PRs, issues, or any other surface have no effect — release-decide reads labels only on the open release-prep/rolling PR. Documented openly in docs/integration.md so the scope is unambiguous for adopters.

New helper scripts/setup-bump-labels.sh — idempotent label provisioning via Forgejo API. Run once per consumer repo: FORGEJO_TOKEN=<token> scripts/setup-bump-labels.sh <owner>/<repo>. Creates the three labels with the exclusive flag set; updates existing labels to enable exclusivity if they were set up without it.

Namespace shift breaks the prior bump:patch|minor|major (colon) syntax — zero adopters at this point per operator's confirmation, so no deprecation window; the colon syntax is gone.

Closes #107.

  • rolling-PR bump/* label override — slash namespace for Forgejo exclusive groups (closes #107)

Fixed

v0.8.1 substrate sweep — three changes bundled per operator's sprint scoping decision. Closes #113 + #114.

Carry-forward fix from v0.8.0 cut: OWNER/REPO variables in _release.yml's manifest-update step are now derived BEFORE the path-α/γ split, not just inside the γ branch. v0.8.0's path-α direct-push cut completed successfully (manifest commit e240b68 landed via release-bot direct-push), but the post-step stale rolling PR cleanup (#87) crashed with OWNER: unbound variable because the variables were γ-scoped. The §10 "every cut surfaces a catch" pattern fires once at v0.8.0 after v0.7.0's clean cut — pattern continues at lower frequency.

#113 auto-assign manifest follow-up to rolling-PR merger (γ-only scope post-ADR-0007): when _release.yml opens the manifest follow-up PR under path (γ), it now looks up the rolling PR's merger via forgejo_find_pr_by_merge_sha (the same Layer 2 helper) + reads .merged_by.login + assigns the manifest PR to that user. Best-effort with graceful degradation: skips self-assignment when the merger is release-bot itself; failures don't block the cut path; the assignment is a UX touch (routes responsibility to the operator who clicked Gate-1) rather than a load-bearing mechanism.

#114 configurable publish mode (draft default vs immediate opt-in): new publish_mode input on _release.yml's workflow_call (and release.yml's workflow_dispatch); flows through to draft-release.sh via the PUBLISH_MODE env var. draft (default) preserves ADR-0003 Gate-3 (operator clicks Publish in the UI). immediate opts in to direct publish for high-cadence consumer scenarios. draft-release.sh validates the input fail-loud on unknown values. forgejo_create_release_draft gained an optional 7th arg for the mode.

Test coverage: 4 new bats tests in tests/draft-release.bats for #114 (default → draft, explicit draft, immediate, invalid fail-loud). Pre-existing 317 tests remain green (no regressions). #113 + the carry-forward fix are inline _release.yml bash; verified via YAML lint pass + the next cut's empirical exercise.

  • v0.8.1 sprint — carry-forward (OWNER unbound) + #113 auto-assign + #114 publish mode
### Added **Rolling-PR bump-override mechanism** ([#107](https://git.frankenbit.de/frankenbit/release-toolkit/issues/107)) — operator can attach `bump/patch`, `bump/minor`, or `bump/major` to the open rolling PR (`release-prep/rolling`) to override the auto-detected bump level. The slash separator enables **Forgejo's exclusive-label group** behavior: picking `bump/minor` auto-removes `bump/patch` / `bump/major` from the same PR — Forgejo enforces single-select at the UI/API layer. `release-decide.sh`'s read step keeps a defense-in-depth fail-loud guard against multiple-bump-label scenarios. **Scope** (per operator clarification 2026-06-26): rolling-PR-only. Labels on author PRs, issues, or any other surface have no effect — release-decide reads labels only on the open `release-prep/rolling` PR. Documented openly in `docs/integration.md` so the scope is unambiguous for adopters. **New helper `scripts/setup-bump-labels.sh`** — idempotent label provisioning via Forgejo API. Run once per consumer repo: `FORGEJO_TOKEN=<token> scripts/setup-bump-labels.sh <owner>/<repo>`. Creates the three labels with the exclusive flag set; updates existing labels to enable exclusivity if they were set up without it. **Namespace shift breaks the prior `bump:patch|minor|major` (colon) syntax** — zero adopters at this point per operator's confirmation, so no deprecation window; the colon syntax is gone. Closes [#107](https://git.frankenbit.de/frankenbit/release-toolkit/issues/107). - rolling-PR bump/* label override — slash namespace for Forgejo exclusive groups (closes #107) ### Fixed **v0.8.1 substrate sweep** — three changes bundled per operator's sprint scoping decision. Closes [#113](https://git.frankenbit.de/frankenbit/release-toolkit/issues/113) + [#114](https://git.frankenbit.de/frankenbit/release-toolkit/issues/114). **Carry-forward fix from v0.8.0 cut**: `OWNER`/`REPO` variables in `_release.yml`'s manifest-update step are now derived BEFORE the path-α/γ split, not just inside the γ branch. v0.8.0's path-α direct-push cut completed successfully (manifest commit `e240b68` landed via release-bot direct-push), but the post-step stale rolling PR cleanup (#87) crashed with `OWNER: unbound variable` because the variables were γ-scoped. The §10 "every cut surfaces a catch" pattern fires once at v0.8.0 after v0.7.0's clean cut — pattern continues at lower frequency. **`#113` auto-assign manifest follow-up to rolling-PR merger** (γ-only scope post-ADR-0007): when `_release.yml` opens the manifest follow-up PR under path (γ), it now looks up the rolling PR's merger via `forgejo_find_pr_by_merge_sha` (the same Layer 2 helper) + reads `.merged_by.login` + assigns the manifest PR to that user. Best-effort with graceful degradation: skips self-assignment when the merger is `release-bot` itself; failures don't block the cut path; the assignment is a UX touch (routes responsibility to the operator who clicked Gate-1) rather than a load-bearing mechanism. **`#114` configurable publish mode** (`draft` default vs `immediate` opt-in): new `publish_mode` input on `_release.yml`'s workflow_call (and `release.yml`'s workflow_dispatch); flows through to `draft-release.sh` via the `PUBLISH_MODE` env var. `draft` (default) preserves [ADR-0003](docs/adr/0003-multi-stage-operator-gate.md) Gate-3 (operator clicks Publish in the UI). `immediate` opts in to direct publish for high-cadence consumer scenarios. `draft-release.sh` validates the input fail-loud on unknown values. `forgejo_create_release_draft` gained an optional 7th arg for the mode. **Test coverage**: 4 new bats tests in `tests/draft-release.bats` for #114 (default → draft, explicit draft, immediate, invalid fail-loud). Pre-existing 317 tests remain green (no regressions). #113 + the carry-forward fix are inline `_release.yml` bash; verified via YAML lint pass + the next cut's empirical exercise. - v0.8.1 sprint — carry-forward (OWNER unbound) + #113 auto-assign + #114 publish mode
release-bot changed title from chore(release): v0.8.1 to chore(release): v0.9.0 2026-06-26 17:49:22 +02:00
forgejo-actions force-pushed release-prep/rolling from 788720bfd1
All checks were successful
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
manifest-check / check (pull_request) Successful in 0s
to 1f9bd106b8
Some checks failed
release / decide + act (push) Failing after 5s
release / release (push) Has been cancelled
2026-06-26 17:49:24 +02:00
Compare
alex approved these changes 2026-06-26 17:56:42 +02:00
Dismissed
alex approved these changes 2026-06-26 17:57:27 +02:00
alex merged commit 1f9bd106b8 into main 2026-06-26 17:57:36 +02:00
alex deleted branch release-prep/rolling 2026-06-26 17:57:36 +02:00
Sign in to join this conversation.
No description provided.