Skip to content

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

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-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 βœ…

  • 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#286152 β€” hookdeck 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions