| name | release |
| description | Create a new version release with proper tagging and changelog. Handles version bumping, tagging, and GitHub release creation. Invoke with /release [patch|minor|major] or just /release for patch. |
| lifecycle | experimental |
Release Skill
Create properly versioned releases with tags and GitHub releases.
Process
-
Pre-flight checks
git status --short
git describe --tags --abbrev=0
-
Determine version bump
patch (default): Bug fixes, minor changes (1.2.3 → 1.2.4)
minor: New features, backwards compatible (1.2.3 → 1.3.0)
major: Breaking changes (1.2.3 → 2.0.0)
-
Run tests
- Python:
pytest
- Rust:
cargo test
- Node:
npm test
-
Update version in manifest
- Python:
pyproject.toml version field
- Rust:
Cargo.toml version field
- Node:
package.json version field
-
Commit version bump
git add pyproject.toml
git commit -m "Bump version to X.Y.Z"
-
Create annotated tag
git tag -a vX.Y.Z -m "vX.Y.Z - Brief description"
-
Push with tags
git push && git push origin vX.Y.Z
-
Create GitHub release
gh release create vX.Y.Z --title "vX.Y.Z - Title" --notes "$(cat <<'EOF'
## What's New
- Feature 1
- Feature 2
## Bug Fixes
- Fix 1
## Full Changelog
https://github.com/AreteDriver/REPO/compare/vPREV...vX.Y.Z
EOF
)"
Changelog Generation
Review commits since last tag:
git log $(git describe --tags --abbrev=0)..HEAD --oneline
Group by type:
- Features:
feat: commits
- Bug Fixes:
fix: commits
- Other: everything else worth mentioning
Version Locations
| Project Type | File | Field |
|---|
| Python | pyproject.toml | version = "X.Y.Z" |
| Rust | Cargo.toml | version = "X.Y.Z" |
| Node | package.json | "version": "X.Y.Z" |
Rules
- Never release with failing tests
- Never release with uncommitted changes
- Always use annotated tags (
-a), not lightweight
- Include changelog in GitHub release notes
- Use semantic versioning strictly