ci(release-plz): allow manual workflow_dispatch - #479
Merged
Conversation
release-plz only ran on push to `main` touching `src/**`/`Cargo.*`. When a release PR merges while the previous release is still cutting its tag, the new release PR run can race the tag creation and conclude "already up to date", stranding a releasable commit with no way to re-run — exactly what left a merged `feat` commit unreleased with no path to trigger a fresh evaluation. Adds `workflow_dispatch` and allows the `release-pr` job to run under it, so an operator can open the release PR on demand without pushing to `main`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Destynova2
enabled auto-merge
July 26, 2026 08:14
Destynova2
added a commit
that referenced
this pull request
Jul 26, 2026
## The CI/CD bug this fixes `feat(routing)` (#478) merged cleanly but **never produced a release**. release-plz kept reporting `grob: no commit matches the release_commits regex` and there was no way to cut v0.36.84. ### Root cause Every PR was merged with a **merge commit** (`gh pr merge --merge`), so the feature commit sits on the merge's **second parent**: ``` 572f539 Merge #478 parents: 95db3f6 (release v0.36.83) de4b690 (feat routing) ``` When release-plz cut v0.36.83 **between** the routing branch's creation and its merge, `de4b690` ended up *beside* the release commit rather than after it. Its version walk over `v0.36.83..HEAD` doesn't traverse into that second parent — `git log --first-parent v0.36.83..main` is **empty** — so the `feat` commit is invisible to the bump calc. It works for most PRs only because they're released immediately after merging, before the next merge buries them. ## Fix **Squash-merge only.** Repo settings now: - `allow_merge_commit = false` - `squash_merge_commit_title = PR_TITLE` Every PR becomes one conventional commit on a **linear** `main`, which release-plz reads reliably — the second-parent hiding place no longer exists. Applied to the repo already; this PR aligns CLAUDE.md (`--auto --merge` → `--auto --squash`, plus a note on why the PR title must be a conventional commit) and documents the manual `gh workflow run release-plz.yml` trigger added in #479. ## For the currently-stranded routing fix It's on `main` and ships with the next release cut for any releasable commit (now reliably, thanks to squash). Meanwhile it has a trivial workaround — name the config entry `gpt-5-5` instead of `gpt-5.5`. ## Note This PR is the first squash-only merge — its single commit validates the new policy end to end. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
release-plz only triggered on push to
maintouchingsrc/**/Cargo.*, withno manual trigger. When a release PR merges while the previous release is still
cutting its tag, the new release-pr run races the tag creation and concludes
grob: already up to date— stranding a releasable commit with no way tore-run.
That just happened: #478's
feat(routing)merged, its release-plz run raced thev0.36.83 tag, and there is now a merged
featcommit onmainwith no releasePR and no way to trigger a fresh evaluation short of pushing to
main(which thebranch protection forbids).
Fix
Add
workflow_dispatchtoon:and let therelease-prjob run under it. Anoperator (or
gh workflow run release-plz.yml) can now open the release PR ondemand, without pushing to
main.This change touches only
.github/, so it does not itself trigger the pushfilter — the operator dispatches it after merge.
Verified:
actionlint .github/workflows/release-plz.ymlclean.🤖 Generated with Claude Code