Problem
There is no supported way to install cortextool on macOS or Linux. The README points at the
releases page, so users download an extensionless binary, chmod +x it, and move it onto their
PATH by hand — with no upgrade path and no checksum verification.
Homebrew support existed until 9fbb6fb4, when the brews: block targeting
grafana/homebrew-grafana was dropped during the move from Grafana to cortexproject.
CHANGELOG.md:154 still references it.
Proposal
Create cortexproject/homebrew-tap (public), containing one formula, cortextool:
brew install cortexproject/tap/cortextool
Coverage from the binaries we already publish: macOS arm64, macOS x86_64, Linux x86_64.
Not benchtool (can be added later), and not Linux arm64 — we don't build it (see below).
The tap updates itself. A workflow there runs every 6 hours (plus manual dispatch), reads
our latest release, rewrites the version and the three sha256s from checksums.txt,
installs and brew tests the candidate formula on macOS arm64, macOS x86_64 and Linux
x86_64, and only commits if all three pass.
Why not GoReleaser's brews: block
It's the obvious choice, and it's a dead end:
brews is deprecated — soft since v2.10, hard since v2.16
(deprecations). The deprecated=true schema
tag is present in the goreleaser binary.
- Its replacement,
homebrew_casks, emits a Cask — which is macOS-only. So there is no
forward path from brews to a formula that also serves Linux users.
- It needs a
tar.gz archive id (the needed-for-homebrew pattern we deleted), adding ~6
duplicate assets to every release and changing the asset list people script against.
- It runs inside the single existing goreleaser job, so a tap-push failure — expired
token, deprecation turning fatal — can fail release --clean and abort a release
mid-publish, after the Quay images are already pushed.
- It writes the formula blind. Nobody finds out it's broken until a user runs
brew install.
Impact on this repo
Deliberately minimal — .goreleaser.yml is not modified and no release artifacts change:
README.md / RELEASE.md — document the install and the bump path.
.github/workflows/release.yml — one appended job, needs: release,
permissions: {}, continue-on-error: true, that fires a repository_dispatch at the tap
so bumps land in ~a minute instead of ≤6h. Optional: gated on a HOMEBREW_TAP_TOKEN
secret; if it's absent or expired the job skips and the tap's schedule still picks the
release up. It can never fail a release.
- Delete the stale untracked
Formula/, HOMEBREW.md, and
scripts/update-homebrew-checksums.sh from a previous attempt.
Questions for maintainers
- Tap repo name —
cortexproject/homebrew-tap (→ brew tap cortexproject/tap), so
non-cortex-tools formulae can live there later? Or homebrew-cortex-tools, scoped to this
repo?
- Who owns it — happy for it to be a
cortexproject repo with the same maintainer set?
benchtool too, or start with cortextool only?
- Linux arm64. We only build
linux/amd64, so Linux ARM users get
Error: cortextool: The x86_64 architecture is required for this software. Worth adding
arm64 to cortextool-linux's goarch in .goreleaser.yml as a follow-up?
HOMEBREW_TAP_TOKEN. Fine to add a fine-grained PAT (Contents: write, scoped to the tap
only) for instant bumps? Or skip it and live with the 6-hourly schedule — zero new secrets?
- homebrew-core eventually, instead of a tap? Realistically that needs the notability bar
plus a build-from-source formula, and it doesn't preclude the tap now.
I have a working implementation ready to push once there's agreement on the above.
Problem
There is no supported way to install
cortextoolon macOS or Linux. The README points at thereleases page, so users download an extensionless binary,
chmod +xit, and move it onto theirPATHby hand — with no upgrade path and no checksum verification.Homebrew support existed until
9fbb6fb4, when thebrews:block targetinggrafana/homebrew-grafanawas dropped during the move from Grafana to cortexproject.CHANGELOG.md:154still references it.Proposal
Create
cortexproject/homebrew-tap(public), containing one formula,cortextool:Coverage from the binaries we already publish: macOS arm64, macOS x86_64, Linux x86_64.
Not
benchtool(can be added later), and not Linux arm64 — we don't build it (see below).The tap updates itself. A workflow there runs every 6 hours (plus manual dispatch), reads
our latest release, rewrites the version and the three
sha256s fromchecksums.txt,installs and
brew tests the candidate formula on macOS arm64, macOS x86_64 and Linuxx86_64, and only commits if all three pass.
Why not GoReleaser's
brews:blockIt's the obvious choice, and it's a dead end:
brewsis deprecated — soft since v2.10, hard since v2.16(deprecations). The
deprecated=trueschematag is present in the goreleaser binary.
homebrew_casks, emits a Cask — which is macOS-only. So there is noforward path from
brewsto a formula that also serves Linux users.tar.gzarchive id (theneeded-for-homebrewpattern we deleted), adding ~6duplicate assets to every release and changing the asset list people script against.
token, deprecation turning fatal — can fail
release --cleanand abort a releasemid-publish, after the Quay images are already pushed.
brew install.Impact on this repo
Deliberately minimal —
.goreleaser.ymlis not modified and no release artifacts change:README.md/RELEASE.md— document the install and the bump path..github/workflows/release.yml— one appended job,needs: release,permissions: {},continue-on-error: true, that fires arepository_dispatchat the tapso bumps land in ~a minute instead of ≤6h. Optional: gated on a
HOMEBREW_TAP_TOKENsecret; if it's absent or expired the job skips and the tap's schedule still picks the
release up. It can never fail a release.
Formula/,HOMEBREW.md, andscripts/update-homebrew-checksums.shfrom a previous attempt.Questions for maintainers
cortexproject/homebrew-tap(→brew tap cortexproject/tap), sonon-
cortex-toolsformulae can live there later? Orhomebrew-cortex-tools, scoped to thisrepo?
cortexprojectrepo with the same maintainer set?benchtooltoo, or start withcortextoolonly?linux/amd64, so Linux ARM users getError: cortextool: The x86_64 architecture is required for this software.Worth addingarm64tocortextool-linux'sgoarchin.goreleaser.ymlas a follow-up?HOMEBREW_TAP_TOKEN. Fine to add a fine-grained PAT (Contents: write, scoped to the taponly) for instant bumps? Or skip it and live with the 6-hourly schedule — zero new secrets?
plus a build-from-source formula, and it doesn't preclude the tap now.
I have a working implementation ready to push once there's agreement on the above.