bgone is distributed through three channels:
- GitHub Releases — pre-built macOS binaries (aarch64 + x86_64) attached to a tagged release
- Homebrew — formula in
benface/homebrew-bgonepointing at the GitHub release tarballs - crates.io — source crate (
cargo install bgone)
There is no GitHub Actions release workflow — releases are driven from the developer's machine. The local Homebrew tap clone lives at ./homebrew-bgone (gitignored in this repo, has its own git remote).
- On macOS, Apple Silicon (
arm64). - Rust toolchain with both
aarch64-apple-darwinandx86_64-apple-darwintargets installed (verify withrustup target list --installed; install missing ones withrustup target add <target>). - Authenticated
ghCLI (gh auth status). - Authenticated
cargofor crates.io publishing (cargo loginif~/.cargo/credentials.tomlis missing). - Working tree clean, on
main, version already bumped inCargo.toml, and the bump commit pushed toorigin/main.
Replace <VERSION> with the new version (e.g. 0.6.0). The tag is always v<VERSION>.
-
Sanity-check the release commit:
git status # must be clean grep '^version' Cargo.toml # must match <VERSION> git log --oneline -1 # must be the "Bump version to <VERSION>" commit
-
Build release binaries for both Apple architectures:
cargo build --release --target aarch64-apple-darwin cargo build --release --target x86_64-apple-darwin
-
Package + checksum each binary as a tarball named
bgone-v<VERSION>-<TARGET>.tar.gzcontaining just thebgoneexecutable. Working in a temp dir likedist/:mkdir -p dist for TARGET in aarch64-apple-darwin x86_64-apple-darwin; do tar -czf "dist/bgone-v<VERSION>-${TARGET}.tar.gz" \ -C "target/${TARGET}/release" bgone done shasum -a 256 dist/*.tar.gz
Record the two SHA256 values — they're needed for both the release notes and the Homebrew formula.
-
Tag and push:
git tag v<VERSION> git push origin v<VERSION>
-
Create the GitHub release with both tarballs attached. The release notes mirror the
## [<VERSION>]section ofCHANGELOG.md, followed by Installation and Checksums blocks (see prior releases for exact formatting). Pass the body via heredoc:gh release create v<VERSION> \ dist/bgone-v<VERSION>-aarch64-apple-darwin.tar.gz \ dist/bgone-v<VERSION>-x86_64-apple-darwin.tar.gz \ --title "v<VERSION>" \ --notes "$(cat <<'EOF' ## What's New <copy the CHANGELOG section for this version verbatim> ## Installation ### Homebrew (macOS) \`\`\`bash brew tap benface/bgone brew install bgone \`\`\` ### Cargo \`\`\`bash cargo install bgone \`\`\` ## Checksums (SHA256) - \`bgone-v<VERSION>-aarch64-apple-darwin.tar.gz\`: \`<sha>\` - \`bgone-v<VERSION>-x86_64-apple-darwin.tar.gz\`: \`<sha>\` EOF )"
-
Update the Homebrew tap. In
./homebrew-bgone:cd homebrew-bgone # Edit bgone.rb: bump `version`, update both sha256 values git add bgone.rb git commit -m "Update to v<VERSION>" git push cd ..
The formula's URLs use
https://github.com/benface/bgone/releases/download/v#{version}/bgone-v#{version}-<TARGET>.tar.gzand referenceversion, so only theversionline and the twosha256lines need to change. (Leave the unused Linux block alone — past releases haven't shipped a Linux binary.) -
Publish to crates.io:
cargo publish --dry-run # verify packaging cargo publish # irreversible — can only be yanked, not removed
brew update && brew upgrade bgonefrom a clean machine should pull the new tarball.cargo install bgoneshould fetch the new version from crates.io.bgone --versionshould print<VERSION>.
These steps publish to shared/permanent infrastructure. Do each one only after the user has confirmed (or has standing approval) the release is ready:
git push origin v<VERSION>(pushing the tag)gh release create(publishes the release page + tarballs publicly)- pushing the Homebrew tap update (changes what
brew install bgonedoes for everyone) cargo publish(irreversible — only yanking is possible afterwards)