This document describes the release process for wt.
- goreleaser installed locally (for snapshots)
- gh CLI authenticated (for local releases)
- Push access to the repository
| Type | Tag Format | Homebrew | Use Case |
|---|---|---|---|
| Alpha | v0.1.0-alpha.1 |
Skipped | Testing, early feedback |
| Beta | v0.1.0-beta.1 |
Skipped | Feature complete, testing |
| RC | v0.1.0-rc.1 |
Skipped | Release candidate |
| Stable | v0.1.0 |
Updated | Production release |
# Validate config before releasing
just release-check
# Test release locally (no publish)
just release-snapshot
# Create alpha release (auto-increments)
just release-alpha
# Create stable release
just release VERSION=0.1.0Alpha releases are for testing and don't update Homebrew.
# Auto-increment from last alpha tag
just release-alpha
# v0.1.0-alpha.1 → v0.1.0-alpha.2 → v0.1.0-alpha.3
# Or specify a number
just release-alpha ALPHA=5
# Creates v0.1.0-alpha.5What happens:
- Runs tests and lint
- Cross-platform build check (linux/darwin/windows)
- Creates and pushes tag
- GitHub Actions runs goreleaser
- GitHub Release created with binaries
- Homebrew is skipped (via
skip_upload: auto)
Stable releases update Homebrew.
just release VERSION=0.1.0What happens:
- Runs tests and lint
- Cross-platform build check
- Creates and pushes
v0.1.0tag - GitHub Actions runs goreleaser
- GitHub Release created
- Homebrew cask updated in
raisedadead/homebrew-tap
For debugging or when CI isn't available:
# Test build without publishing
just release-snapshot
# Full release with local token
GITHUB_TOKEN=$(gh auth token) goreleaser release --cleanThe release is automated via .github/workflows/release.yaml:
- Triggered by tag push (
v*) - Runs tests
- Runs goreleaser with
GITHUB_TOKENandHOMEBREW_TAP_GITHUB_TOKEN - Creates GitHub Release with:
- Binary archives (tar.gz, zip for Windows) including man pages and shell completions
- Checksums file
- Auto-generated changelog
- For stable releases: pushes Homebrew cask to
raisedadead/homebrew-tap
| Secret | Purpose |
|---|---|
GITHUB_TOKEN |
Auto-provided, creates releases |
HOMEBREW_TAP_GITHUB_TOKEN |
Fine-grained PAT with contents:write on raisedadead/homebrew-tap |
Follow Semantic Versioning:
| Version | Meaning |
|---|---|
v0.x.x |
Pre-release, API may change |
v1.0.0 |
First stable release |
vX.Y.Z |
Major.Minor.Patch |
Increment rules:
- Major: Breaking changes
- Minor: New features (backward compatible)
- Patch: Bug fixes
# Check all platforms build before releasing
just build-all# Validate configuration
just release-check# Use gh CLI token
GITHUB_TOKEN=$(gh auth token) goreleaser release --cleanAfter a stable release:
- Verify GitHub Release page has all artifacts
- Test Homebrew installation:
brew update brew install raisedadead/tap/wt wt --version
- Update any version references in documentation