ci: publish homebrew formula for every stable release#2072
Conversation
The workflow ran on every push and dispatched the homebrew-tap "akash" workflow with an undefined RELEASE_TAG, flooding the tap with failing empty-tag runs. The notify-homebrew job in release.yaml is the actual dispatch path for releases. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
💤 Files with no reviewable changes (1)
WalkthroughSimplifies release CI by gating Homebrew notifications solely on prerelease output; changes Makefile stable-flag logic to depend on prerelease only; updates changelog script comments and tag-filter regexes; and fixes tag minor-parity exit behavior so odd minors return non-zero. ChangesRelease flow and tooling
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/release.yaml:
- Line 97: The workflow gate currently uses
contains(steps.check.outputs.is_prerelease, '1') which performs substring
matching; replace it with a strict equality comparison so only the exact
sentinel triggers the job — change the if expression to use
steps.check.outputs.is_prerelease == '1' (i.e., replace contains(...) with a
strict == '1' check) in the if: conditional for the stable-tag gating.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: df2ca7b7-5b75-4686-886a-d9291d008fae
📒 Files selected for processing (3)
.github/workflows/dispatch.yaml.github/workflows/release.yamlscript/mainnet-from-tag.sh
💤 Files with no reviewable changes (1)
- .github/workflows/dispatch.yaml
The notify-homebrew gate required mainnet-from-tag.sh to pass, which implements the obsolete even-minor-is-mainnet convention. Mainnet upgrades have shipped with odd minors since v1.1.0, so stable releases such as v2.1.0 were silently skipped and the tap stayed at v2.0.1. Formulas must publish for every stable tag and never for prereleases, matching the equivalent gate in the provider repo. Compare the gate output with strict equality so script failures fail closed; contains() would also match error output such as exit code 127. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
0d3dda4 to
a3f9ccf
Compare
IS_STABLE required IS_MAINNET, which uses the obsolete even-minor-is-mainnet convention, so images for odd-minor stable releases such as v2.1.0 were published as :latest instead of :stable. Derive IS_STABLE from the prerelease check alone. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
a3f9ccf to
9e64460
Compare
The tag-filter regexes restricted the changelog baseline to tags with the same minor-version parity per the obsolete convention. Release notes for v2.1.0 were therefore generated against v1.1.1 instead of v2.0.1. Filter only by stable vs prerelease, deriving the patterns from semver_funcs.sh instead of hardcoding them. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
The even-minor-is-mainnet convention is dead since v1.1.0; the release workflow, Makefile, and genchangelog no longer consume this script. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
9e64460 to
2a18256
Compare
Problem
The homebrew tap stopped receiving
akashformula updates after v2.0.1 (2026-03-23). v2.1.0 was released on 2026-06-08 but never reached the tap.Root cause
The
notify-homebrewjob gates the tap dispatch onscript/mainnet-from-tag.sh, which implements the old even minor = mainnet convention. That convention is obsolete: mainnet upgrades have shipped with odd minors since v1.1.0 (seenet/mainnet/upgrades/— v1.1.0, v2.1.0). As a result the dispatch step was silentlyskippedfor v2.1.0 (run) — and historically for all of v1.1.x as well (the tap has no v1.1.x entry).The same dead convention affects two other release paths (fixed here as well):
IS_STABLErequiredIS_MAINNET, so v2.1.0's image was published as:latestinstead of:stable(Makefile →make/releasing.mk→.goreleaser.yaml).genchangelog.shrestricted the changelog baseline to tags with the same minor parity, so v2.1.0's notes were generated against v1.1.1 instead of v2.0.1.Release policy per PM: formulas publish for every stable tag, never for prereleases.
Changes
release.yaml: gate the homebrew notify only onis_prerelease.sh(strict equality so script failures fail closed), matching the equivalent gate in the provider repo. Prereleases (rc/alpha/aN) still never publish.dispatch.yaml: it fired on every push with an undefinedRELEASE_TAG, flooding the tap with failing empty-tag dispatches (e.g. run).notify-homebrewinrelease.yamlis the real dispatch path.Makefile: deriveIS_STABLEfrom the prerelease check alone, so every stable release publishes:stabledocker images.genchangelog.sh: filter changelog tags only by stable vs prerelease, removing the even/odd parity matching.script/mainnet-from-tag.sh: no consumers remain.