Skip to content

Commit eeaecc8

Browse files
leggetterclaude
andauthored
chore: promote homebrew-core as primary macOS install path (#299)
* chore(release): stop publishing stable hookdeck formula to third-party tap The stable `hookdeck` formula now lives in homebrew-core (merged 2026-06-04) and is auto-bumped by Homebrew's BrewTestBot. The third-party `hookdeck/homebrew-hookdeck` tap continues to host only `hookdeck-beta` (homebrew-core does not accept pre-releases). The brews block now uses a fixed `hookdeck-beta` name with `skip_upload` gated to pre-release tags, so stable releases will no longer overwrite the tap's `hookdeck.rb`. A follow-up PR on the tap repo removes the stale stable formula files and adds `tap_migrations.json` to redirect existing tap users to homebrew-core. Refs #297 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(readme): promote homebrew-core as the primary macOS install path `hookdeck` is now in homebrew-core, so the default macOS install is `brew install hookdeck` (no tap, no trust step). The third-party tap is demoted to "for beta releases only" with a note about the upcoming `HOMEBREW_REQUIRE_TAP_TRUST` default flip. Replaces the stale Troubleshooting entry (cask-migration leftover from an abandoned cask plan) with three relevant entries: tap → homebrew-core migration, hookdeck/hookdeck-beta link conflicts, and beta tap-trust. Refs #297 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ci(test-homebrew-build): validate hookdeck-beta.rb instead of hookdeck.rb The GoReleaser brews block now produces `hookdeck-beta.rb` only (the stable `hookdeck` formula lives in homebrew-core). The test-homebrew-build CI was still validating `dist/homebrew/Formula/hookdeck.rb`, which no longer exists. Updates: - `test-scripts/test-homebrew-build.sh`: validate_formula now reads `hookdeck-beta.rb`; the install-test path (gated by `--install` flag, workflow_dispatch only) targets the `hookdeck-beta` formula name. - `.github/workflows/test-homebrew-build.yml`: upload artifact path updated to `hookdeck-beta.rb`. Verified locally: `./test-scripts/test-homebrew-build.sh` exits 0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ci(test-homebrew-build): drop stale "deprecation warnings" reporting The validation script's header and success summary still claimed to verify that the formula contains deprecation warnings — a leftover from when the tap's `hookdeck.rb` carried a "being deprecated in favor of cask" notice. That notice was removed from the tap formula a while back, and there has been no actual `grep` check for deprecation warnings in this script. Drops the two stale lines. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 46c8c79 commit eeaecc8

4 files changed

Lines changed: 60 additions & 28 deletions

File tree

.github/workflows/test-homebrew-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,5 @@ jobs:
5353
with:
5454
name: homebrew-files
5555
path: |
56-
dist/homebrew/Formula/hookdeck.rb
56+
dist/homebrew/Formula/hookdeck-beta.rb
5757
retention-days: 7

.goreleaser/mac.yml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ archives:
4747
- README*
4848
- CHANGELOG*
4949
brews:
50-
- name: "{{ if .Prerelease }}hookdeck-beta{{ else }}hookdeck{{ end }}"
50+
# Stable releases are published to homebrew-core via Homebrew's autobump
51+
# (BrewTestBot opens version-bump PRs after each tagged release). The
52+
# third-party tap publishes only the beta channel — homebrew-core does
53+
# not accept pre-releases, so the `hookdeck-beta` formula lives here.
54+
- name: hookdeck-beta
55+
skip_upload: "{{ if not .Prerelease }}true{{ end }}"
5156
ids:
5257
- hookdeck
5358
repository:
@@ -56,21 +61,20 @@ brews:
5661
directory: Formula
5762
homepage: https://hookdeck.com
5863
description: Receive events (e.g. webhooks) on your localhost with event history, replay, and team collaboration
59-
64+
6065
install: |
6166
bin.install "hookdeck"
62-
67+
6368
# Install completions from pre-generated files
6469
bash_completion.install "completions/hookdeck.bash" => "hookdeck"
6570
zsh_completion.install "completions/_hookdeck"
66-
71+
6772
caveats: |
68-
❤ Thanks for installing the Hookdeck CLI!
69-
{{ if .Prerelease }}
73+
❤ Thanks for installing the Hookdeck CLI beta!
74+
7075
⚠️ You are using a BETA version. Report issues at:
7176
https://github.com/hookdeck/hookdeck-cli/issues
72-
{{ end }}
73-
77+
7478
If this is your first time using the CLI, run:
7579
hookdeck login
7680

README.md

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,27 @@ npm install hookdeck-cli@beta -g
7575

7676
### macOS
7777

78-
Hookdeck CLI is available on macOS via [Homebrew](https://brew.sh/):
78+
Hookdeck CLI is available on macOS via [Homebrew](https://brew.sh/) in [homebrew-core](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/h/hookdeck.rb):
7979

8080
```sh
81-
brew install hookdeck/hookdeck/hookdeck
81+
brew install hookdeck
8282
```
8383

84-
To install a beta (pre-release) version:
84+
New stable versions are picked up automatically by Homebrew's autobump after each release — `brew upgrade` will pull them in.
85+
86+
To install a beta (pre-release) version from our tap:
8587

8688
```sh
8789
brew install hookdeck/hookdeck/hookdeck-beta
8890
```
8991

92+
> [!NOTE]
93+
> When [`HOMEBREW_REQUIRE_TAP_TRUST`](https://docs.brew.sh/Taps) becomes the default in Homebrew 5.2.0 / 6.0.0, installing the beta formula from a third-party tap will require an explicit trust step:
94+
> ```sh
95+
> brew trust --formula hookdeck/hookdeck/hookdeck-beta
96+
> ```
97+
> The stable `hookdeck` formula lives in homebrew-core and is not affected.
98+
9099
### Windows
91100
92101
Hookdeck CLI is available on Windows via the [Scoop](https://scoop.sh/) package manager:
@@ -1218,22 +1227,41 @@ There are also some hidden flags that are mainly used for development and debugg
12181227

12191228
## Troubleshooting
12201229

1221-
### Homebrew: Binary Already Exists Error
1230+
### Homebrew: migrating from the third-party tap to homebrew-core
1231+
1232+
The stable `hookdeck` formula now lives in [homebrew-core](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/h/hookdeck.rb). The third-party `hookdeck/hookdeck` tap publishes only the beta formula.
12221233

1223-
If you previously installed Hookdeck via the Homebrew formula and are upgrading to the cask version, you may see:
1234+
If you installed via the tap, the move is automatic: `brew update && brew upgrade` will pull the next stable version from homebrew-core. No action needed.
12241235

1236+
If you want to switch immediately:
1237+
1238+
```sh
1239+
brew update
1240+
brew upgrade hookdeck
12251241
```
1226-
Warning: It seems there is already a Binary at '/opt/homebrew/bin/hookdeck'
1227-
from formula hookdeck; skipping link.
1242+
1243+
### Homebrew: `hookdeck` and `hookdeck-beta` conflict on link
1244+
1245+
Both formulae install a binary called `hookdeck`, so only one can be linked at a time. Switching between them requires `--overwrite`:
1246+
1247+
```sh
1248+
# Switch from beta to stable
1249+
brew link --overwrite hookdeck
1250+
1251+
# Switch from stable to beta
1252+
brew link --overwrite hookdeck-beta
12281253
```
12291254

1230-
To resolve this, uninstall the old formula version first, then install the cask:
1255+
### Homebrew: beta install asks for a `brew trust` step
1256+
1257+
Once [`HOMEBREW_REQUIRE_TAP_TRUST`](https://docs.brew.sh/Taps) becomes the default in Homebrew 5.2.0 / 6.0.0, installing the beta from the third-party tap requires:
12311258

12321259
```sh
1233-
brew uninstall hookdeck
1234-
brew install --cask hookdeck/hookdeck/hookdeck
1260+
brew trust --formula hookdeck/hookdeck/hookdeck-beta
12351261
```
12361262

1263+
The stable formula lives in homebrew-core and is unaffected.
1264+
12371265

12381266
## Developing
12391267

@@ -1433,7 +1461,7 @@ The GitHub Actions workflow will automatically:
14331461
- Create a stable GitHub release
14341462
- Publish to NPM with the `latest` tag
14351463
- Update package managers:
1436-
- Homebrew: `hookdeck` formula
1464+
- Homebrew: stable formula in [homebrew-core](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/h/hookdeck.rb) is auto-bumped by Homebrew's BrewTestBot (no action from us; runs every ~3 hours after the tag is published). The `hookdeck-beta` formula in our third-party tap is updated only on pre-release tags.
14371465
- Scoop: `hookdeck` package
14381466
- Docker: Updates both the version tag and `latest`
14391467

test-scripts/test-homebrew-build.sh

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
# It validates that:
99
# - GoReleaser snapshot build completes successfully
1010
# - Homebrew formula file is generated
11-
# - Formula contains deprecation warning
1211
# - Formula references completion files correctly
1312
# - Completion files are bundled in the tarball
1413
# NOTE: Cask validation is currently commented out - focusing on formula only
@@ -170,9 +169,11 @@ run_goreleaser_build() {
170169

171170
# Validate Homebrew formula file
172171
validate_formula() {
173-
echo_section "Validating Formula (dist/homebrew/Formula/hookdeck.rb)"
174-
175-
local formula_file="dist/homebrew/Formula/hookdeck.rb"
172+
echo_section "Validating Formula (dist/homebrew/Formula/hookdeck-beta.rb)"
173+
174+
# Stable releases of `hookdeck` now go to homebrew-core; the third-party
175+
# tap publishes only `hookdeck-beta` on pre-release tags.
176+
local formula_file="dist/homebrew/Formula/hookdeck-beta.rb"
176177

177178
if [ ! -f "$formula_file" ]; then
178179
echo_error "Formula file not found at $formula_file"
@@ -298,7 +299,7 @@ setup_local_tap() {
298299

299300
# Patch formula to use local file:// URLs for testing
300301
echo_info "Patching formula to use local file URLs for testing..."
301-
local formula_file="$LOCAL_TAP_PATH/Formula/hookdeck.rb"
302+
local formula_file="$LOCAL_TAP_PATH/Formula/hookdeck-beta.rb"
302303
local current_dir="$(pwd)"
303304

304305
# Replace GitHub URLs with local file:// URLs
@@ -320,8 +321,8 @@ setup_local_tap() {
320321
test_formula_installation() {
321322
echo_section "Testing Formula Installation"
322323

323-
local tap_name="hookdeck-test/hookdeck-test/hookdeck"
324-
324+
local tap_name="hookdeck-test/hookdeck-test/hookdeck-beta"
325+
325326
echo_info "Installing formula: brew install $tap_name"
326327
if brew install "$tap_name"; then
327328
echo_success "Formula installed successfully"
@@ -526,7 +527,6 @@ main() {
526527
echo_info "What was validated:"
527528
echo " ✓ GoReleaser configuration generates correct Homebrew formula"
528529
echo " ✓ Completion files are bundled in archives"
529-
echo " ✓ Formula has deprecation warnings"
530530
echo " ✓ Formula has proper completion directives"
531531
# echo " ✓ Cask has proper completion directives" # Commented out - not testing cask
532532

0 commit comments

Comments
 (0)