Release engineering: script, package managers, completions, docs by jeremy · Pull Request #171 · basecamp/basecamp-cli

AI review requested due to automatic review settings

February 28, 2026 20:25

@jeremy

Add release orchestration:
- scripts/release.sh: validates semver, branch, clean tree, sync, no
  replace directives, runs make release-check, tags and pushes
- Makefile: replace-check, release-check (check + replace-check + vuln +
  race-test), release targets

Activate package manager distribution:
- Homebrew cask via basecamp/homebrew-tap Casks/
- Scoop manifest via basecamp/homebrew-tap root
- AUR basecamp-bin package with shell completions

Bundle shell completions (bash, zsh, fish) in release archives via
GoReleaser before hooks.

Remove Docker release channel (binary CLI with browser OAuth, keyring,
and shell integration doesn't work in containers; eliminates QEMU build
time and failure mode).

Add RELEASING.md maintainer runbook, CODEOWNERS, PR template.
Align install.md and README.md with working install matrix.

chatgpt-codex-connector[bot]

@jeremy

- provides: [basecamp] — declares the binary this package provides
- conflicts: [basecamp, basecamp-cli] — prevents dual-install with
  existing basecamp-cli AUR package
- optdepends for shell completion packages
- Fix pkgdesc to follow AUR style (no articles, descriptive)

@jeremy

- Rename LICENSE.md → MIT-LICENSE for consistency with other repos
- Update all references (.goreleaser.yaml AUR package, README.md)
- Add check-surface-compat target: builds previous tag in worktree,
  diffs CLI surface against current — mirrors CI release gate
- Wire check-surface-compat into release-check
- Fix help text for release-check (was missing race + surface compat)

@jeremy

Copilot AI review requested due to automatic review settings

February 28, 2026 20:51

@jeremy

- Fix DRY_RUN=1 not recognized as dry-run (only "true" matched)
- Fix grep patterns: \s is not POSIX, use [[:space:]] in Makefile
  and release.sh
- Update RELEASING.md to reference make release-check (not make check)
  and enumerate all pre-flight checks

@jeremy

- Add MIT-LICENSE explicitly to archive files (LICENSE* glob doesn't
  match MIT-LICENSE prefix)
- Pass DRY_RUN as env var from Makefile to release.sh so
  make release VERSION=x.y.z DRY_RUN=1 works correctly
- Use mktemp for worktree path in check-surface-compat with trap
  cleanup to avoid stale worktree collisions