# Release Process
This project uses an automated release workflow via GitHub Actions.
## How to Release
1. **Go to Actions** → **Release** → **Run workflow**
2. **Select action:**
- `bump-patch` (0.1.0 → 0.1.1) - bug fixes
- `bump-minor` (0.1.0 → 0.2.0) - new features
- `bump-major` (0.1.0 → 1.0.0) - breaking changes
3. **Click "Run workflow"**
4. **Review and merge** the auto-created PR
5. **Done!** Merging automatically:
- Creates git tag `vX.Y.Z`
- Publishes to crates.io
- Creates GitHub Release with release notes
- Builds and uploads binaries for:
- `x86_64-unknown-linux-gnu` (Linux x64)
- `aarch64-unknown-linux-gnu` (Linux ARM64)
- `x86_64-apple-darwin` (macOS x64)
- `aarch64-apple-darwin` (macOS Apple Silicon)
- `x86_64-pc-windows-msvc` (Windows x64)
6. **Update Homebrew tap** (manual, see below)
## Build Binaries for Existing Release
If you need to rebuild binaries for an existing release:
1. **Go to Actions** → **Release** → **Run workflow**
2. **Select action:** `build-binaries`
3. **Enter version:** e.g., `0.1.1` (without the `v` prefix)
4. **Click "Run workflow"**
## What Gets Updated
The release PR includes:
- `Cargo.toml` - version bump
- `Cargo.lock` - updated lockfile
- `CHANGELOG.md` - auto-generated from commits
## Commit Message Convention
For meaningful changelogs, use conventional commits:
| `feat:` | Features | `feat: add export to JSON` |
| `fix:` | Bug Fixes | `fix: resolve crash on empty diff` |
| `docs:` | Documentation | `docs: update keybindings table` |
| `perf:` | Performance | `perf: optimize large file rendering` |
| `refactor:` | Refactor | `refactor: simplify state machine` |
| `test:` | Testing | `test: add integration tests` |
| `chore:` | Miscellaneous | `chore: update dependencies` |
## Update Homebrew Tap
After binaries are uploaded, update the Homebrew formula:
```bash
# Get SHA256 checksums for the new version
VERSION=X.Y.Z
curl -sL "https://github.com/agavra/tuicr/releases/download/v${VERSION}/tuicr-${VERSION}-x86_64-apple-darwin.tar.gz" | shasum -a 256
curl -sL "https://github.com/agavra/tuicr/releases/download/v${VERSION}/tuicr-${VERSION}-aarch64-unknown-linux-gnu.tar.gz" | shasum -a 256
# Update homebrew-tap/Formula/tuicr.rb with new version and checksums
# Then commit and push to homebrew-tap repo
```
## Required Secrets
The following secrets must be configured in GitHub repository settings:
- `CARGO_REGISTRY_TOKEN` - API token from https://crates.io/settings/tokens
## Manual Release (if needed)
```bash
# Update version in Cargo.toml manually, then:
cargo publish --dry-run # verify
cargo publish # publish to crates.io
git tag v0.2.0
git push origin v0.2.0
```