Motivation
Spun out of #294. With Homebrew making HOMEBREW_REQUIRE_TAP_TRUST the default in 5.2.0/6.0.0, every documented brew install hookdeck/hookdeck/hookdeck path will require an explicit brew trust step from end users.
Landing hookdeck in homebrew-core sidesteps tap-trust entirely for the stable channel — users just brew install hookdeck. Beta stays in our third-party tap regardless (homebrew-core doesn't accept pre-releases).
Current status (2026-06-04)
🎉 MERGED into homebrew-core on 2026-06-04 11:48 UTC: Homebrew/homebrew-core#286152
Approved by maintainer botantony. Bottles being built/published by BrewTestBot. brew install hookdeck (no tap) will work for end users once bottles are uploaded.
Phase 4 (post-acceptance docs/comms) now unblocked — kickoff in #297.
Phase 1 (Preparation) — complete, shipped in v2.2.0:
Squash-merged via #296:
- Disabled vestigial
CGO_ENABLED=1 on darwin builds in .goreleaser/mac.yml.
hookdeck completion --shell <shell> now writes the completion script to stdout (was: wrote a file + printed instructions). Breaking change; called out in v2.2.0 release notes.
- Regenerated
REFERENCE.md for gateway connection pause/unpause argument.
Phase 2 (Formula authoring) — complete. Final formula submitted in the PR:
class Hookdeck < Formula
desc "Forward webhook events from Hookdeck to a local server"
homepage "https://hookdeck.com"
url "https://github.com/hookdeck/hookdeck-cli/archive/refs/tags/v2.2.0.tar.gz"
sha256 "e869c5cccfb6e37d711add229ea14717516e61912af5a883e31a47588e4f61b6"
license "Apache-2.0"
head "https://github.com/hookdeck/hookdeck-cli.git", branch: "main"
livecheck do
url :stable
strategy :github_latest
end
depends_on "go" => :build
def install
ldflags = "-s -w -X github.com/hookdeck/hookdeck-cli/pkg/version.Version=#{version}"
system "go", "build", *std_go_args(ldflags:)
generate_completions_from_executable(bin/"hookdeck", "completion",
shell_parameter_format: "--shell=",
shells: [:bash, :zsh])
end
test do
assert_match version.to_s, shell_output("#{bin}/hookdeck --version")
end
end
Local validation (all green):
HOMEBREW_NO_INSTALL_FROM_API=1 brew install --build-from-source hookdeck — built in 14s, 14.6 MB
brew test hookdeck — exit 0
brew style hookdeck — 0 offenses
brew audit --strict --new --online hookdeck — exit 0
Phase 3 (Submission) — in flight. PR opened from leggetter:hookdeck-new → Homebrew/homebrew-core:main. Awaiting maintainer review.
Breaking-change callout for release notes
Commit 3d369ce changes hookdeck completion --shell <shell> behavior:
- Before: writes
hookdeck-completion.bash (or .zsh) to the current directory and prints multi-step setup instructions
- After: writes the completion script to stdout; no file created, no instructions
Anyone scripting against the old behavior is affected. Release notes for the next stable release must call this out explicitly. The hookdeck-cli-release skill handles release-note drafting — it should pick this up automatically from the conventional commit, but worth verifying when cutting.
Updated work breakdown
Phase 1 — Preparation ✅
All done; shipped in v2.2.0 via #296.
Phase 2 — Formula authoring ✅
Phase 3 — Submission ✅ (awaiting merge)
Phase 4 — Migration & comms (after homebrew-core merge)
Tracked separately in #297 — covers in-repo README updates, the version-update model documentation, tap_migrations.json for the existing tap, the decision about whether to keep/drop the stable hookdeck formula in the tap, hookdeck.com docs, marketing/onboarding updates, and release-notes announcement. Kept separate from #295 because the work spans different teams (docs, marketing) and shouldn't start until the homebrew-core PR is actually accepted.
Ongoing maintenance after acceptance
- BrewTestBot auto-detects new GitHub releases via
livecheck :github_latest and opens version-bump PRs. Hands-off in the common case.
- Lag from upstream release → core formula updated: usually hours to a day or two.
- Occasional touch-ups needed if Go toolchain conventions in core change.
Tradeoffs (already discussed in #294)
- Release cadence: core lags our tap by hours/days, not minutes. Acceptable for most users.
- Beta stays in our tap. Beta users still need
brew trust after the 5.2.0 default flip.
- Less control over caveats / install scripts / completions handling — all go through homebrew-core maintainer review.
References
Motivation
Spun out of #294. With Homebrew making
HOMEBREW_REQUIRE_TAP_TRUSTthe default in 5.2.0/6.0.0, every documentedbrew install hookdeck/hookdeck/hookdeckpath will require an explicitbrew truststep from end users.Landing
hookdeckin homebrew-core sidesteps tap-trust entirely for the stable channel — users justbrew install hookdeck. Beta stays in our third-party tap regardless (homebrew-core doesn't accept pre-releases).Current status (2026-06-04)
🎉 MERGED into homebrew-core on 2026-06-04 11:48 UTC: Homebrew/homebrew-core#286152
Approved by maintainer
botantony. Bottles being built/published by BrewTestBot.brew install hookdeck(no tap) will work for end users once bottles are uploaded.Phase 4 (post-acceptance docs/comms) now unblocked — kickoff in #297.
Phase 1 (Preparation) — complete, shipped in v2.2.0:
Squash-merged via #296:
CGO_ENABLED=1on darwin builds in.goreleaser/mac.yml.hookdeck completion --shell <shell>now writes the completion script to stdout (was: wrote a file + printed instructions). Breaking change; called out in v2.2.0 release notes.REFERENCE.mdforgateway connection pause/unpauseargument.Phase 2 (Formula authoring) — complete. Final formula submitted in the PR:
Local validation (all green):
HOMEBREW_NO_INSTALL_FROM_API=1 brew install --build-from-source hookdeck— built in 14s, 14.6 MBbrew test hookdeck— exit 0brew style hookdeck— 0 offensesbrew audit --strict --new --online hookdeck— exit 0Phase 3 (Submission) — in flight. PR opened from
leggetter:hookdeck-new→Homebrew/homebrew-core:main. Awaiting maintainer review.Breaking-change callout for release notes
Commit
3d369cechangeshookdeck completion --shell <shell>behavior:hookdeck-completion.bash(or.zsh) to the current directory and prints multi-step setup instructionsAnyone scripting against the old behavior is affected. Release notes for the next stable release must call this out explicitly. The
hookdeck-cli-releaseskill handles release-note drafting — it should pick this up automatically from the conventional commit, but worth verifying when cutting.Updated work breakdown
Phase 1 — Preparation ✅
All done; shipped in v2.2.0 via #296.
Phase 2 — Formula authoring ✅
Formula/h/hookdeck.rbbased on goreleaser/gh patterns.brew audit --strict --new --online hookdeckclean.brew install --build-from-source hookdecksucceeds (14s, 14.6 MB).brew test hookdeckexit 0.brew style hookdeck0 offenses.Homebrew/homebrew-coretoleggetter/homebrew-core.Phase 3 — Submission ✅ (awaiting merge)
main.url+sha256+ version for v2.2.0.hookdeck-newto the fork.hookdeck 2.2.0 (new formula).botantony).Phase 4 — Migration & comms (after homebrew-core merge)
Tracked separately in #297 — covers in-repo README updates, the version-update model documentation,
tap_migrations.jsonfor the existing tap, the decision about whether to keep/drop the stablehookdeckformula in the tap, hookdeck.com docs, marketing/onboarding updates, and release-notes announcement. Kept separate from #295 because the work spans different teams (docs, marketing) and shouldn't start until the homebrew-core PR is actually accepted.Ongoing maintenance after acceptance
livecheck :github_latestand opens version-bump PRs. Hands-off in the common case.Tradeoffs (already discussed in #294)
brew trustafter the 5.2.0 default flip.References
goreleaserformula in homebrew-core — pattern to followghformula in homebrew-core — more complex Go example