Skip to content

Submit hookdeck to homebrew-core for the stable channel #295

@leggetter

Description

@leggetter

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-newHomebrew/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 ✅

  • Draft Formula/h/hookdeck.rb based on goreleaser/gh patterns.
  • brew audit --strict --new --online hookdeck clean.
  • brew install --build-from-source hookdeck succeeds (14s, 14.6 MB).
  • brew test hookdeck exit 0.
  • brew style hookdeck 0 offenses.
  • Fork Homebrew/homebrew-core to leggetter/homebrew-core.

Phase 3 — Submission ✅ (awaiting merge)

  • Merge #296 to main.
  • Cut v2.2.0 — rolls v2.1.2-beta.1's auth-recovery work and the prep PR into a single GA.
  • Update formula url + sha256 + version for v2.2.0.
  • Push formula branch hookdeck-new to the fork.
  • Open PR: Homebrew/homebrew-core#286152hookdeck 2.2.0 (new formula).
  • Maintainer review (no change requests; approved by botantony).
  • Merged 2026-06-04 11:48 UTC.
  • Bottles published by BrewTestBot.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions