chore: skip auto-tagging in release-please; manual gh release create stays the gate#87
Merged
StefanSteiner merged 1 commit intoMay 29, 2026
Conversation
…stays the gate Configures release-please to NOT create the GitHub Release / git tag when the "chore: release main" PR merges. release-please continues to open release PRs (CHANGELOG, version bumps, manifest updates) — only the auto-tagging step is disabled. The maintainer creates the tag manually via `gh release create`, which fires release.yml → crates.io publish. Why: crates.io and npm are immutable. Once cargo publish succeeds, the version exists forever; cargo yank only marks it "don't pick by default" without freeing the version slot. The manual tag step is the only maintainer-controlled checkpoint between merging the release PR and permanently publishing the version. We discovered this property inadvertently during the v0.3.0 release: release-please failed to auto-tag (upstream googleapis/release-please#1946), forcing a manual gh release create + label-edit recovery. The recovery worked cleanly and the human checkpoint turned out to be valuable — better to codify it than depend on an upstream bug staying broken. Schema verification: skip-github-release is documented at both the top-level and per-package level in https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json (found at $.properties.skip-github-release and at $.definitions.ReleaserConfigOptions.properties.skip-github-release). Setting both for defense-in-depth and to make intent explicit, matching the bump-minor-pre-major pattern from tableau#79. Cost: every release becomes manual, including patch releases. The tag-creation procedure is documented in tableau#83 (filed for follow-up docs work in GITHUB_OPERATIONS.md). Net: trades one-time-per-release manual work for permanent prevention of accidentally shipping an incorrect version to immutable registries.
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.
Summary
Adds
"skip-github-release": truetorelease-please-config.jsonat both the top level and per-package level. release-please will continue to openchore: release mainPRs with the CHANGELOG / version bumps / manifest updates, but will not auto-create the GitHub Release / git tag when those PRs merge. The maintainer creates the tag manually viagh release create, which firesrelease.yml→ crates.io publish.Why
crates.io and npm are immutable. Once
cargo publishsucceeds, the version is permanent —cargo yankonly marks it "don't pick by default" without freeing the version slot. npm is similar (unpublish only works within 72 hours and nukes downstream caches).The manual tag step is the only maintainer-controlled checkpoint between merging the release PR and permanently publishing the version. Everything before is reversible (revert PRs, edit CHANGELOG, close release-please PRs); everything after is forever.
How we discovered this property
During the v0.3.0 release pipeline, release-please failed to auto-tag after the release PR (#80) merged — the upstream issue is googleapis/release-please#1946 ("untagged, merged release PRs outstanding - aborting"). Recovery required a manual
gh release create+ label edit:That recovery worked cleanly and turned out to be the right shape for the workflow. The human checkpoint between manifest-bump and crates.io publish caught is valuable on its own: even if release-please fixes #1946 upstream, we want the manual step. Better to codify it than to depend on a bug staying broken.
What this changes
chore: release mainPRs on every push to main with conventional commits.gh release create vX.Y.Z --target <merge-sha> ...to ship.release.ymlfires on the manually-createdrelease: publishedevent, unchanged from today.What this costs
ghcommands from this issue's history.autorelease: pending→autorelease: taggedlabel promotion is now manual too. Skipping it doesn't break anything functionally, but release-please will keep proposing the same version until the label flips.Schema verification
skip-github-releaseis documented in the release-please config schema at both:$.properties.skip-github-release(acts as default)$.definitions.ReleaserConfigOptions.properties.skip-github-release(overrides default)Setting both for defense-in-depth and explicit intent, matching the
bump-minor-pre-majorpattern from #79.Why not just rely on #1946 upstream
The issue is open and actively discussed; if/when fixed (release-please-action v5.x patch or v6), our flow would silently resume auto-tagging and the human checkpoint would disappear without anyone noticing. Codifying the manual step makes the design intent durable.
Test plan
python3 -m json.toolpasses)chore: release mainPR (e.g. for v0.3.1 if any patches land)gh release create vX.Y.Z --target <sha> ...to shipCloses follow-up from #82 (closed in favor of this approach).