T-824: Homebrew install via automated tap updates#91
Conversation
Add smolspec, decision log, task list, and manual-steps checklist for publishing rune via Homebrew. The design appends a homebrew job to release.yml with needs: releases-matrix so it runs only after all four platform tarballs are uploaded, enables sha256sum: true on the existing release step so sidecar checksums can be consumed without redownloading tarballs, validates the rendered formula with brew audit --strict and brew test on macos-latest, and pushes to ArjenSchwarz/homebrew-rune via a fine-grained PAT (HOMEBREW_TAP_TOKEN). Manual prerequisites (create tap repo, generate PAT, configure secret, cut v1.3.1 to bootstrap) are tracked in specs/homebrew-install/manual-steps.md to keep tasks.md focused on coding work. Follow-up tickets T-872 (Rune) and T-873 (Fog) cover macOS binary signing/notarisation, which is out of scope here.
- Enable sha256sum: true on the go-release-action step so the matrix publishes .sha256 sidecars for every platform tarball. - Add a workflow_dispatch trigger with a `tag` input and gate releases-matrix to release events only, allowing manual re-runs of the homebrew job against an existing release without rebuilding binaries. - Add a macos-latest homebrew job that downloads the sha256 sidecars, parses the digests, renders Formula/rune.rb via heredoc, and validates with `brew audit --strict --online`, `brew install`, and `brew test rune` before touching the tap. - Check out ArjenSchwarz/homebrew-rune with HOMEBREW_TAP_TOKEN, commit the rendered formula idempotently (no-op when unchanged), and push. Serialise runs with a `homebrew-<repo>` concurrency group so parallel releases cannot clobber each other. - Document `brew install arjenschwarz/rune/rune` in README.
- Push explicit branch (HEAD:main) to the tap so tap default-branch renames or detached-like checkout state cannot silently redirect the formula commit. - Clean up garbled Blocked-by metadata on tasks.md task 3 left over from an earlier rune edit. - Add specs/homebrew-install/implementation.md with beginner, intermediate, and expert explanations plus a completeness assessment mapping every MUST/SHOULD requirement to its implementation site.
- batch-command: document phase marker adjustment bug (T-787) and the phase detection gap that drops markers on plain remove operations (T-820) - config-discovery: note that home config tests must isolate HOME (T-812) - dependencies: document that remove paths bypass RemoveTaskWithDependents and the title-output ordering issue (T-801) - phase-add: new note on AddTaskToPhase dropping extended fields (T-836) - testing: new note on shared command state leakage (T-857) and current known test failures (T-856, T-859)
Code Review: T-824 — Homebrew install via automated tap updatesOverviewThis PR adds an automated Homebrew formula pipeline to the release workflow: enables IssuesMinor (worth fixing before merge)Heredoc indentation produces a formula with leading whitespace on every line The Fix: either de-indent the heredoc content to column 0 within the YAML (using a block scalar trick or a separate script), or accept the cosmetic flaw knowing audit validates it. At minimum, worth a comment that the indentation is intentional/benign. Low (informational)Actions not pinned to commit SHA Both
GitHub Actions bash steps run with CHANGELOG entry length The new Unreleased entry is a dense single-sentence paragraph. Existing entries in this file use brief bullets. Not a functional issue, but inconsistent with the surrounding style. What's working well
SummaryThe implementation is correct and the design decisions are sound. The heredoc indentation issue is the only thing worth actively addressing — it's invisible to |
PR Review Overview - Iteration 1PR: #91 | Branch: T-824/homebrew-install | Date: 2026-04-20 Valid Issues (fixed)None. Invalid/Skipped IssuesHeredoc indentation (Minor — invalid)
Actions not pinned to commit SHA (Low — deferred)
|
|
Claude finished @ArjenSchwarz's task in 2m 29s —— View job PR Review Overview — Iteration 2
Iteration 1 Disposition VerificationAll four dispositions from Iteration 1 are confirmed correct: Heredoc indentation — verified empirically. Python's SHA pinning, Iteration 2: New FindingMinor — Missing
|
Summary
.sha256sidecars for every platform tarball and a new macOShomebrewjob rendersFormula/rune.rb, validates withbrew audit --strict --onlineplusbrew install/brew test, and commits to theArjenSchwarz/homebrew-runetap usingHOMEBREW_TAP_TOKEN.workflow_dispatchtrigger with ataginput let the formula be re-rendered against an existing release without rebuilding binaries; the job is serialised via a concurrency group.brew install arjenschwarz/rune/runepath; spec, decision log, and agent notes are updated.Test plan
homebrewjob renders, audits, and pushesFormula/rune.rbto the tapbrew install arjenschwarz/rune/runefrom the tap succeeds on macOSworkflow_dispatchwith the same tag and verify the commit is skipped (idempotent)