# Run preflight checks and tag
make release VERSION=v4.0.0
# Or dry-run first
make release VERSION=v4.0.0 DRY_RUN=1Pushing the tag triggers the GitHub Actions release workflow, which:
- Runs the full test suite
- Builds binaries for all platforms (linux/darwin/windows/freebsd/openbsd x amd64/arm64)
- Signs macOS binaries (Developer ID + notarization)
- Signs checksums with cosign (keyless, OIDC)
- Generates SBOMs with Syft
- Builds .deb and .rpm packages
- For stable tags only, publishes the Homebrew cask to
basecamp/homebrew-tap - For stable tags only, publishes the Scoop manifest to
basecamp/homebrew-tap - For stable tags only, publishes to AUR (if
AUR_KEYconfigured)
Follow semver. Use v prefix for tags: v4.0.0, v4.0.0-beta1, v4.1.0-rc.1.
Stable tags like v4.0.0 publish to all normal distribution channels. Prerelease tags with a suffix like -beta1, -beta.1, or -rc.1 are marked as GitHub prereleases and are not marked as the latest GitHub release.
Use a prerelease tag when technical testers need a build before the next stable version:
make release VERSION=v4.0.0-beta1Prerelease behavior is intentionally conservative so existing package-manager users do not upgrade unless they explicitly opt in. Example behavior:
| Surface | Stable tag v4.0.0 |
Prerelease tag v4.0.0-beta1 |
|---|---|---|
| GitHub Releases | Published as a normal release and eligible to be GitHub's latest release. | Published as a GitHub prerelease and explicitly not marked latest. |
| Release assets | Binaries, archives, checksums, SBOMs, .deb, and .rpm artifacts are uploaded. |
Same artifacts are uploaded for explicit tester download/install. |
| curl installer | Installs v4.0.0 once GitHub marks it latest. |
Does not install the prerelease via releases/latest; testers must download assets explicitly. |
| Homebrew | Updates the normal basecamp/tap/fizzy cask. brew upgrade fizzy can move users to v4.0.0. |
Does not update the normal cask (skip_upload: auto). Existing brew upgrade fizzy users stay on the latest stable cask. |
| Scoop | Updates the normal fizzy manifest. scoop update fizzy can move users to v4.0.0. |
Does not update the normal manifest (skip_upload: auto). Existing Scoop users stay on the latest stable manifest. |
| AUR | Updates the normal fizzy-cli package if AUR_KEY is configured. |
Skips the AUR publish job. Existing AUR users stay on the latest stable package. |
| Go install | The git tag exists for users who explicitly request it. | The prerelease tag exists for users who explicitly request it; no package-manager manifest is updated. |
Technical testers can install prereleases explicitly from the GitHub release assets, for example by downloading the asset for their OS/architecture from https://github.com/basecamp/fizzy-cli/releases/tag/v4.0.0-beta1.
| Name | Type | Purpose |
|---|---|---|
RELEASE_CLIENT_ID |
variable | GitHub App client ID for cli-release-bot |
RELEASE_APP_PRIVATE_KEY |
secret | GitHub App private key for tap push |
AUR_KEY |
secret | ed25519 SSH private key for AUR (optional) |
| Secret | Purpose |
|---|---|
MACOS_SIGN_P12 |
Base64-encoded Developer ID Application .p12 |
MACOS_SIGN_PASSWORD |
Password for the .p12 certificate |
MACOS_NOTARY_KEY |
Base64-encoded App Store Connect API key (.p8) |
MACOS_NOTARY_KEY_ID |
App Store Connect API key ID (10 chars) |
MACOS_NOTARY_ISSUER_ID |
App Store Connect issuer UUID |
| Channel | Location | Updated by |
|---|---|---|
| GitHub Releases | basecamp/fizzy-cli/releases |
GoReleaser |
| Homebrew | basecamp/homebrew-tap Casks/fizzy.rb |
GoReleaser (stable tags only) |
| Scoop | basecamp/homebrew-tap fizzy.json |
GoReleaser (stable tags only) |
| AUR | aur.archlinux.org/packages/fizzy-cli |
publish-aur.sh (stable tags only) |
| Go install | go install github.com/basecamp/fizzy-cli/cmd/fizzy@latest |
Go module proxy |
| curl installer | scripts/install.sh |
Manual |
# Full preflight without tagging
make release VERSION=v4.0.0 DRY_RUN=1
# GoReleaser snapshot (local build test — generate completions first)
go build -o fizzy-tmp ./cmd/fizzy
mkdir -p completions
./fizzy-tmp completion bash > completions/fizzy.bash
./fizzy-tmp completion zsh > completions/fizzy.zsh
./fizzy-tmp completion fish > completions/fizzy.fish
rm fizzy-tmp
goreleaser release --snapshot --clean- Generate ed25519 SSH keypair:
ssh-keygen -t ed25519 -f aur_key - Add public key to your AUR account profile
- Add private key as
AUR_KEYsecret on the fizzy-cli repo