# Releasing whoseportisitanyway
## Supported release path
```bash
This verifies the repo, bumps version files, creates a release branch,
pushes, and opens a release PR.
When the PR is merged into `main`, GitHub Actions:
1. Re-verifies format, clippy, tests
2. Builds release binaries (4 targets)
3. Creates git tag
4. Generates checksums
5. Creates GitHub release
6. Verifies release integrity
7. Publishes crate to crates.io
## Step by step
### 1. Run release-check locally
```bash
just release-check
```
Runs `cargo fmt --check`, `cargo clippy`, and `cargo test`.
### 2. Run the release command
```bash
just release patch # 1.0.0 -> 1.0.1
just release minor # 1.0.0 -> 1.1.0
just release major # 1.0.0 -> 2.0.0
```
This:
1. Validates clean working tree
2. Validates on `main` branch
3. Pulls latest from origin
4. Bumps version in `Cargo.toml` via `cargo set-version`
5. Writes version to `VERSION` file
6. Creates branch `release/vX.Y.Z`
7. Commits and pushes
8. Opens a PR to `main`
### 3. Merge the release PR
Merging the PR is the release boundary.
```text
release PR -> merge -> verified release workflow -> publish
```
### 4. Release workflow on `main`
`.github/workflows/release.yml` runs when `VERSION` changes on `main`:
- **check-tag**: reads VERSION, computes tag, enters recovery mode if tag exists
- **verify**: installs just, runs `just release-check`
- **build**: compiles for x86_64-linux, aarch64-linux, x86_64-darwin, aarch64-darwin
- **release**: creates tag, generates SHA256SUMS.txt, creates GitHub release
- **verify-release**: validates the release is correct (tag, assets, checksums)
- **publish-crate**: publishes to crates.io (idempotent)
## Contributor checklist
1. Make sure you're on `main` with a clean tree
2. Run `just release-check`
3. Run `just release patch|minor|major`
4. Review the generated release PR
5. Merge the PR
6. Verify the release workflow completes
## Files involved
- `justfile`
- `.github/workflows/release.yml`
- `.github/workflows/ci.yml`
- `VERSION`
- `Cargo.toml`
## Remaining improvements
### 1. Windows release artifacts
Currently builds Linux and macOS artifacts only.
### 2. Artifact signing
No code signing is configured.
### 3. Release notes curation
The workflow uses autogenerated GitHub release notes. A structured
CHANGELOG.md is maintained separately.