Conversation
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.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3d394af1f7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- 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)
There was a problem hiding this comment.
Pull request overview
Adds end-to-end release engineering for the Basecamp CLI, covering local release orchestration, CI publishing via GoReleaser, package-manager distribution, bundled shell completions, and maintainer documentation.
Changes:
- Introduces
scripts/release.shplus new Makefile targets (release,release-check,replace-check,race-test) to standardize release cuts and pre-flight validation. - Extends
.goreleaser.yamlto generate and ship shell completions and publish to Homebrew Cask, Scoop, and AUR. - Updates release workflow and docs (
RELEASING.md, install docs, PR template, CODEOWNERS) to match the new release process.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/release.sh | New local release script to validate state, run pre-flight checks, tag, and push. |
| Makefile | Adds release/race/replace-check targets and surfaces them in make help. |
| .goreleaser.yaml | Generates completion artifacts and configures publishing to Homebrew/Scoop/AUR. |
| .github/workflows/release.yml | Adjusts release workflow token scope/inputs and removes Docker-related pieces. |
| RELEASING.md | New maintainer runbook documenting the release pipeline and channels. |
| install.md | Updates install options and adds GitHub Release install path. |
| README.md | Aligns “Other installation methods” with the updated install matrix. |
| .github/pull_request_template.md | Adds a minimal PR template emphasizing What/Why/Testing. |
| .github/CODEOWNERS | Adds ownership rules for release infrastructure (currently includes a repo-wide wildcard). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- 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)
- 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
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 10 out of 11 changed files in this pull request and generated 5 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- 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
What
End-to-end release infrastructure for v0.2.0 and beyond.
Release orchestration:
scripts/release.sh— validates semver, main branch, clean tree, remote sync, no replace directives, runs full pre-flight, creates annotated tag, pushes to trigger release workflowmake release VERSION=0.2.0(withDRY_RUN=1support)make release-check— full pre-flight gate (check + replace-check + vuln + race-test)make replace-check— guards against shipping local replace directivesPackage manager distribution:
basecamp/homebrew-tapCasks/basecamp/homebrew-taproot (nodirectory:— fixes discovery)basecamp-binwith shell completions installed to standard pathshomebrew-tap,HOMEBREW_TAP_TOKEN+AUR_KEYpassed to GoReleaserShell completions bundled in release archives (bash, zsh, fish) via GoReleaser before hooks.
Docker release channel removed (separate PR #170 — binary CLI with browser OAuth, keyring, and shell completions doesn't work in containers; eliminates QEMU build time and hang risk).
Docs:
RELEASING.md— maintainer runbook (quick release, dry run, pipeline, versioning, CI secrets, AUR setup, distribution channels).github/CODEOWNERS—@basecamp/sipowns release infra.github/pull_request_template.md— minimal What/Why/Testinginstall.md+README.mdaligned with working install matrixWhy
Two releases shipped (v0.1.0, v0.1.1) with manual
git tag && git push. Before v0.2.0: guardrails, package manager distribution, maintainer docs.Testing
goreleaser checkpassesmake replace-checkpassesbasecamp-binaccount created,AUR_KEYsecret configuredmake release VERSION=0.2.0 DRY_RUN=1(after merge)