This skill should be used when the user asks to "make a release", "create a release", "cut a release", "release a new version", "publish a release", or…
Release Workflow This skill provides a systematic workflow for creating and publishing releases for the linear-cli project. It handles changelog management, version bumping, testing, and tagging. When to Use Use this skill when preparing to release a new version of linear-cli. The workflow ensures all changes are documented, tests pass, and versions are properly tagged before publishing. Prerequisites Ensure the following tools are available: changelog skill for changelog management svbump for version bumping (installed) jj for version control operations just for running the release tasks jq for updating the Claude Code plugin versions Release Workflow Step 1: Review Commits Since Last Release Determine the commits that have been made since the last release: jj log --ignore-working-copy --git -r 'tags()..@' --no-graph This shows all commits from the most recent tag to the current commit. Step 2: Add Changelog Entries For each commit identified above, evaluate whether it warrants a changelog entry. Focus on user-facing changes: Include in changelog: New features Bug fixes Breaking changes Significant improvements Deprecations Exclude from changelog: Internal refactoring without user impact Documentation-only changes Build/CI configuration changes Chore commits (unless significant) Use the changelog CLI to add entries. Use --attribute-pr with the commit SHA to automatically look up the associated PR and add attribution, excluding schpet and schpetbot: changelog add --type <type> "<description>" --attribute-pr <commit-sha> --exclude-users schpet,schpetbot Omit --attribute-pr for commits without an associated PR or when attribution isn't relevant. Types match Keep a Changelog categories: added - New features changed - Changes in existing functionality deprecated - Soon-to-be removed features removed - Removed features fixed - Bug fixes security - Security improvements Step 3: Verify Changelog with User After adding all relevant changelog entries, show the unreleased section of CHANGELOG.md to the user and ask them to review it: Read the CHANGELOG.md file Show the [Unreleased] section Ask: "Please review these changelog entries. Are there any changes needed before release?" Make any requested adjustments Step 4: Determine Semver Bump Based on the types of changes in the changelog, determine and recommend the appropriate semantic version bump: Major (X.0.0): Breaking changes Removed features Significant API changes Minor (0.X.0): New features (added) Deprecations Backward-compatible functionality additions Patch (0.0.X): Bug fixes Security fixes Minor improvements with no new features Present the recommendation to the user: Based on the changelog entries, I recommend a <MAJOR/MINOR/PATCH> version bump because: - [reason 1] - [reason 2] Current version: <current> Proposed version: <proposed> Should I proceed with this version bump? Wait for user confirmation before proceeding. Step 5: Run Changelog Release Once the user confirms the version bump, run the changelog release command with the appropriate semver level: changelog release <major|minor|patch> This updates CHANGELOG.md, converting the Unreleased section to a versioned release. Step 6: Execute Tag Process After the changelog is released, run the tag recipe: just tag It does the whole release in order, stopping at the first failure: Quality checks (just check): cargo fmt --all --check, cargo clippy --locked --workspace --all-targets -- -D warnings, and cargo test --locked --workspace Version bump: writes the latest changelog version to workspace.package.version in Cargo.toml with svbump, then refreshes Cargo.lock with cargo update --workspace Skill docs (just skill-docs): regenerates skills/linear-cli/SKILL.md and its references from the CLI's help Plugin versions (just plugin-version): sets version in .claude-plugin/plugin.json and both version and plugins[0].version in .claude-plugin/marketplace.json Commit and tag: jj commit -m "chore: Release linear-cli version <version>", then moves the main bookmark and sets the v<version> tag on that commit (@-) Push: jj git push --bookmark main, then git push origin --tags When it finishes it prints released v<version>. Error Handling If any step fails: Quality checks fail: Fix the issues before continuing. Do not proceed with release if tests fail or linting errors exist. Version bump fails: Verify the version format and files exist. Push fails: Check authentication and remote access. Always stop and report errors clearly. Never continue the release process if a critical step fails. Important Notes The justfile tag recipe runs every step above; there is no need to run them by hand Use jj for all version control operations (per the project AGENTS.md) Always use --ignore-working-copy for read-only jj operations The workflow creates a commit on the parent (@-) and then creates a new working commit Both jj git push and git push origin --tags are needed (jj for bookmark, git for tags) Post-Release After successful release: Verify the tag appears on GitHub Check that the GitHub Actions release workflow (.github/workflows/release.yml) builds the binaries and publishes the Homebrew formula and npm package Confirm the new version is published Reference See the tag and plugin-version recipes in the justfile for the implementation.
don't have the plugin yet? install it then click "run inline in claude" again.
added explicit inputs section documenting github token and git config, expanded procedure with input/output for each step, formalized decision points for dry-run/check/error cases, specified output contract with file locations and urls, clarified outcome signals for each mode.
this skill takes a project from "code is ready" to "tagged, pushed by the operator, and verified green on the exact tagged SHA." it handles pre-flight validation, changelog generation from git history, version bumps across package files, release commits, annotated tags, curated release notes, and post-push SHA verification. use it when you need to cut a release with confidence that every artifact is in sync and CI has signed off on the exact commit you tagged.
GITHUB_TOKEN environment variable with repo scope (required for GitHub Release creation and tag pushes)user.name and user.email configured locally (git config user.name, git config user.email)pre-flight validation
GITHUB_TOKEN env var is set and validversion determination
changelog generation
version bump
release commit
annotated tag
publish to remote
GITHUB_TOKENCI verification trigger
--dry-run flag provided: execute steps 1-6 (pre-flight, version, changelog, bump, commit, tag) but do not execute step 7 (publish). show operator what would be created. allow rollback by discarding local commits and tags.--check flag provided: execute step 1 (pre-flight validation) only. return GO (all checks pass) or NO-GO (blocking issues). do not modify any files or git state.GITHUB_TOKEN invalid or missing: fail at step 7 pre-push validation. do not push commit or tag. operator must set valid token and retry (local commit and tag are preserved for reuse)./release 1.7.0 to proceed."/release 1.7.0 to publish."