Create the release tag in the workflow, from a commit and a version - #3055
Merged
Conversation
Pushing a tag needs credentials that a cloud development environment does not have, so the tag is created by `Release gems` rather than by hand before it. The workflow now takes the commit being released and the version that commit declares. Everything is built from the commit, so the run no longer depends on where `master` is when it starts, and the version is the same fact stated a second time: the run stops before anything is built unless it matches `RBS::VERSION` at that commit and the section CHANGELOG.md starts with. Releasing the wrong commit, or the right one under the wrong name, is a failed run rather than a gem to yank. The tag is created once both gems are known to build and run, and before anything is published, so the reversible step still comes before the irreversible one. What it names is decided by the checkout, so nothing rests on it existing first, which is what let it move after the build. `github.ref_type == 'tag'` used to be what separated a release from a build, and a branch dispatch was the dry run. The ref no longer decides anything, so `dry_run` is an explicit input: it builds and checks both gems and stops before the tag. `rake gem:check_release[X.Y.Z]` and `rake gem:tag` are the two steps the workflow runs, so both are also available locally. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BvSmN7ats6HGEyeT7VEbau
A patch release can be cut from a release branch, which is not an ancestor of the default branch, so requiring one rejected a release that is perfectly normal. What is left is that some branch contains the commit -- a commit no branch leads to is one that cannot be found again -- and the branches that do are printed, so the log says where the release came from. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BvSmN7ats6HGEyeT7VEbau
soutaro
force-pushed
the
claude/gha-tag-push-method-cp52p2
branch
from
July 30, 2026 12:55
7b6e4a1 to
45c9bb6
Compare
soutaro
enabled auto-merge
July 30, 2026 12:56
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.
Pushing a tag needs credentials a cloud development environment does not have, so
Release gemscreates the tag itself rather than it being pushed by hand beforehand.Dispatch it with the commit being released and the version that commit declares. Everything is built from the commit, and the version is the same fact stated a second time: the run stops before anything is built unless it matches
RBS::VERSIONat that commit and the section CHANGELOG.md starts with. The tag is created once both gems are known to build and run, and before anything is published.dry_runbuilds and checks both gems and stops there — no tag, nothing pushed to RubyGems, no GitHub release — which is how the build is exercised without releasing anything.Generated by Claude Code