| 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 --porcelain
Abort 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=0
-
Analyze Changes Since Last Release
git log --oneline $(git describe --tags --abbrev=0)..HEAD
-
Determine 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
Phase 3: Version Update
- Update Cargo.toml
- Change
version = "X.Y.Z" to new version
Phase 4: Quality Checks
- Run Quality Checks
cargo build --release
cargo test
cargo clippy -- -D warnings
Abort if any check fails.
Phase 5: Git Operations
-
Commit Changes
git add Cargo.toml Cargo.lock CHANGELOG.md docs/
git commit -m "$(cat <<'EOF'
chore(release): prepare release vX.Y.Z
- Update version from PREV to X.Y.Z
- Update CHANGELOG.md with release notes
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:
gh run list --workflow=release.yml --branch=vX.Y.Z --limit=1 --json databaseId,status,conclusion
-
Poll Until Complete
Loop with 30-second intervals:
gh run view <run_id> --json status,conclusion
status: "completed" + conclusion: "success" = Success
status: "completed" + conclusion: "failure" = Failed (show logs)
status: "in_progress" or status: "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.Z
-
Verify crates.io Publication
cargo search omni-dev
-
Report Success
Display:
- New version number
- GitHub release URL
- crates.io URL
- Changelog summary
Phase 8: Manual Glama Listing Update
-
Prompt the User to Update Glama
The Glama MCP listing pins its Docker build to a specific commit SHA and only rebuilds when that SHA is bumped. This step is a web-UI action that cannot be automated from here.
Display to the user:
Do not block on this — it's an out-of-band manual step the human performs after the automated release lands.
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_TOKEN secret
Commands Reference
gh run list --workflow=release.yml --limit=5
gh run watch <run_id>
gh run view <run_id> --log
gh run view <run_id> --log-failed
gh release view vX.Y.Z
cargo search omni-dev
Rollback Procedure
If release needs to be rolled back:
-
Delete GitHub Release (if created):
gh release delete vX.Y.Z --yes
-
Delete Tags:
git tag -d vX.Y.Z
git push --delete origin vX.Y.Z
-
Yank from crates.io (if published):
cargo yank --version X.Y.Z
-
Revert Commit:
git revert HEAD
git push origin main