Create releases for Rust CLI tools, macOS apps, Python/uv projects, and Next.js apps. Use when asked to release, tag, ship, publish, or deploy any project.
Resources
1Install
npx skillscat add thrashr888/thrashr888-agent-kit/github-releases Install via the SkillsCat registry.
Release Workflows
Project-specific release workflows covering Rust CLI tools, macOS apps, Python/uv deployments, and Next.js apps.
Quick Reference: Which Workflow?
| Project Type | Workflow | Trigger |
|---|---|---|
| Rust CLI (AllBeads, QDOS) | Tag-triggered CI | git tag -a vX.Y.Z → GitHub Actions builds binaries |
| macOS App (ethertext, AllBeadsApp) | Makefile-driven | make archive → notarize → make release |
| Python/uv (rookery) | CI Deploy | Push to main → tests pass → auto-deploy to EC2 |
| Next.js (AllBeadsWeb) | Vercel | Push to main → auto-deploy |
Rust CLI Release (AllBeads, QDOS)
Pre-Release Checklist
# Quality gates (ALL must pass)
cargo fmt -- --check && cargo clippy -- -D warnings && cargo test
# Check current version
grep '^version' Cargo.toml
# Verify clean working tree
git statusRelease Process
Update version in Cargo.toml
version = "X.Y.Z"Commit version bump
git add Cargo.toml Cargo.lock git commit -m "Bump version to X.Y.Z"Create annotated tag (triggers CI release)
git tag -a vX.Y.Z -m "AllBeads X.Y.Z Release ## Highlights - Key feature 1 ## Changes - Change 1 ## Bug Fixes - Fix 1"Push to trigger release
git push && git push --tagsMonitor release build
gh run list --limit 3 gh run watch <run-id>Update release title/notes (optional)
gh release edit vX.Y.Z --title "vX.Y.Z - Feature 1, Feature 2"Update Homebrew tap (manual)
# Get SHA256 for macOS binary curl -sL https://github.com/USER/REPO/releases/download/vX.Y.Z/binary-macos-aarch64 | shasum -a 256 # Update homebrew-REPO/Formula/binary.rb # - Update version "X.Y.Z" # - Update sha256 hash cd ~/Workspace/homebrew-REPO git add . && git commit -m "Update to vX.Y.Z" && git push
GitHub Actions Workflow
The release workflow builds multi-platform binaries:
- Linux x86_64 (glibc + musl)
- Linux aarch64
- macOS x86_64 + aarch64
- Windows x86_64
Prerelease detection: tags containing alpha, beta, or rc are marked as prereleases.
macOS App Release (ethertext, AllBeadsApp)
Prerequisites
- Xcode with valid signing identity
create-dmginstalled:brew install create-dmg- AWS CLI configured for S3 uploads
- Sparkle for auto-updates:
brew install --cask sparkle
Release Process
Update version in Xcode
- Set
MARKETING_VERSIONin project settings
- Set
Create Xcode archive
make archiveNotarize in Xcode Organizer
- Distribute App → Developer ID → Upload
- Wait for notarization
- Export notarized app to
~/Downloads/
Run release
make releaseThis:
- Creates DMG from exported app
- Uploads to S3 (versioned + latest)
- Generates Sparkle appcast.xml
- Updates Homebrew Cask
Commit and push
git add -A && git commit -m "Release $(VERSION)" && git push make tag && git push --tags # Push homebrew tap cd ~/Workspace/homebrew-APPNAME git add -A && git commit -m "Update to $(VERSION)" && git push
Makefile Targets
| Target | Description |
|---|---|
make version |
Show current version |
make archive |
Create Xcode archive |
make dmg |
Create DMG from exported app |
make upload |
Upload DMG to S3 |
make appcast |
Generate Sparkle appcast.xml |
make brew-update |
Update Homebrew cask |
make release |
Full release (upload + appcast + brew) |
make tag |
Create git tag |
Sparkle Setup (Auto-Updates)
make install-sparkle # Install tools + generate keys
make sparkle-pubkey # Show public key for Info.plist
make sparkle-sign # Sign DMG for appcastPython/uv Deploy (rookery)
Continuous deployment triggered by successful tests.
Deployment Flow
- Push to main
- GitHub Actions runs
pytest - On success, triggers deploy workflow
- SSH deploy to EC2:
- Rsync files
uv syncdependenciesalembic upgrade headmigrations- Restart systemd service
- Health check (5 retries)
Manual Deploy
# Trigger deploy workflow manually
gh workflow run deploy.ymlVersion Tracking
Deployments are stamped with build version:
printf "%s\n" "$(date -u +%Y%m%dT%H%M%SZ)_$(git rev-parse --short HEAD)" > VERSIONNext.js/Vercel Deploy (AllBeadsWeb)
Auto-deploy on push to main. No manual release process.
CI Workflow
bun install
bun run typecheck
bun run testVercel handles deployment automatically.
Troubleshooting
Stuck GitHub Actions workflow
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.ZRollback
# Delete tag
git tag -d vX.Y.Z
git push origin :refs/tags/vX.Y.Z
# Delete release
gh release delete vX.Y.Z
# Revert if needed
git revert HEADmacOS app not notarized
Export from Xcode Organizer ensures stapling. Verify with:
xcrun stapler validate ~/Downloads/AppName.appResources
scripts/create-release.sh: Automated Rust release script- Semantic Versioning
- Keep a Changelog
- Sparkle Documentation