Skip to content

Move the cask to the org-wide tap and fail loudly without the token - #175

Merged
kaidesu merged 1 commit into
1.0from
homebrew-tap-migration
Aug 31, 2026
Merged

kaidesu merged 1 commit into
1.0from
homebrew-tap-migration

Conversation

@kaidesu

@kaidesu kaidesu commented Aug 30, 2026

Copy link
Copy Markdown
Member

What changed

  • .goreleaser.yml: the cask now goes to ghost-language/homebrew-tap instead of ghost-language/homebrew-ghost.
  • .goreleaser.yml: skip_upload is gone, so the push always happens.
  • .github/workflows/release.yml: verify checks HOMEBREW_TAP_TOKEN is present on release events, before anything is built.
  • Dropped a stale comment about deleting Formula/ghost.rb from the tap — that's done.

Why the shared tap

Lumen ships a cask in ghost-language/lumen#19, and a tap per project means users tap twice for two projects from the same org. One brew tap ghost-language/tap now covers both, and anything else that ships a binary later.

brew tap ghost-language/tap
brew install --cask ghost-language/tap/ghost

Why the silent skip had to go

skip_upload was derived from the presence of the token:

skip_upload: '{{ if .Env.HOMEBREW_TAP_TOKEN }}false{{ else }}true{{ end }}'

The intent was reasonable — don't fail a release whose binaries are already published. The effect was worse than a failure. v1.0.0-beta.3 released with no token set: the run went green, nine archives published, and the tap was never touched. Nothing in the log said so above debug level, and it only surfaced when brew install found nothing.

Checking in verify inverts that. A missing token now costs one job that hasn't built anything, and the error says exactly what to add.

For existing users

Anyone tapped on ghost-language/homebrew-ghost keeps the 1.0.0-beta.3 cask sitting there — it stays installable. They need to re-tap to receive anything newer:

brew untap ghost-language/ghost
brew tap ghost-language/tap

Given 1.0.0-beta.3 is a few hours old, that population is approximately nobody.

Note

HOMEBREW_TAP_TOKEN currently on this repo is scoped to homebrew-ghost. It needs re-scoping to homebrew-tap, or the first release after this merges fails in verify — loudly, which is the point.

🤖 Generated with Claude Code

Lumen is about to ship a cask too, and a tap per project means a user
tapping twice for two projects from the same org. `brew tap
ghost-language/tap` now covers both.

The silent skip goes with it. Deriving skip_upload from the presence of
HOMEBREW_TAP_TOKEN meant a release with no token produced a green run,
published binaries, and a tap that was never touched - which is exactly
what v1.0.0-beta.3 did, and it was invisible until someone ran `brew
install` and found nothing there. The token is now checked in verify,
before any archive is built, so the failure is loud, early, and free.

Existing users of ghost-language/homebrew-ghost keep the beta.3 cask that
is already there; they need to re-tap to get anything newer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@kaidesu
kaidesu merged commit b263eb1 into 1.0 Aug 31, 2026
2 checks passed
@kaidesu
kaidesu deleted the homebrew-tap-migration branch August 31, 2026 00:26
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