feat(installer): opt-in RC release channel for installer + updater - #54
Conversation
Adds a 'stable' (default) / 'rc' release channel so users can track release candidates without leaving the stable line. - release.yml: tags with a prerelease component (e.g. v0.5.0-rc.1) are published as GitHub prereleases, so the stable 'latest' endpoint keeps returning the last stable release. - install.sh: MAESTRO_RELAY_CHANNEL=rc resolves the newest release including prereleases (via /releases) instead of /releases/latest; an explicit MAESTRO_RELAY_VERSION pin still wins. - maestro-relay-ctl: 'update --rc/--stable' and a new 'channel' subcommand persist the preference at $CONFIG_DIR/channel; update now pins the resolved tag and forwards the channel to the installer. - README: documents the stable-vs-RC channel workflow. Verified: bash -n clean on both scripts; channel set/read/env-override/ reject smoke-tested; release.yml parses as valid YAML. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 43 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdds stable/rc release channel support: the GitHub Actions workflow marks hyphenated tags as prereleases, ChangesRC Release Channel
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 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: 3
🤖 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 `@bin/maestro-relay-ctl.sh`:
- Around line 237-245: The installer flow in maestro-relay-ctl update is piping
install.sh directly into bash, which should be removed. Change the update path
to download the release artifact first, verify it with the published tarball
checksum before any execution, and then run only the validated installer logic
from a local file. Keep the fix centered around the current update/install block
that uses curl, env, and bash so the script no longer executes untrusted remote
content.
- Around line 51-71: The channel resolution logic in resolve_channel() only
validates in persist_channel(), so invalid values from MAESTRO_RELAY_CHANNEL or
CHANNEL_FILE can still propagate into cmd_update() and diverge from actual
behavior. Update resolve_channel() to validate any value it reads or receives
against the allowed set (stable, rc) and fall back to a safe default or fail
consistently using the existing die() path; keep persist_channel() validation
as-is and make cmd_update() rely on the normalized result.
In `@install.sh`:
- Around line 25-28: The MAESTRO_RELAY_CHANNEL handling in install.sh currently
treats any non-rc value as stable, so invalid typos silently select the wrong
release stream. Update the channel parsing near the CHANNEL assignment and the
release URL selection logic to validate only stable or rc once up front, fail
fast on anything else, and then reuse that validated invariant in the later
install flow so the stable/rc branching remains explicit and safe.
🪄 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: c5ccb6db-dcbf-4655-bf42-01e41f965901
📒 Files selected for processing (4)
.github/workflows/release.ymlREADME.mdbin/maestro-relay-ctl.shinstall.sh
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 23c96f48f0
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
…, validation Address PR #54 review findings: - ctl cmd_update: an explicit MAESTRO_RELAY_VERSION pin now wins over channel resolution (restores the documented exact-version update path) (Codex P2) - install.sh: persist the active channel to $CONFIG_DIR/channel on every install so fresh MAESTRO_RELAY_CHANNEL=rc installs stay on rc across later 'maestro-relay-ctl update' runs (Codex P2) - install.sh: reject an invalid MAESTRO_RELAY_CHANNEL up front (CodeRabbit) - ctl resolve_channel: normalize an unrecognized env/file channel to 'stable' with a warning so reported state and behavior never diverge; explicit sets still hard-fail via persist_channel (CodeRabbit) Verified: bash -n clean; channel normalize/reject and version-pin paths smoke-tested; build clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Thanks — addressed in
On "stop piping the installer into bash" (CodeRabbit, Major): acknowledged, but declined for this PR — Verified: |
Tags carrying a prerelease component (e.g. v0.5.0-rc.1) are marked as GitHub prereleases so the stable /releases/latest endpoint keeps returning the last stable release; RC-channel installs opt in explicitly. Mirrors the change landed on main in #54. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Cherry-pick of #54 onto rc so RC tarballs carry the channel-aware install.sh + maestro-relay-ctl (MAESTRO_RELAY_CHANNEL, 'channel' subcommand, 'update --rc', version-pin precedence). Verified locally: build clean, 316/316 tests, bash -n clean.
Opt-in RC release channel (installer + updater)
Lets users track release candidates without leaving the stable line, so RC builds cut from
rccan be dogfooded before a stable promotion.Changes
.github/workflows/release.yml— tags carrying a prerelease component (e.g.v0.5.0-rc.1) are published as GitHub prereleases (prerelease: ${{ contains(github.ref_name, '-') }}). The stable/releases/latestendpoint keeps returning the last stable release, so existing users are unaffected.install.sh— newMAESTRO_RELAY_CHANNEL(stabledefault |rc). Onrc,resolve_releasepicks the newest release including prereleases (via/releases, newest-first) instead of/releases/latest. An explicitMAESTRO_RELAY_VERSIONpin still takes precedence.bin/maestro-relay-ctl.sh—update --rc/update --stable, plus a newchannelsubcommand. The preference persists at$CONFIG_DIR/channel;updatenow pins the resolved tag (MAESTRO_RELAY_VERSION=$tag) and forwards the channel to the installer. Precedence: env override → persisted file →stable.Usage
Verification
bash -nclean oninstall.shandmaestro-relay-ctl.shchannelset/read/env-override/reject smoke-testedrelease.ymlparses as valid YAMLFollow-up (not in this PR)
To actually cut the first RC from
rc, the samerelease.ymlprerelease change must also exist on thercbranch (that's where RC tags are built), andrc'spackage.jsonversion bumped toX.Y.Z-rc.N. Happy to open that as a separaterc-targeted change.🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Bug Fixes
Documentation