Skip to content

ci(release): release automatically on every feat and fix - #22

Merged
GauranshMathur merged 1 commit into
mainfrom
claude/wizardly-volta-nt0gn4
Oct 1, 2026
Merged

GauranshMathur merged 1 commit into
mainfrom
claude/wizardly-volta-nt0gn4

Conversation

@GauranshMathur

Copy link
Copy Markdown
Owner

Closes #21

Why

release-please collected every merged feat and fix into one standing release PR, and nothing was released until someone merged it by hand. #15 sat open while three changes waited behind it. Each releasable change should now ship on its own.

Changes

.github/workflows/release-please.yml

  • The release-please step gets id: release.
  • Merge the release PR: this step runs when the pr output is set, and runs gh pr merge <number> --squash. The output is unset when nothing was releasable, as for docs and ci commits, so the step is skipped for those.
  • Tag and publish the release: a second release-please step, run after the merge. A merge made with GITHUB_TOKEN starts no new workflow run, as release-please-action's README notes, so without this step nothing would tag the release until the next push. If it ever misses the merged PR, the next push to main tags it anyway, because release-please releases any merged PR still labelled autorelease: pending.
  • Concurrency: a concurrency group (release-please, cancel-in-progress: false) makes overlapping runs queue, so they cannot race on one release PR, and never cancels a run partway through a release.

README.md: the Development section describes the new flow.

Known trade-off

The release PR gets no CI run, again because GITHUB_TOKEN events start no workflows. It only changes version strings and CHANGELOG.md, and every commit it releases already passed CI in its own PR.

Verification

  • actionlint on both workflows: 0 errors. It checks the steps.release.outputs.pr expressions and the fromJSON call. shellcheck wasn't installed, and the one run: line is fully quoted.
  • pytest: 50 passed
  • claude plugin validate . --strict passes
  • The new steps can only be tested for real on main. This PR is a ci commit, so merging it releases nothing and both new steps are skipped. The first real test is the next feat or fix.

🤖 Generated with Claude Code

https://claude.ai/code/session_017PZwFoejyVocqgdjxs9ech


Generated by Claude Code

The release PR used to wait for someone to merge it, so a feat or fix
could sit on main unreleased. The workflow now merges the release PR as
soon as release-please opens or refreshes it.

That merge is made with GITHUB_TOKEN, which does not start new workflow
runs, so a second release-please step in the same job tags and publishes
the release. If that step ever misses the merged PR, the next push to
main tags it instead. A concurrency group queues overlapping runs so two
cannot race on one release, and never cancels a run partway through.

The README's Development section describes the new flow.

Closes #21

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PZwFoejyVocqgdjxs9ech
@GauranshMathur
GauranshMathur merged commit e7b98a4 into main Oct 1, 2026
1 check passed
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.

Release automatically on every feat and fix instead of waiting on a hand-merged release PR

2 participants