feat: /release — one-command release automation#219
Merged
Conversation
Approved design for a `/release` command that cuts a release end-to-end: local skill drafts curated landing notes + publishes the changelog feed (landing-first), then CI bumps/tags/publishes the feedzero Docker image. Hybrid execution, unattended note-drafting with a house-style lint gate, version auto-derived from conventional commits, four-way version lock, reusable docker-publish workflow. Supersedes the buggy /new-release skill. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bottom-up RGR plan (8 tasks): pure modules (compute-version, draft-notes, lint-notes) with Vitest, lock-chain guard test, reusable docker-publish + drift guard, release.yml, /release skill (retires /new-release), runbook. Implements the 2026-05-31 release-automation design spec. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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.
Implements
docs/superpowers/specs/2026-05-31-release-automation-design.md(+ plandocs/superpowers/plans/2026-05-31-release-automation.md).What
Type
/release(or/release X.Y.Z) and a release happens end-to-end, unattended:.claude/skills/release/) derives the version from conventional commits, drafts + lints the curated landingreleases.mjsentry, builds the feed, pushes landing first, and polls untilfeedzero.app/releases.xmlis live..github/workflows/release.yml) then bumpspackage.json, refreshes the vendored fixture from the live feed, re-verifies the version lock, runstsc+ tests, tagsvX.Y.Z, and publishes via the now-reusabledocker-publish.yml(workflow_call).Pieces
scripts/release/{compute-version,draft-notes,lint-notes}.ts— pure, fully unit-tested logic (19 tests).tests/scripts/release-version-sync.test.ts— lockspackage.jsonto the vendored feed (fixes the lingering 0.9.0-vs-0.11.0 drift; fixture refreshed to 0.11.0).docker-publish.yml—workflow_call+ version drift guard (tag/input must equalpackage.json).release.yml— bump/fixture/test/commit/tag/publish..claude/skills/release/replaces the buggy/new-release(which never tagged and had stale/kindle/paths).Guardrails
Four-way version lock: landing notes → vendored fixture →
package.json→ git tag. Abort-before-irreversible gates (red tests, landing-not-live, non-fixable lint).Verification
npx vitest run→ 3768 passed, 0 failed.tscclean.actionlintclean on both workflows.0.12.0, drafted bucketed notes, and the lint correctly flagged a non-conforming bullet (proving the unattended safety gate aborts on bad prose).One-time setup you'll do before first
/releaseGitHub → Settings → Actions → Workflow permissions → Read and write (so
release.ymlcan push the bump + tag), or the documented PAT fallback.Not auto-merging.
🤖 Generated with Claude Code