skills/release-runbook/skills/release-runbook/SKILL.md
Universal release workflow: detect project type, init versioning if needed, run tests, bump version, tag, push, and create GitHub release. Works with Python, Go, Node.js, Rust, Java, .NET, Ruby, PHP, and multi-language projects.
npx skillsauth add nibzard/skills release-runbookInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A universal release workflow that adapts to any project type. Supports single-language projects (Python, Go, Node.js, Rust, Java, .NET, Ruby, PHP) and multi-language polyglot projects.
# Fully automated release with specific version
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/release.sh --version 1.2.3
# Interactive mode (prompts for version and type)
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/release.sh --interactive
# Dry run to see what would happen
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/release.sh --dry-run --version 1.2.3
# Just detect project type and version files
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/detect-project.sh
# Initialize versioning for a project that lacks it
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/init-versioning.sh --version 0.1.0
Before releasing, ensure:
main or mastergh authenticated with gh auth statusgit remote -v shows the originThe skill automatically detects:
package.json, pyproject.toml, Cargo.toml, go.mod, VERSION, etc.${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/detect-project.sh
Outputs JSON-like:
PROJECT_TYPE=multi
LANGUAGES=python,go
VERSION_FILES=pyproject.toml,VERSION,go.mod
TEST_COMMAND=make test
BUILD_COMMAND=make build
If the project has no versioning:
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/init-versioning.sh --version 0.1.0
This will:
--version flag handling if missingVersion bumping strategies by ecosystem:
| Ecosystem | Files to Update | Method |
|-----------|----------------|--------|
| Python | pyproject.toml, __version__.py, setup.py | Manual or bump2version |
| Node.js | package.json | npm version or manual |
| Go | VERSION file, go.mod comment | Manual |
| Rust | Cargo.toml | cargo bump or manual |
| Java | pom.xml, build.gradle | Manual or plugin |
| .NET | .csproj, Directory.Build.props | Manual |
| Ruby | version.rb, gemspec | Manual |
| PHP | composer.json | Manual |
| Multi | All applicable files | Coordinated manual |
SemVer Guidelines (https://semver.org/):
1.0.0 → 2.0.0): Incompatible API changes1.0.0 → 1.1.0): New features, backward compatible1.0.0 → 1.0.1): Bug fixes, backward compatibleThe script auto-discovers and runs tests:
# Priority order:
1. Makefile `test` target
2. package.json `test` script
3. pytest (Python)
4. go test ./... (Go)
5. npm test (Node)
6. cargo test (Rust)
7. mvn test (Java)
8. dotnet test (.NET)
9. rake test (Ruby)
Skip tests with --skip-tests (not recommended).
Creates a release commit and annotated tag:
git commit -m "chore: release v1.2.3"
git tag -a v1.2.3 -m "Release v1.2.3"
The tag format is always v{VERSION}.
Pushes commit and tag to remote:
git push origin main
git push origin v1.2.3
For projects that produce binary artifacts (Go, Rust, .NET, etc.):
# Build for common platforms
make build # or: go build, cargo build --release, dotnet publish
# Check output directory
ls -la dist/ bin/
Common binary locations by ecosystem:
dist/, bin/, or build/target/release/dist/ or out/bin/Release/Creates a GitHub release with binaries and auto-generated notes:
# Basic release (no binaries)
gh release create v1.2.3 \
--title "v1.2.3" \
--notes "Release notes here..."
# Release with binaries
gh release create v1.2.3 \
--title "v1.2.3" \
--notes "Release notes here..." \
dist/binary-linux-amd64 \
dist/binary-darwin-amd64 \
dist/binary-windows-amd64.exe
The release notes include:
Updates package registries when applicable:
npm publish (if package.json has publishConfig)twine upload (if pyproject.toml has configured)cargo publish (if Cargo.toml has configured)For projects with multiple languages, the script:
Example (Curator: Python + Go):
pyproject.toml and VERSION filepytest and go testOverride auto-detected tests:
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/release.sh \
--test-command "make test-integration" \
--version 1.2.3
Place a .release-notes-template.md in your project root:
## What's Changed
* Full changelog at https://github.com/user/repo/compare/v{{OLD}}...v{{NEW}}
## Installation
\`\`\`bash
pip install mypackage=={{NEW}}
\`\`\`
For GPG signing:
git config --local commit.gpgsign true
git config --local tag.gpgsign true
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/release.sh --version 1.2.3
Run tests manually first to debug:
# Auto-detected test command
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/detect-project.sh | grep TEST_COMMAND
# Run manually
pytest # or go test, npm test, etc.
Check authentication:
gh auth status
gh auth login
Manually specify or add to project-types.md:
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/release.sh \
--version-file VERSION \
--version 1.2.3
For complex projects, run release steps manually:
# Detect project
${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/detect-project.sh
# Bump versions manually in all files
# Run tests for each language
pytest
go test ./...
# Commit all version changes
git commit -m "chore: bump version to 1.2.3"
# Create tag
git tag v1.2.3
# Push
git push origin main && git push origin v1.2.3
# Create release
gh release create v1.2.3 --generate-notes
references/project-types.md: Detailed version file patterns by ecosystemreferences/test-commands.md: Common test commands and discovery patterns$ ${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/detect-project.sh
PROJECT_TYPE=python
LANGUAGES=python
VERSION_FILES=pyproject.toml
TEST_COMMAND=pytest
BUILD_COMMAND=python -m build
$ ${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/release.sh --version 2.0.0
[✓] Detected Python project
[✓] Tests passed
[✓] Version bumped in pyproject.toml
[✓] Tagged v2.0.0
[✓] Pushed to origin
[✓] GitHub release created
$ ${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/detect-project.sh
PROJECT_TYPE=go
LANGUAGES=go
VERSION_FILES=VERSION
TEST_COMMAND=go test ./...
BUILD_COMMAND=go build
$ ${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/release.sh --version 1.5.0
[✓] Detected Go project
[✓] Tests passed
[✓] Version bumped in VERSION
[✓] Built binaries for linux-amd64, darwin-amd64
[✓] Tagged v1.5.0
[✓] Pushed to origin
[✓] GitHub release created with binaries
# Manual alternative with binaries:
make build
gh release create v1.5.0 \
--title "v1.5.0 - Bug fixes" \
--notes "Release notes..." \
dist/mytool-linux-amd64 \
dist/mytool-darwin-amd64 \
dist/mytool-windows-amd64.exe
$ ${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/detect-project.sh
PROJECT_TYPE=multi
LANGUAGES=python,go
VERSION_FILES=pyproject.toml,VERSION,go.mod
TEST_COMMAND=make test
BUILD_COMMAND=make build
$ ${CLAUDE_PLUGIN_ROOT}/skills/release-runbook/scripts/release.sh --version 1.0.0
[✓] Detected multi-language project (python, go)
[✓] Tests passed (pytest, go test)
[✓] Version bumped in pyproject.toml, VERSION
[✓] Tagged v1.0.0
[✓] Pushed to origin
[✓] GitHub release created
To add support for a new ecosystem:
references/project-types.mdreferences/test-commands.mdscripts/detect-project.sh with detection logicscripts/release.sh with version bump logicMade with ❤️ for releasing software of all types
content-media
Fetch transcripts from YouTube videos. Use when user asks to get, download, extract, or retrieve YouTube video transcripts, captions, or subtitles. Also activates for video content analysis, summarizing YouTube videos, or processing video content.
content-media
Fetch transcripts from YouTube videos. Use when user asks to get, download, extract, or retrieve YouTube video transcripts, captions, or subtitles. Also activates for video content analysis, summarizing YouTube videos, or processing video content.
tools
Use tmux to run and test our interactive CLI/TUI end-to-end. Includes how to start, send keys, capture output, and cleanly stop (double Ctrl+C).
development
Create new Agent Skills interactively or from templates. Use when user wants to create, generate, scaffold, or build a new skill, or mentions creating skills, writing skills, skill templates, skill development.