Repository navigation
Speed up macOS CI lanes - #6490
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughThe CI workflow gains a configurable ChangesApp-host focused regression shard gating
Nightly combined universal build
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related issues
Possibly related PRs
Poem
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 error)
✅ Passed checks (22 passed)
✨ 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.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 1244993. Configure here.
Greptile SummaryThis PR speeds up macOS CI by parallelizing two previously sequential nightly build steps and rebalancing app-host unit-test shards. No production Swift or runtime code is touched — all changes are confined to GitHub Actions YAML and one test-guard shell script.
Confidence Score: 5/5Safe to merge — workflow-only changes with no production Swift or runtime code affected. The parallelization in nightly.yml uses proper No files require special attention. Important Files Changed
Sequence Diagram%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant GHA as GitHub Actions
participant Helper as build-ghostty-cli-helper.sh (background)
participant XC as xcodebuild (Release)
participant Inject as Inject universal helper
GHA->>Helper: launch in background subshell → HELPER_LOG
GHA->>XC: "CMUX_SKIP_ZIG_BUILD=1 xcodebuild (parallel)"
XC-->>GHA: APP_STATUS
GHA->>Helper: wait $HELPER_PID → HELPER_STATUS
GHA->>GHA: cat $HELPER_LOG (surface output)
GHA->>GHA: "fail if APP_STATUS != 0"
GHA->>GHA: "fail if HELPER_STATUS != 0"
GHA->>Inject: install -m 755 /tmp/cmux-ghostty-helper-universal $DEST
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
participant GHA as GitHub Actions
participant Helper as build-ghostty-cli-helper.sh (background)
participant XC as xcodebuild (Release)
participant Inject as Inject universal helper
GHA->>Helper: launch in background subshell → HELPER_LOG
GHA->>XC: "CMUX_SKIP_ZIG_BUILD=1 xcodebuild (parallel)"
XC-->>GHA: APP_STATUS
GHA->>Helper: wait $HELPER_PID → HELPER_STATUS
GHA->>GHA: cat $HELPER_LOG (surface output)
GHA->>GHA: "fail if APP_STATUS != 0"
GHA->>GHA: "fail if HELPER_STATUS != 0"
GHA->>Inject: install -m 755 /tmp/cmux-ghostty-helper-universal $DEST
Reviews (3): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile |
1244993 to
80b3895
Compare
…s-nightly-app-host-tests
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 `@tests/test_nightly_universal_build.sh`:
- Around line 23-32: The awk pattern matching in this block validates that the
universal helper is built and various assertions are checked, but does not
verify that a non-zero HELPER_STATUS exit code is actually enforced to fail the
workflow step. Add a new pattern matcher variable (similar to saw_build,
saw_arm64_assert, saw_x86_assert, saw_wait, and saw_log) that searches for the
pattern or mechanism in the workflow that enforces the HELPER_STATUS failure
gate, then include this new variable in the final END block exit condition
alongside the existing saw_build, saw_arm64_assert, saw_x86_assert, saw_wait,
and saw_log checks to ensure the regression test truly validates combined
exit-code handling.
🪄 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: ASSERTIVE
Plan: Pro
Run ID: 581cafd9-239a-484d-8a91-462db8f58e31
📒 Files selected for processing (3)
.github/workflows/ci.yml.github/workflows/nightly.ymltests/test_nightly_universal_build.sh
| /^ - name: Build universal nightly app and Ghostty CLI helper \(Release\)/ { in_helper=1; next } | ||
| in_helper && /^ - name:/ { in_helper=0 } | ||
| in_helper && /build-ghostty-cli-helper\.sh --universal/ { saw_build=1 } | ||
| in_helper && /helper missing arm64 slice/ { saw_arm64_assert=1 } | ||
| in_helper && /helper missing x86_64 slice/ { saw_x86_assert=1 } | ||
| END { exit !(saw_build && saw_arm64_assert && saw_x86_assert) } | ||
| in_helper && /wait "\$HELPER_PID"/ { saw_wait=1 } | ||
| in_helper && /cat "\$HELPER_LOG"/ { saw_log=1 } | ||
| END { exit !(saw_build && saw_arm64_assert && saw_x86_assert && saw_wait && saw_log) } | ||
| ' "$WORKFLOW_FILE"; then | ||
| echo "FAIL: nightly workflow must build and verify the real universal Ghostty helper" | ||
| echo "FAIL: nightly workflow must build and verify the real universal Ghostty helper alongside the app build" |
There was a problem hiding this comment.
Assert helper failure is enforced, not just observed.
This block verifies wait and log output, but not that a non-zero HELPER_STATUS must fail the step. Add a matcher for the helper failure gate so the regression test truly protects combined exit-code handling.
Proposed patch
if ! awk '
/^ - name: Build universal nightly app and Ghostty CLI helper \(Release\)/ { in_helper=1; next }
in_helper && /^ - name:/ { in_helper=0 }
in_helper && /build-ghostty-cli-helper\.sh --universal/ { saw_build=1 }
in_helper && /helper missing arm64 slice/ { saw_arm64_assert=1 }
in_helper && /helper missing x86_64 slice/ { saw_x86_assert=1 }
in_helper && /wait "\$HELPER_PID"/ { saw_wait=1 }
in_helper && /cat "\$HELPER_LOG"/ { saw_log=1 }
- END { exit !(saw_build && saw_arm64_assert && saw_x86_assert && saw_wait && saw_log) }
+ in_helper && /if \[ "\$HELPER_STATUS" -ne 0 \]; then/ { saw_helper_fail_gate=1 }
+ in_helper && /exit "\$HELPER_STATUS"/ { saw_helper_fail_exit=1 }
+ END { exit !(saw_build && saw_arm64_assert && saw_x86_assert && saw_wait && saw_log && saw_helper_fail_gate && saw_helper_fail_exit) }
' "$WORKFLOW_FILE"; then🤖 Prompt for 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.
In `@tests/test_nightly_universal_build.sh` around lines 23 - 32, The awk pattern
matching in this block validates that the universal helper is built and various
assertions are checked, but does not verify that a non-zero HELPER_STATUS exit
code is actually enforced to fail the workflow step. Add a new pattern matcher
variable (similar to saw_build, saw_arm64_assert, saw_x86_assert, saw_wait, and
saw_log) that searches for the pattern or mechanism in the workflow that
enforces the HELPER_STATUS failure gate, then include this new variable in the
final END block exit condition alongside the existing saw_build,
saw_arm64_assert, saw_x86_assert, saw_wait, and saw_log checks to ensure the
regression test truly validates combined exit-code handling.

Summary
Testing
Need help on this PR? Tag
/codesmithwith what you need. Autofix is disabled.Note
Low Risk
Changes are limited to CI workflow timing and shard placement; release artifacts and regression gates stay the same, with no application or security logic touched.
Overview
Nightly no longer runs the universal Ghostty CLI helper as a separate step before the Release app build. One step starts
build-ghostty-cli-helper.sh --universalin the background (withHELPER_DEVELOPER_DIR), runsxcodebuildwithCMUX_SKIP_ZIG_BUILD=1, then waits on the helper, prints its log, and fails if either side failed. Injection and arch checks are unchanged.App-host unit tests drop Zig install and the Zig package cache on every shard (tests already use prebuilt GhosttyKit and
CMUX_SKIP_ZIG_BUILD=1). Focused one-off gates (split-theme, proxy mirror, Option/Alt mods, theme picker helper, CLI no-socket regressions) move off shard 1 onto shard 4 viaCMUX_APP_HOST_FOCUSED_REGRESSION_SHARDandfromJSON(env.…)in stepifconditions.tests/test_nightly_universal_build.shnow asserts the combined nightly step includes parallel helper build,wait, and log output.Reviewed by Cursor Bugbot for commit 6288038. Bugbot is set up for automated code reviews on this repo. Configure here.
Summary by cubic
Speed up macOS CI by building the Nightly Release app and universal Ghostty CLI helper in one parallel step, and by rebalancing app-host unit-test shards while removing unused Zig setup. Satisfies the task to speed up Nightly macOS builds and app-host unit tests.
DEVELOPER_DIRoverride; wait and show log; assertarm64/x86_64; fail if either build fails; useCMUX_SKIP_ZIG_BUILD=1only for the in-Xcode helper; updatetests/test_nightly_universal_build.shto verify combined step, wait, and log.CMUX_APP_HOST_FOCUSED_REGRESSION_SHARDandfromJSON(env.CMUX_APP_HOST_FOCUSED_REGRESSION_SHARD); drop Zig install and cache; keepCMUX_SKIP_ZIG_BUILD=1.Written for commit 6288038. Summary will update on new commits.
Summary by CodeRabbit