Release Skills
Execute a release using Nx Release for independent plugin versioning.
Pre-flight Checks
Check working tree is clean:
git status --porcelainIf not clean, stop and report dirty files.
Check we're on main branch:
git branch --show-currentMust be
main.Ensure local is up to date with remote:
git fetch origin git status -sbIf behind, run
git pull --rebase.Check for unreleased changes:
pnpm nx release --dry-runThis will show which plugins have unreleased commits.
Release Process
Option 1: Release All Changed Plugins (Recommended)
# Interactive release - prompts for version bump per plugin
pnpm nx release
This will:
- Run validation (cached, fast)
- Prompt for version bump for each changed plugin (major/minor/patch)
- Update package.json files
- Generate project-level CHANGELOG.md files
- Sync marketplace.json (via postChangelogCommand hook)
- Create commit:
chore(release): plugin-name@version - Create git tags:
plugin-name@version - Push to GitHub
- Create GitHub releases with changelog content
- Prompt to publish (if needed)
Option 2: Release Specific Version
# Automatically bump to specific version for all changed plugins
pnpm nx release patch # or minor, major
Option 3: Release Specific Plugins
# Release only specific plugins
pnpm nx release --projects=solana,gh-cli
Option 4: Preview First (Dry Run)
# See what would happen without making changes
pnpm nx release --dry-run
Non-Interactive Mode (Claude Code / CI)
To bypass interactive prompts:
- Version specifier (
minor/patch/major) - bypasses version prompt --first-release- required for new plugins at version 0.0.0
Publishing is disabled in nx.json ("publish": false), so no publish flags needed.
# Example: patch release
pnpm nx release patch --projects=plugin-name
# Example: first release of a new plugin
pnpm nx release minor --projects=new-plugin --first-release
If pre-commit hooks modify files and the commit fails, stage changes and commit manually, then create tags and GitHub releases.
Post-Release
After the release completes, Nx will:
- ✅ Create version commits
- ✅ Create git tags (pattern:
plugin-name@version) - ✅ Push commits and tags to GitHub
- ✅ Create GitHub releases with changelog content (as drafts initially)
Publish GitHub Releases:
If releases are created as drafts, publish them:
# List draft releases
gh release list --limit 10
# Publish a draft release
gh release edit plugin-name@version --draft=false
Report summary: List all released packages with their versions and links to GitHub releases.
Release Configuration
All release configuration is in nx.json:
- Independent versioning: Each plugin has its own version
- Git tags:
{projectName}@{version}pattern - Changelogs: Generated in each plugin's CHANGELOG.md
- GitHub releases: Automatic with changelog content
- Validation: Runs before versioning (cached)
- Marketplace sync: Automatic via
postChangelogCommand
Error Handling
- If any step fails, Nx will stop immediately and report the error
- Do NOT force push or skip any checks
- If validation fails, fix the issues before releasing
- Nx creates one commit per release, with all version changes
Important Notes
- Nx Release uses conventional commits to generate changelogs
- Tags follow the pattern:
plugin-name@version(e.g.,solana@0.3.0) - GitHub releases are created automatically from CHANGELOG content
- Local caching makes repeated validation instant
- Affected detection only releases plugins with changes since last tag
Common Commands
# Release workflow (full)
pnpm nx release
# Just version (no publish)
pnpm nx release version
# Just changelog (after versioning)
pnpm nx release changelog
# Just publish (after versioning)
pnpm nx release publish
# Target specific plugins
pnpm nx release --projects=solana
# Preview without changes
pnpm nx release --dry-run