skills/rust-release/SKILL.md
Release workflow for Rust CLI tools with multi-platform binaries, GitHub Releases, and Homebrew distribution. Use when releasing a new version of a Rust project.
npx skillsauth add thrashr888/thrashr888-agent-kit rust-releaseInstall 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.
Release Rust CLI tools with multi-platform binaries, GitHub Releases, and Homebrew tap updates.
# 1. Quality gates (ALL must pass)
cargo fmt -- --check && cargo clippy -- -D warnings && cargo test
# 2. Check current version
grep '^version' Cargo.toml
# 3. Verify clean working tree
git status
# 4. Check beads for blockers (if using)
bd show <release-epic-id>
Edit Cargo.toml:
version = "X.Y.Z"
Use semantic versioning:
cargo check # Updates Cargo.lock
git add Cargo.toml Cargo.lock
git commit -m "Bump version to X.Y.Z"
git tag -a vX.Y.Z -m "Project X.Y.Z Release
## Highlights
- Key feature 1
- Key feature 2
## Changes
- Change 1
- Change 2
## Bug Fixes
- Fix 1
- Fix 2"
git push && git push --tags
This triggers the GitHub Actions release workflow.
gh run list --limit 3
gh run watch <run-id>
The workflow uses generate_release_notes: true, but you can customize:
gh release edit vX.Y.Z \
--title "vX.Y.Z - Feature 1, Feature 2" \
--notes "$(cat <<'EOF'
## Highlights
- Key feature 1
## Changes
- Change 1
## Bug Fixes
- Fix 1
## Full Changelog
https://github.com/USER/REPO/compare/vPREV...vX.Y.Z
EOF
)"
After binaries are uploaded:
# Get SHA256 for macOS ARM binary
curl -sL https://github.com/USER/REPO/releases/download/vX.Y.Z/binary-macos-aarch64 | shasum -a 256
# Update formula
cd ~/Workspace/homebrew-REPO
# Edit Formula/binary.rb:
# - Update version "X.Y.Z"
# - Update sha256 hashes
git add Formula/binary.rb
git commit -m "Update binary to vX.Y.Z"
git push
bd close <release-epic-id> --reason="Released vX.Y.Z"
bd sync
The release workflow builds for:
| Platform | Target | Notes |
|----------|--------|-------|
| Linux x86_64 | x86_64-unknown-linux-gnu | glibc |
| Linux x86_64 | x86_64-unknown-linux-musl | Static, Alpine-compatible |
| Linux ARM | aarch64-unknown-linux-gnu | Raspberry Pi, ARM servers |
| macOS Intel | x86_64-apple-darwin | Optional, runners unreliable |
| macOS ARM | aarch64-apple-darwin | M1/M2/M3 Macs |
| Windows | x86_64-pc-windows-msvc | .exe |
Tags containing alpha, beta, or rc are marked as prereleases:
git tag -a v1.0.0-beta.1 -m "Beta release"
class MyTool < Formula
desc "Tool description"
homepage "https://github.com/USER/REPO"
version "X.Y.Z"
license "MIT"
on_macos do
on_arm do
url "https://github.com/USER/REPO/releases/download/vX.Y.Z/mytool-macos-aarch64"
sha256 "ARM_SHA256"
end
on_intel do
url "https://github.com/USER/REPO/releases/download/vX.Y.Z/mytool-macos-x86_64"
sha256 "INTEL_SHA256"
end
end
on_linux do
on_intel do
url "https://github.com/USER/REPO/releases/download/vX.Y.Z/mytool-linux-x86_64"
sha256 "LINUX_SHA256"
end
on_arm do
url "https://github.com/USER/REPO/releases/download/vX.Y.Z/mytool-linux-aarch64"
sha256 "LINUX_ARM_SHA256"
end
end
def install
bin.install Dir["*"].first => "mytool"
end
test do
system "#{bin}/mytool", "--version"
end
end
gh run cancel <run-id>
# Delete and recreate tag
git push origin :refs/tags/vX.Y.Z
git tag -d vX.Y.Z
git tag -a vX.Y.Z -m "Release"
git push origin vX.Y.Z
macOS runners (especially Intel) can be unreliable. Options:
macos-14 for ARM buildsFor Linux ARM:
- name: Install cross-compilation tools
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu
For musl:
- name: Install musl tools
if: matrix.target == 'x86_64-unknown-linux-musl'
run: |
sudo apt-get update
sudo apt-get install -y musl-tools
# Delete local tag
git tag -d vX.Y.Z
# Delete remote tag
git push origin :refs/tags/vX.Y.Z
# Delete release
gh release delete vX.Y.Z --yes
# Revert version bump
git revert HEAD
git push
development
Generate standardized project documentation using the 5-style system. Use when asked to create plans, specs, skills, RFCs, ADRs, or other project documentation. Ensures consistent, high-quality documentation across the codebase.
tools
Onboard a new Rust project with standard tooling, CI/CD, and best practices. Use when starting a new Rust project or setting up an existing one with proper infrastructure.
development
Rust development workflow with quality gates, testing, and iteration patterns. Use when developing Rust code, running tests, or iterating on Rust projects.
development
Rust coding best practices for idiomatic, efficient, and maintainable code. Use when writing Rust code, reviewing code, or learning Rust patterns.