ci: let release tags actually trigger a release - #384
Merged
Conversation
Tagging a release has been a no-op since v0.2.73. v0.2.111 and v0.2.220 were both tagged and pushed, and neither fired Release Gate, npm Publish or Web Release — zero workflow runs, no error anywhere to notice. The cause is that a release tag lands on the version-bump commit, whose message ends in `[skip ci]`. GitHub honours that marker for *every* push event touching the commit, and a tag push is a push event, so the marker suppressed the release along with the branch build it was meant to skip. v0.2.73 released fine because its tag sat on an ordinary fix commit. `[skip ci]` was not what prevented the bump loop — the `if:` on the bump job already refuses to bump a "chore: bump version" commit. The marker only saved CI on a commit that changes four version fields and nothing else. So the saving moves to where it cannot take releases down with it: each push-triggered workflow skips bump commits by message. The guard is written `github.event_name != 'push' || …` so pull_request runs are never affected, and it is only on the five `branches: [main]` workflows — the three tag workflows are left unguarded, which is the entire point. Verified by construction here, and half of it by this PR's own checks: they run on pull_request, so a green run proves the guard does not skip PR builds. The other half — a tag firing a release — is only provable by the next tag, since nothing in CI can push one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_d86567a1-818b-49d3-9606-bd508b377773) |
The first form used a folded scalar and GitHub created no runs at all for the
branch — not skipped jobs, no runs — while an unrelated PR opened minutes later
ran all four workflows normally.
The expression matches on 'chore: bump version', and that colon-space is a
mapping indicator to YAML. Written bare inside ${{ }} it makes the parser read
the line as a nested mapping:
mapping values are not allowed here
... vent.head_commit.message, 'chore: bump version') }}
Double-quoting the whole value settles it, and single quotes inside stay
readable.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_c9d25f86-b270-4c12-9daf-97b31bf023de) |
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.
Tagging a release has been a no-op since v0.2.73.
v0.2.111andv0.2.220were both tagged and pushed; neither fired Release Gate, npm Publish or Web Release. Zero workflow runs, and no error anywhere to notice — today's release only went out because I dispatched each workflow by hand.Cause
A release tag lands on the version-bump commit, and that commit's message ends in
[skip ci]. GitHub honours that marker for every push event touching the commit — a tag push included — so it suppressed the release along with the branch build it was meant to skip.v0.2.220chore: bump version to 0.2.220 **[skip ci]**v0.2.111chore: bump version to 0.2.111 **[skip ci]**v0.2.73fix(web): list all providers… (0.2.73)The marker was not preventing the loop
The bump job already refuses to bump its own commit:
[skip ci]only saved CI on a commit that changes fourversionfields and nothing else. So the saving moves somewhere it cannot take releases down with it: each push-triggered workflow now skips bump commits by message.github.event_name != 'push'keeps pull_request runs untouched — without it this would disable PR checks on any branch whose head commit happened to be a bump.branches: [main]workflows. The three tag workflows are deliberately left unguarded — that is the whole point.Verification, and its limit
This PR's own checks verify half of it: they run on
pull_request, so a green run proves the guard does not skip PR builds.The other half is not provable here. Nothing in CI can push a tag, so "a tag now fires a release" is only confirmed by the next real tag. Worth knowing before treating a green tick as proof — that assumption is exactly what let this sit broken across two releases.
🤖 Generated with Claude Code
Note
Medium Risk
Changes release and CI gating behavior; wrong
if:logic could skip PR checks or re-run heavy jobs on bump commits, but tag releases should work again.Overview
Fixes silent release failures caused by
[skip ci]on version-bump commits. GitHub applies that marker to every push for the commit, including tag pushes, so Release Gate, npm Publish, and Web Release never ran for tags likev0.2.111andv0.2.220.version-bump.ymlnow commits withchore: bump version to $Vonly (no[skip ci]), with comments documenting why.Push-to-
mainworkflows (build-gate, CodeQL, dependency security, deps backdoor scan, secret scan) gain a shared jobif:so branch pushes whose head message starts withchore: bump versionskip CI, whilepull_requestruns are never skipped. Tag-triggered release workflows stay unguarded so tags on bump commits can run releases again.Reviewed by Cursor Bugbot for commit 7052c4c. Bugbot is set up for automated code reviews on this repo. Configure here.