# Release Checklist

Use this checklist when preparing a new release of doxx. You can also create a GitHub issue using the "Release" template to track progress.

## Pre-Release

- [ ] All tests passing: `cargo test`
- [ ] No clippy warnings: `cargo clippy`
- [ ] Code is formatted: `cargo fmt --check`
- [ ] CHANGELOG.md updated:
  - [ ] Move items from `[Unreleased]` to new `[X.Y.Z] - YYYY-MM-DD` section
  - [ ] Keep `[Unreleased]` section empty for future changes
  - [ ] Verify changelog entries are accurate and complete
- [ ] Version bumped in `Cargo.toml`
- [ ] Test binary works: `cargo run --release -- tests/fixtures/comprehensive.docx`

## Create Release

- [ ] Commit version bump: `git commit -m "chore: release X.Y.Z"`
- [ ] Push to main: `git push`
- [ ] Create version tag: `git tag vX.Y.Z`
- [ ] Push tag: `git push origin vX.Y.Z`
- [ ] Wait for GitHub Actions workflows to complete (~10-15 minutes)

## Verify Automated Releases

All of the following are now automated via GitHub Actions:

- [ ] **GitHub Release** created at https://github.com/bgreenwell/doxx/releases/tag/vX.Y.Z
  - [ ] All platform binaries present (Linux, macOS, Windows)
  - [ ] Tarballs (.tar.xz) and ZIP archive
  - [ ] MSI installer for Windows
  - [ ] Shell/PowerShell installer scripts
  - [ ] SHA256 checksum files

- [ ] **Homebrew** formula published to [bgreenwell/homebrew-doxx](https://github.com/bgreenwell/homebrew-doxx)
  - Automated by: `publish-homebrew-formula` job in release.yml

- [ ] **Scoop** manifest published to [bgreenwell/scoop-bucket](https://github.com/bgreenwell/scoop-bucket)
  - Automated by: `.github/workflows/publish-scoop.yml`

- [ ] **crates.io** published at https://crates.io/crates/doxx
  - Automated by: `publish-crates-io` job in release.yml

- [ ] **AUR** package updated at [doxx-bin](https://aur.archlinux.org/packages/doxx-bin)
  - Automated by: `.github/workflows/publish-aur.yml`
  - PKGBUILD and .SRCINFO auto-generated and pushed

- [ ] **WinGet** manifest PR created to [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs)
  - Automated by: `.github/workflows/publish-winget.yml`
  - **Note:** PR may require manual merge approval from Microsoft team (1-2 days)

## Test Installations

- [ ] **Homebrew (macOS/Linux)**:
  ```bash
  brew update && brew upgrade doxx
  doxx --version
  ```

- [ ] **Scoop (Windows)**:
  ```powershell
  scoop update && scoop update doxx
  doxx --version
  ```

- [ ] **AUR (Arch Linux)**:
  ```bash
  yay -Syu doxx-bin
  doxx --version
  ```

- [ ] **WinGet (Windows)**:
  ```powershell
  winget upgrade bgreenwell.doxx
  doxx --version
  ```
  **Note:** May take 1-2 days for WinGet PR to be merged

## Post-Release

- [ ] All automated workflows completed successfully (check GitHub Actions)
- [ ] Close release tracking issue

## Troubleshooting

**GitHub Actions fails:** Verify all secrets are configured: `HOMEBREW_TAP_TOKEN`, `SCOOP_BUCKET_TOKEN`, `CARGO_REGISTRY_TOKEN`, `AUR_SSH_PRIVATE_KEY`, `WINGET_TOKEN`

**AUR automation fails:** Check SSH key is valid (`AUR_SSH_PRIVATE_KEY` secret). Verify `doxx-bin` package exists at aur.archlinux.org.

**WinGet PR not appearing:** Check `.github/workflows/publish-winget.yml` logs. May need to create PR manually with `komac update`.

For detailed workflow information:
- `.github/workflows/release.yml` — main release, Homebrew, crates.io
- `.github/workflows/publish-scoop.yml` — Scoop bucket
- `.github/workflows/publish-aur.yml` — AUR publishing
- `.github/workflows/publish-winget.yml` — WinGet manifests
