| name | release |
| description | Automates the release process for this Rust project. Use when creating a new release, preparing a version bump, or publishing to GitHub/crates.io. Triggers on terms like "release", "publish", "version bump", "create tag". |
Automated Release Skill
This skill performs the complete end-to-end release process for omni-dev, from version bump to verified publication.
Execution Steps
Phase 1: Preparation
Verify Clean State
git status --porcelainAbort if working directory is not clean.
Get Current Version
grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/'Get Last Release Tag
git describe --tags --abbrev=0Analyze Changes Since Last Release
git log --oneline $(git describe --tags --abbrev=0)..HEADDetermine Version Bump
- MAJOR: Breaking changes (removed APIs, changed signatures)
- MINOR: New features (new commands, flags, integrations)
- PATCH: Bug fixes, docs, refactoring
Phase 2: Documentation & Changelog Review
Check if Docs Need Updates Review documentation for accuracy against new features:
docs/RELEASE.md- Release process still accurate?README.md- Features and examples up to date?CLAUDE.md- AI guidance still relevant?.claude/skills/- Skills reflect current workflows?
Update any docs that are outdated before proceeding.
Update CHANGELOG.md
- Add new version section:
## [X.Y.Z] - YYYY-MM-DD - Document all changes since last release under appropriate categories:
- Added: New features
- Changed: Changes in existing functionality
- Deprecated: Soon-to-be removed features
- Removed: Now removed features
- Fixed: Bug fixes
- Security: Vulnerability fixes
- Documentation: Docs-only changes
- CI/CD: Build/workflow changes
- Update version comparison links at bottom:
[Unreleased]: https://github.com/rust-works/omni-dev/compare/vX.Y.Z...HEAD [X.Y.Z]: https://github.com/rust-works/omni-dev/compare/vPREV...vX.Y.Z
- Add new version section:
Phase 3: Version Update
- Update Cargo.toml
- Change
version = "X.Y.Z"to new version
- Change
Phase 4: Quality Checks
- Run Quality Checks
Abort if any check fails.cargo build --release cargo test cargo clippy -- -D warnings
Phase 5: Git Operations
Commit Changes
git add Cargo.toml Cargo.lock CHANGELOG.md docs/ git commit -m "$(cat <<'EOF' chore: prepare release vX.Y.Z - Update version from PREV to X.Y.Z - Update CHANGELOG.md with release notes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> EOF )"Create Annotated Tag
git tag -a vX.Y.Z -m "Release version X.Y.Z <summary of key changes> "Push to Remote
git push origin main git push origin vX.Y.Z
Phase 6: Monitor CI Release
Wait for Release Workflow Poll the GitHub Actions release workflow until completion:
# Get the run ID for the release workflow triggered by the tag gh run list --workflow=release.yml --branch=vX.Y.Z --limit=1 --json databaseId,status,conclusionPoll Until Complete Loop with 30-second intervals:
gh run view <run_id> --json status,conclusionstatus: "completed"+conclusion: "success"= Successstatus: "completed"+conclusion: "failure"= Failed (show logs)status: "in_progress"orstatus: "queued"= Keep polling
On Failure: Show Logs
gh run view <run_id> --log-failed
Phase 7: Verification
Verify GitHub Release
gh release view vX.Y.ZVerify crates.io Publication
cargo search omni-devReport Success Display:
- New version number
- GitHub release URL
- crates.io URL
- Changelog summary
Error Handling
| Error | Action |
|---|---|
| Dirty working directory | Abort with message to commit/stash changes |
| Quality check fails | Abort with specific failure details |
| Push fails | Check remote access and branch protection |
| CI workflow fails | Show failed job logs, suggest fixes |
| Timeout (>15 min) | Provide manual verification commands |
Polling Configuration
- Initial delay: 10 seconds (allow workflow to start)
- Poll interval: 30 seconds
- Timeout: 15 minutes
- Max polls: 30
CI Workflows Triggered
Pushing a v* tag triggers:
| Workflow | Purpose |
|---|---|
ci.yml |
Tests, linting, Nix build, Cachix publish |
release.yml |
GitHub release, binaries, crates.io publish |
Important Notes
- Do NOT manually run
gh release create- CI handles this automatically - The release workflow creates the GitHub release from the tag
- Cross-platform binaries (Linux, macOS, Windows) are built and attached
- crates.io publication uses
CARGO_REGISTRY_TOKENsecret
Commands Reference
# Check workflow status
gh run list --workflow=release.yml --limit=5
# Watch workflow in real-time
gh run watch <run_id>
# View workflow logs
gh run view <run_id> --log
# View failed job logs only
gh run view <run_id> --log-failed
# Verify release
gh release view vX.Y.Z
# Check crates.io
cargo search omni-dev
Rollback Procedure
If release needs to be rolled back:
Delete GitHub Release (if created):
gh release delete vX.Y.Z --yesDelete Tags:
git tag -d vX.Y.Z git push --delete origin vX.Y.ZYank from crates.io (if published):
cargo yank --version X.Y.ZRevert Commit:
git revert HEAD git push origin main