Ship all four checksums, or none of them installed
A generic Homebrew bump action patched only one of four platform checksums per release, silently breaking brew install on three targets since v0.2.4. If you ship N platforms, own the checksum step and patch all N from the canonical SHA256SUMS in one atomic write.
Janus ships a compiled binary to four platforms through a Homebrew tap.
A popular third-party action, mislav/bump-homebrew-formula-action,
was patching only a single platform’s sha256 block in the formula on
each release and leaving the other three stale. brew install had been
failing on three of four targets since v0.2.4, silently — nothing in the
release pipeline ran an install per platform, so the breakage never
surfaced. The fix (commit 2722d82) replaced the action with a custom
Bun script in src/core/homebrew-formula.ts that reads SHA256SUMS
from the release artifact and patches the version plus all four platform
checksums in one write.
Generic automation is written for the common case
The bump action isn’t broken. It does exactly what a single-artifact
release needs: patch the one sha256 it knows about. A multi-platform
distribution is not the common case, so the action patched its one
block and left the rest pointing at the previous release. This is the
quiet failure mode of reaching for a generic tool — it doesn’t error on
the shape it wasn’t built for, it half-succeeds. Three stale checksums
look exactly like three untouched lines.
The blast radius is the number of platforms you didn’t test
The same formula served all four platforms, and three of them pointed
at stale checksums — un-installable — while the one the action happened
to patch still worked. Nothing in the release pipeline ran brew install on any platform, so the corruption accumulated release over
release with no signal. When a build step touches N outputs, an install
smoke test that covers one of them — or none — certifies nothing about
the other N-1.
Own the step that spans your outputs
The correction was small in code and decisive in principle: read the
canonical SHA256SUMS the release already produces, and patch every
platform’s block from it atomically. The formula is now derived from
one source of truth instead of stitched from a per-platform action that
only ever saw one. The rule generalizes past Homebrew — any release
step that fans out across platforms is yours to own, because a generic
tool will patch what it recognizes and silently leave the rest behind.
It’s marked as an ADR candidate for that reason.