Skip to content

feat(release): publish a Homebrew tap on every release - #29

Merged
NikitaMikhailov merged 1 commit into
mainfrom
feat/homebrew-tap
Sep 9, 2026
Merged

NikitaMikhailov merged 1 commit into
mainfrom
feat/homebrew-tap

Conversation

@NikitaMikhailov

Copy link
Copy Markdown
Owner

Summary

Publishes a formula to NikitaMikhailov/homebrew-tap on every release, via GoReleaser's brews:. brew install nikitamikhailov/tap/dashsync works after this.

brews, not homebrew_casks, deliberately — brews is deprecated in the pinned GoReleaser version, but its documented replacement (homebrew_casks) is macOS-only with no Linux/Linuxbrew support at all, and dashsync ships Linux binaries as a first-class target. Switching would silently drop Linux Homebrew users to satisfy a linter-shaped concern. See docs/decisions/011.

Consequence: goreleaser check was removed from ci.yml — it fails unconditionally (exit 2, no suppression flag) on the deprecated-but-deliberately-kept brews field, regardless of whether anything's actually broken. The existing docker-build-check job's release --snapshot --skip=publish run already exercises the same config more thoroughly (it builds every target, not just checks schema) and only warns on the deprecation — verified this holds for real errors too by injecting a deliberate typo and confirming both check and the snapshot build fail identically on it.

Test plan

  • New test proves .goreleaser.yaml's formula description actually matches root.go's Short field, rather than trusting two manual copies not to drift.
  • Reviewer subagent independently verified: homebrew_casks's Linux gap (fetched GoReleaser's docs/schema directly), check's unconditional failure, that a real config error still fails both check and snapshot mode identically, and the generated formula covers all 4 platform combinations correctly with no token leakage anywhere.
  • What's honestly untested: the actual push to homebrew-tap needs the real token, which no local/CI dry run exercises — documented plainly in the ADR rather than assumed to work. Will watch the first real tag push closely.
  • go build/go test ./... -race/golangci-lint run all clean.

Review findings on the Homebrew tap change:
- Added a test proving .goreleaser.yaml's brews[0].description actually
  matches root.go's Short field, instead of relying on two copies never
  drifting apart by discipline alone -- confirmed it fails if either
  string changes without the other.
- ADR 011 now says plainly that the actual push to homebrew-tap is
  untested end-to-end (the repo is real but empty, and --skip=publish
  never exercises the real token) -- the same category of gap the Docker
  image's QEMU/buildx issue turned out to be, caught only by watching
  the first real run instead of assuming success from local testing.
@NikitaMikhailov
NikitaMikhailov merged commit d67cea9 into main Sep 9, 2026
10 checks passed
@NikitaMikhailov
NikitaMikhailov deleted the feat/homebrew-tap branch September 9, 2026 14:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant