This project uses cargo-dist to automate cross-platform releases. Binaries and installers for Linux, macOS, and Windows are automatically built and uploaded to GitHub Releases when a version tag is pushed.
brew tap rupurt/homebrew-tap
brew install siftFollow these steps to release a new version of sift:
Bump the version number in Cargo.toml. We follow Semantic Versioning.
# Cargo.toml
[package]
name = "sift"
version = "0.2.0" # Update thisCommit the version bump to the main branch.
git add Cargo.toml
git commit -m "chore: bump version to 0.2.0"
git push origin mainCreate a git tag corresponding to the new version (must start with v).
git tag v0.2.0
git push origin v0.2.0Pushing the tag triggers the Release GitHub Action. This workflow will:
- Plan the release using
cargo dist plan. - Build binaries for all supported platforms in parallel.
- Inject
github.shainto release builds sosift --versionreports the exact release commit. - Generate supported installers (shell, PowerShell, Homebrew, and
.msi). - Create a GitHub Release and upload all artifacts and checksums.
Once the GitHub Action completes:
- Go to the Releases page.
- Verify that all artifacts (tarballs and installers) are attached.
- Ensure the
checksums.txtfile is present.
| Platform | Target Triple | Artifacts |
|---|---|---|
| Linux (x86_64, glibc) | x86_64-unknown-linux-gnu |
.tar.gz, shell installer |
| Linux (x86_64, static) | x86_64-unknown-linux-musl |
.tar.gz, shell installer |
| Linux (ARM64) | aarch64-unknown-linux-gnu |
.tar.gz, shell installer |
| macOS (Intel) | x86_64-apple-darwin |
.tar.gz, shell installer, Homebrew formula |
| macOS (Apple Silicon) | aarch64-apple-darwin |
.tar.gz, shell installer, Homebrew formula |
| Windows (x86_64) | x86_64-pc-windows-msvc |
.zip, .msi, PowerShell installer |
You can simulate the release plan locally (if cargo-dist is installed):
# See what would be built
cargo dist plan
# Build artifacts locally (outputs to target/dist)
cargo dist buildVersion metadata contract:
- Normal local and test builds report
sift <semver>-dev (<sha>). - Release and dist-profile builds report
sift <semver> (<sha>). - If git metadata is unavailable during build, the SHA falls back to
unknown.
On Linux, you can build a truly static binary using Nix:
just build-staticThe resulting binary will be linked at target/release/sift-static/bin/sift.