Skip to content

feat(release): auto-dispatch binary build when a release PR merges#396

Merged
githubrobbi merged 1 commit into
mainfrom
feat/release-auto-trigger
Jun 12, 2026
Merged

feat(release): auto-dispatch binary build when a release PR merges#396
githubrobbi merged 1 commit into
mainfrom
feat/release-auto-trigger

Conversation

@githubrobbi

Copy link
Copy Markdown
Collaborator

Summary

Closes the Path B gap surfaced by v0.5.121: just ship opened and auto-merged the release PR, but no binaries were built — Path B requires a second manual step (just release-tag) that was forgotten, while the ship completion banner still promised "GitHub Actions will produce binaries" on merge.

  • New release-auto-trigger.yml: on pull_request: closed into main, when the PR merged AND its head branch is release/v* (the shape only just ship / just release-pr creates), validate the version and dispatch release.yml. Zero workflow permissions except actions: write on the single job.
  • Path B guarantee preserved: a normal merge to main still triggers no release — the predicate keys on the release branch name.
  • just release-tag demoted to documented manual fallback (re-cuts / failed dispatch); Path B comment block and version-bump hint in just/build.just updated to match reality.
  • Deviation row appended to release-automation-plan.md §8 per append-only discipline (v0.5.121 itself was dispatched by hand, run 27422916912, before this landed).

Why dispatch instead of tag-push: GITHUB_TOKEN workflow_dispatch calls do create runs — unlike the tag-push anti-loop case that bit R4 — and every release since v0.5.114 has gone through the dispatch path anyway (release.yml creates the tag itself).

Test plan

  • Full pre-push gate green (required a cargo clean first — target/ was poisoned by the 06-08→06-12 nightly bump, the known fix(toolchain): invalidate target/ + sccache after a nightly bump #384 failure mode)
  • Predicate reviewed: merged==true && startsWith(head.ref, 'release/v'); version regex ^v\d+\.\d+\.\d+$ guards the dispatch
  • Live validation on the next just ship cycle: merge should produce a release.yml run with triggered_by=release-pr-merge-#<PR>

🤖 Generated with Claude Code

Closes the Path B gap surfaced by v0.5.121: 'just ship' opened and
auto-merged the release PR, but binaries required a second manual step
('just release-tag') that was forgotten — while the ship banner still
promised 'GitHub Actions will produce binaries' on merge.

New release-auto-trigger.yml fires on pull_request:closed into main,
and only when the PR merged AND its head branch is release/v* (the
branch shape only the ship flow creates) — so the Path B guarantee
that a normal merge triggers no release is preserved. It validates the
version and dispatches release.yml via workflow_dispatch (the same
path every release since v0.5.114 has used; GITHUB_TOKEN dispatches do
create runs, unlike the R4 tag-push anti-loop case).

just release-tag stays as the documented manual fallback for re-cuts
or a failed dispatch. Path B comment block + version-bump hint in
just/build.just updated; deviation row appended to
release-automation-plan §8.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@githubrobbi githubrobbi enabled auto-merge (squash) June 12, 2026 14:59
@githubrobbi githubrobbi merged commit 7608cf6 into main Jun 12, 2026
19 checks passed
@githubrobbi githubrobbi deleted the feat/release-auto-trigger branch June 12, 2026 15:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant