Skip to content

feat(release): generate the Homebrew formula - #65

Merged
vyncint merged 1 commit into
mainfrom
homebrew-formula
Aug 23, 2026
Merged

feat(release): generate the Homebrew formula#65
vyncint merged 1 commit into
mainfrom
homebrew-formula

Conversation

@vyncint

@vyncint vyncint commented Aug 23, 2026

Copy link
Copy Markdown
Owner

The tap exists, the formula is installed, and brew install vyncint/tap/mossaic works:

$ brew install vyncint/tap/mossaic
$ mossaic-art --version
mossaic-art 0.6.2
$ brew test vyncint/tap/mossaic
==> Testing vyncint/tap/mossaic     (3 assertions, exit 0)

brew audit --strict is clean — it took two rounds: version is redundant when it can be scanned from the URL, and livecheck has to precede the platform blocks.

Generated, not hand-maintained

The tap already existed for another project, and its README states the rule: "generated by GoReleaser from each tool's release workflow. Edit them there, not here." mossaic isn't GoReleaser, but the principle holds — a hand-edit is overwritten by the next release, silently.

So binaries.yml gains a formula job that builds the file from the .sha256 files the matrix just produced. That ordering matters: the formula cannot describe an archive that was never built, because if a target failed to upload there is no checksum and the job fails rather than publishing a formula that 404s. Given last release shipped without a Windows zip, that is not hypothetical.

The generator was checked against reality

A generator that emits something different from the formula I verified would be worthless. So I ran it against the real v0.6.2 release and diffed it against the formula brew actually installed:

only two comment lines wrapped differently; the code was byte-identical

I then resynced the tap to the generator's exact wrapping, re-audited and re-tested, so the first automated run is a no-op rather than a diff nobody asked for.

Setup

Needs HOMEBREW_TAP_TOKEN — a PAT with write access to vyncint/homebrew-tap. Without it the job logs a notice and exits clean, same as notify-testing-repo: a formula one version behind is a much smaller problem than a release that fails after the crate is already on crates.io.

Until that secret exists the tap stays on 0.6.2, which is current — so nothing is broken in the meantime.

README

The brew install line is back, and this time it has been run. Four routes now, only the last needing Rust.

The tap exists and the formula is installed and tested:
brew audit --strict is clean, brew test passes, and the three binaries
plus a copy of the art templates land where the formula says.

Generated rather than hand-maintained, for the reason the tap's own
README already gives about its casks: a hand-edit is overwritten by the
next release, silently. The checksums come from the .sha256 files the
matrix produced, so the formula cannot describe an archive that was never
built -- if a target failed to upload, the job fails rather than
publishing a formula that 404s.

The generator was checked against the formula that brew actually
installed, and reproduces it byte for byte. The tap was resynced to match
its wrapping so the first automated run is a no-op rather than a diff
nobody asked for.

Best-effort like the release notification: without HOMEBREW_TAP_TOKEN it
says so and exits clean. A formula one version behind is a smaller
problem than a release that fails after the crate is already published.

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
@vyncint
vyncint merged commit 34b0f2b into main Aug 23, 2026
11 checks passed
@vyncint
vyncint deleted the homebrew-formula branch August 23, 2026 07:55
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