Release Skill
Create properly versioned releases with tags and GitHub releases.
Process
Pre-flight checks
git status --short # Must be clean git describe --tags --abbrev=0 # Get current versionDetermine 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
- Python:
Update version in manifest
- Python:
pyproject.tomlversion field - Rust:
Cargo.tomlversion field - Node:
package.jsonversion field
- Python:
Commit version bump
git add pyproject.toml # or Cargo.toml, package.json 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.ZCreate 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