ci: replace bump-version with explicit Release workflow + concurrency guard#2403
Draft
glifocat wants to merge 5 commits into
Draft
ci: replace bump-version with explicit Release workflow + concurrency guard#2403glifocat wants to merge 5 commits into
glifocat wants to merge 5 commits into
Conversation
Resolves conflicts after PR nanocoai#2402 merged. The literal-fix changes from nanocoai#2402 are already present on this branch; bump-version.yml is intentionally deleted here.
Adds a step between Gate 2 and Gate 3 that builds a CHANGELOG section from PRs merged since the last tag, but only when the maintainer hasn't already written one for the new version. Pre-existing sections win, preserving editorial control.
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.
Type of Change
.claude/skills/<name>/, no source changes)Description
Replaces the path-triggered
bump-version.ymlwith an explicitworkflow_dispatchRelease workflow that produces a verified tag and a populated Releases-tab entry in one run. Also adds amain-write-backconcurrency group to serialize againstupdate-tokens.yml, removing the race the old setup had.What this fixes
bump-version.ymlpushed lightweight tags but never created GitHub Release entries, so the Releases tab has been empty.update-tokens.yml. Both workflows push tomain; without serialization they can clobber each other's commits or fail mid-push.Files
.github/workflows/release.yml— manual release workflow with three pre-release gates (CI-green, version-compute, CHANGELOG-present), CHANGELOG-section extraction, annotated tag push, andgh release createwith--generate-notesto append a Contributors section..github/workflows/update-tokens.yml— addsconcurrency: { group: main-write-back, cancel-in-progress: false }so it can't collide with releases..github/workflows/bump-version.yml— replaced by the manual workflow.Pre-release gates (fail-closed)
check-runsforHEAD; fails on anyfailure,cancelled, ortimed_outconclusion.pnpm version <bump> --no-git-tag-versionupdatespackage.jsononly, so we can read the new version before committing anything. Reversible at this point.grepfor## [<version>]; fails if missing. Forces the maintainer to write release notes before hitting Run, not after.Release-note assembly
awkextracts the section between## [<version>]and the next## [heading. That file is passed togh release create --notes-file;--generate-notesappends the auto-generated "New Contributors" + "Full Changelog" section.Notes
git tag -a) so each release carries its own metadata commit. Matches whatpnpm versiondoes locally.permissions: contents: writeon the job so future least-privilege audits don't have to infer.--verify-tagguards the unlikely case where the tag push silently failed.if: github.repository == 'nanocoai/nanoclaw'guard. (Depends on / supersedes the urgent guard-fix PR.)What's NOT addressed (deliberate)
inputs.prerelease: boolean+--prerelease.Testing
update-tokensandreleasenear-simultaneously and confirm the second waits on the concurrency lock.