Releasing joy
This chapter documents the release process for joy binaries, GitHub Releases, and release-adjacent notes.
Versioning Policy
joyuses semantic versioning with pre-1.0 expectations (0.y.z).Cargo.tomlis the source of truth for the version.- Git tags use
vX.Y.Z(for examplev0.4.0).
Current Release Targets
The release workflow currently publishes:
x86_64-unknown-linux-gnuaarch64-apple-darwinx86_64-apple-darwinx86_64-pc-windows-msvcx86_64-pc-windows-gnu(compatibility artifact during the beta transition)
Release Workflow
- Release PR + tag automation:
.github/workflows/release-plz.yaml - Binary/release asset workflow:
.github/workflows/release.yaml - Packaging config for release-plz:
release-plz.toml
release-plz handles version/changelog PRs and tag creation.
Tag pushes (v*) trigger the binary release workflow.
Pre-Release Checklist
- Ensure milestone issues and notes are up to date.
- Confirm local environment health (
joy --json doctor). - Run CI-parity commands (
just ci-local; optionally compiled e2e checks). - Validate distribution metadata templates (
just dist-metadata-check). - Confirm PR checks (
gh pr checks <pr-number>). - Ensure
RELEASE_PLZ_PATsecret is configured withcontents+pull_requestswrite permission (RELEASE_PLZ_TOKENis also supported as a fallback name). - If default-branch protection blocks workflow pushes, set
JOY_RELEASE_PATso release metadata commits can updateFormula/joy.rb.
Automated Flow (Recommended)
- Merge regular changes into
main. release-plzopens/updates a release PR with version and changelog updates.- Merge the release PR.
release-plz releasecreatesvX.Y.Ztag..github/workflows/release.yamlbuilds artifacts, publishes GitHub Release assets, and updates package metadata.
Monitor Actions and verify the GitHub Release contains archives/checksums/signatures/SBOM.
Manual Backstop (If Needed)
git tag -a vX.Y.Z -m "joy vX.Y.Z"
git push origin vX.Y.Z
Packaging Outputs
The release workflow generates and publishes concrete metadata with release checksums:
Formula/joy.rb(single-repo Homebrew tap source of truth)packaging/scoop/joy.json
Users can install via Homebrew tap:
brew tap harnesslabs/joy
brew install harnesslabs/joy/joy
brew upgrade joy