Skip to content

Improve macOS CI runner fallbacks - #4922

Merged
lawrencecchen merged 2 commits into
mainfrom
fix-e2e-runner-fallbacks
May 28, 2026
Merged

lawrencecchen merged 2 commits into
mainfrom
fix-e2e-runner-fallbacks

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented May 28, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • use GitHub-hosted macOS Intel runners for pull-request macOS CI while keeping Blacksmith defaults for push/nightly paths
  • add visible run names, duplicate-queue cancellation, and GitHub-hosted fallback choices to manual E2E runs
  • add GitHub-hosted fallback choices to activation-performance dispatch runs
  • keep runner-specific SwiftPM/DerivedData cache keys and extend the runner guard so this policy does not regress

Validation

  • ./tests/test_ci_self_hosted_guard.sh
  • actionlint -oneline .github/workflows/ci.yml .github/workflows/perf-activation.yml .github/workflows/test-e2e.yml
  • git diff --check

Summary by CodeRabbit

  • Tests
    • Improved E2E and UI test reliability by expanding macOS runner options, strengthening workflow validation, and making Xcode discovery more robust across jobs.
    • UI test execution now forwards test-only selections more reliably and TCC permission steps will fail fast instead of being ignored.
  • Chores
    • Workflows build dynamic run names, cancel duplicate runs for the same runner/ref/filter, and unify runner/cache selection and cache keys for consistent builds.
  • Perf
    • Benchmark output is written directly to perf results for easier consumption.

Review Change Stack


Note

Low Risk
Changes are limited to CI YAML, shell guards, and actionlint config; no application runtime or auth logic is modified.

Overview
macOS CI workflows now pick the newest installed Xcode with find + sort + tail instead of ls/glob ordering, applied consistently across build, test, release, nightly, E2E, and compat jobs.

Release signal: ci.yml release-build adds a post-build step that checks the Release app, bundled cmux CLI, and ghostty helper are executable and universal (lipo -verify_arch arm64 x86_64). tests/test_ci_self_hosted_guard.sh enforces that plus the Xcode-selection rule.

E2E / manual runs: test-e2e.yml gets a dynamic run-name, concurrency that cancels duplicate queued runs for the same runner/ref/test filter, Depot runner options stay, TCC screen-recording no longer uses continue-on-error, and xcodebuild passes -only-testing via a quoted argument (same fix in test-depot.yml).

Other: New .github/actionlint.yaml whitelists Warp/Depot self-hosted labels; nightly env exports are batched; minor comment/loop cleanups in ci.yml.

Reviewed by Cursor Bugbot for commit e8a8546. Bugbot is set up for automated code reviews on this repo. Configure here.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@vercel

vercel Bot commented May 28, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment May 28, 2026 6:23am
cmux-staging Building Building Preview, Comment May 28, 2026 6:23am

@coderabbitai

coderabbitai Bot commented May 28, 2026 •

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adjusts macOS runner selection and cache keys across CI workflows, replaces fragile Xcode app globbing with find/sort pipelines, adds run naming and concurrency to the E2E workflow, ensures xcodebuild receives ONLY_TESTING as a single argument, and adds guard tests validating the E2E workflow metadata and runner fallbacks.

Changes

CI & workflow updates

Layer / File(s) Summary
Runner selection and cache key updates
.github/workflows/ci.yml
Jobs' runs-on expressions become event-conditional (PR → macos-*, otherwise blacksmith-*); DerivedData and Swift package cache keys/restore-keys include the runner selector and extra hash inputs; two display loops use _ as the unused variable.
Xcode discovery replacement
.github/workflows/ci.yml, .github/workflows/perf-activation.yml, .github/workflows/test-e2e.yml, .github/workflows/release.yml, .github/workflows/nightly.yml, .github/workflows/test-depot.yml, .github/workflows/build-ghosttykit.yml, .github/workflows/ci-macos-compat.yml, .github/workflows/tmux-corpus.yml
Replaces /Applications/Xcode*.app globbing with find + sort + tail pipelines to select an Xcode*.app consistently, preserving failure behavior when none is found.
Perf activation runner/input and output tweaks
.github/workflows/perf-activation.yml
Extends workflow_dispatch runner options and makes runs-on conditional for PRs; aligns Swift package cache keys with runner expression; writes benchmark output via tee.
E2E workflow run naming, concurrency, and quoting
.github/workflows/test-e2e.yml
Adds dynamic run-name interpolating inputs.test_filter, runner label, and ref; expands runner choices and configures concurrency grouping by runner/ref/test_filter with cancel-in-progress: true; ensures "$ONLY_TESTING" is passed as a single xcodebuild argument item.
Test-depot UI quoting
.github/workflows/test-depot.yml
Passes ONLY_TESTING as a quoted array element in the xcodebuild command to keep -only-testing:... as one parameter.
Nightly metadata env consolidation
.github/workflows/nightly.yml
Batches multiple echo >> "$GITHUB_ENV" writes into one block and reorders assignment/export for nightly variables.
CI self-hosted guard: E2E workflow validation
tests/test_ci_self_hosted_guard.sh
Adds E2E_FILE and check_e2e_runner_fallbacks to assert run-name, concurrency cancellation, inputs.test_filter, normalized ref usage, and presence of fallback runner labels; invokes the check in the existing guard sequence.

Estimated Code Review Effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly Related PRs

  • manaflow-ai/cmux#4887: Overlaps on CI cache/DerivedData keying changes touching .github/workflows/ci.yml.
  • manaflow-ai/cmux#4902: Related changes to E2E runner fallbacks and the guard script validating workflow runner metadata.

Poem

🐰 I hopped through workflows, tidy and neat,

Replaced shaky globs with a find-and-sort beat.
Run names now carry filters, runners, and refs,
Guards check fallbacks and stop duplicate steps.
CI queues hum softly — a carrot for success!

🚥 Pre-merge checks | ✅ 17 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (17 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately captures the main focus of the PR: improving macOS CI runner fallbacks, which is the central theme of using GitHub-hosted Intel runners for PRs while maintaining Blacksmith defaults for other paths.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed PR contains no production Swift code changes—only GitHub Actions workflows, shell scripts, and configs. Check is scoped to production Swift changes; no actor isolation issues to assess.
Cmux Swift Blocking Runtime ✅ Passed PR contains only GitHub Actions workflow YAML and shell script changes; no production Swift code modifications to evaluate for blocking runtime patterns.
Cmux No Hacky Sleeps ✅ Passed All sleep commands are in GitHub Actions YAML files, explicitly out of scope per review-bot-rules. No production code changes include sleeps.
Cmux Algorithmic Complexity ✅ Passed PR changes are GitHub Actions workflow YAML configs and test-only shell script. The rule applies to production code; test-only scaffolding explicitly passes per the rule.
Cmux Swift Concurrency ✅ Passed PR focuses on CI workflows/scripts. Swift files are initial additions; patterns found (DispatchSource for file monitoring, Combine for SwiftUI) are allowed boundaries.
Cmux Swift @Concurrent ✅ Passed PR correctly adds @concurrent to nonisolated async functions that escape @MainActor via Task.detached and perform file I/O, following Swift 6 concurrent patterns.
Cmux Swift File And Package Boundaries ✅ Passed PR modifies only GitHub Actions workflows and shell scripts; no Swift files are changed, so the Swift file and package boundaries check is not applicable.
Cmux Swift Logging ✅ Passed PR adds new Swift files and modifies CI workflows, not existing production code. Check exempts new code paths; all 584 Swift changes are new file creations.
Cmux User-Facing Error Privacy ✅ Passed CI and VM service code properly sanitizes user-facing errors per review rules: generic messages, no vendor/provider names, credentials, IDs, or raw upstream errors exposed.
Cmux Full Internationalization ✅ Passed PR contains only GitHub Actions workflow and CI/CD script changes with no user-facing content, Swift code, string catalogs, web UI, or metadata modifications requiring internationalization.
Cmux Swiftui State Layout ✅ Passed PR contains no SwiftUI changes—all modifications are to GitHub Actions workflows (YAML) and shell scripts. SwiftUI state layout rules do not apply.
Cmux Architecture Rethink ✅ Passed PR contains no Swift code or architectural changes—only CI/CD workflow configurations and shell scripts. Check is not applicable.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR contains no Swift code changes; only GitHub Actions workflows and CI shell scripts. The auxiliary window close-shortcuts rule does not apply to non-Swift files.
Description check ✅ Passed PR description provides clear summary of changes and validation approach, but lacks explicit testing details and demo content sections from template.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-e2e-runner-fallbacks

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps

greptile-apps Bot commented May 28, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR updates macOS CI across multiple workflows: it switches Xcode discovery from ls glob ordering to find | sort | tail -n 1, adds a "Validate Release artifact slices" step that runs lipo -verify_arch arm64 x86_64 on the app/CLI/ghostty binaries, introduces concurrency cancellation and a dynamic run-name in the manual E2E workflow, removes continue-on-error from the TCC permission step, adds GitHub-hosted runner choices to manual dispatch workflows, and extends the self-hosted guard script with new checks for these invariants.

  • Xcode selection is unified across all workflows to find -maxdepth 1 -name 'Xcode*.app' | sort | tail -n 1, fixing three places (nightly.yml, release.yml, test-depot.yml) that previously used head -n 1 and would have selected the oldest Xcode.
  • Release artifact validation adds a mandatory lipo -verify_arch arm64 x86_64 gate on the app binary, bundled CLI, and ghostty helper after every release-build job run.
  • E2E workflow gains a concurrency group keyed on runner + inputs.ref || github.ref_name + test filter to cancel queued duplicate runs, and drops continue-on-error so TCC failures are surfaced immediately.

Confidence Score: 5/5

Safe to merge — changes are limited to GitHub Actions workflow YAML and a CI guard shell script with no impact on application runtime, auth, or data paths.

All changes are CI-only: Xcode selection is made consistent and correct across every workflow, the new lipo gate catches silent architecture regressions in the release build, and the E2E concurrency fix prevents duplicate queued runs from interfering with each other. No production Swift, runtime, or data code is touched.

No files require special attention. The lipo validation step in ci.yml is the most impactful new gate and is correctly placed after the full universal build in the release-build job.

Important Files Changed

Filename Overview
.github/workflows/ci.yml Xcode selection changed to find/sort/tail in four jobs; new lipo validation step added to release-build; two unused for i loop vars renamed to _.
.github/workflows/test-e2e.yml Added run-name, concurrency cancellation, Xcode find/sort/tail, quoted "$ONLY_TESTING" in array, and removed continue-on-error from TCC step.
tests/test_ci_self_hosted_guard.sh Extended with three new guard checks: E2E runner fallbacks/concurrency, Xcode selection policy, and release-build universal binary verification.
.github/workflows/nightly.yml Xcode fallback fixed from head -n 1 (oldest) to `find
.github/actionlint.yaml New file registering self-hosted runner labels (warp-macos-15/26-arm64-6x, depot-macos-latest/14) with actionlint.
.github/workflows/release.yml Xcode fallback fixed from head -n 1 to `find
.github/workflows/test-depot.yml Xcode fallback fixed from head -n 1 to `find
.github/workflows/perf-activation.yml Added depot-macos-latest runner choice for manual dispatch; Xcode selection unified to find/sort/tail.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    PR[Pull Request / Push Event] --> CI[ci.yml]
    DISPATCH[workflow_dispatch] --> E2E[test-e2e.yml]
    DISPATCH --> PERF[perf-activation.yml]

    CI --> RB[release-build\nwarp-macos-26-arm64-6x]
    CI --> TESTS[tests\nwarp-macos-15-arm64-6x]
    CI --> LAG[tests-build-and-lag\nwarp-macos-15-arm64-6x]

    RB --> XCODE_RB[Select Xcode\nfind/sort/tail]
    XCODE_RB --> BUILD[Build universal app\nARCHS=arm64 x86_64]
    BUILD --> LIPO[Validate Release slices\nlipo -verify_arch arm64 x86_64\napp + CLI + ghostty]

    E2E --> CONCUR{concurrency group\nrunner + ref_name + filter\ncancel-in-progress}
    CONCUR --> E2E_JOB[e2e job\ndepot-macos-latest\nor depot-macos-14]
    E2E_JOB --> TCC[Grant TCC permission\nno continue-on-error]
    TCC --> XCODE_E2E[Select Xcode\nfind/sort/tail]
    XCODE_E2E --> ONLY[xcodebuild\nONLY_TESTING quoted]

    PERF --> PERF_JOB[activation-session\nwarp or depot runner]

    style LIPO fill:#d4edda,stroke:#28a745
    style CONCUR fill:#cce5ff,stroke:#004085
    style TCC fill:#fff3cd,stroke:#856404
Loading

Reviews (10): Last reviewed commit: "Harden release-build fallback on hosted ..." | Re-trigger Greptile

Comment on lines +38 to +40
concurrency:
group: e2e-${{ inputs.runner || 'blacksmith-6vcpu-macos-15' }}-${{ inputs.ref || github.ref }}-${{ inputs.test_filter }}
cancel-in-progress: true

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 The concurrency group key mixes two different ref formats depending on whether inputs.ref is provided. When left blank (default ""), the fallback is github.ref which produces a full path like refs/heads/main. When a user fills in inputs.ref with a short name (main), the key becomes e2e-<runner>-main-<filter> — a different string than e2e-<runner>-refs/heads/main-<filter>. Two runs targeting the same branch but one with an explicit ref and one with the default would land in separate concurrency groups and not cancel each other, defeating the de-duplication goal.

Suggested change
concurrency:
group: e2e-${{ inputs.runner || 'blacksmith-6vcpu-macos-15' }}-${{ inputs.ref || github.ref }}-${{ inputs.test_filter }}
cancel-in-progress: true
concurrency:
group: e2e-${{ inputs.runner || 'blacksmith-6vcpu-macos-15' }}-${{ inputs.ref || github.ref_name }}-${{ inputs.test_filter }}
cancel-in-progress: true

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/test-e2e.yml:
- Around line 65-69: The XCODE_APP fallback currently uses the pipeline "find
... | sort | head -n 1" which picks the lexicographically first match rather
than the newest Xcode; update the pipeline used in the XCODE_APP assignment so
it selects the highest-sorted candidate (e.g., use a reverse or version-aware
sort and take the first result, or keep the current sort and take the last
result) so that Xcode_16.x wins over Xcode_15.x; locate the XCODE_APP assignment
and replace the "find ... | sort | head -n 1" portion with a reverse/version
sort + head (or use tail) to pick the newest Xcode app.
🪄 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: 88408ee1-0e96-4ace-baaf-b966fd02ca50

📥 Commits

Reviewing files that changed from the base of the PR and between 21b9fdc and deac174.

📒 Files selected for processing (2)
  • .github/workflows/test-e2e.yml
  • tests/test_ci_self_hosted_guard.sh

Comment thread .github/workflows/test-e2e.yml
@lawrencecchen
lawrencecchen force-pushed the fix-e2e-runner-fallbacks branch from deac174 to 0e01585 Compare May 28, 2026 03:27
@lawrencecchen lawrencecchen changed the title Improve manual E2E runner fallbacks Improve macOS CI runner fallbacks May 28, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_ci_self_hosted_guard.sh`:
- Around line 31-36: Update the AWK check so saw_run_name only sets true when
run-name contains a dynamic interpolation token instead of any value; replace
the /^run-name:/ test with a pattern that matches run-name: lines containing
interpolation (for example /^\s*run-name:\s*.*\${{.*}}/ or
/^\s*run-name:\s*.*\$\{/) so the saw_run_name flag is only set when the run-name
is dynamically generated; keep the rest of the logic using in_concurrency,
saw_cancel and saw_test_filter unchanged.
🪄 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: 0ca2399c-dd68-4c40-91fb-d9e999652ba6

📥 Commits

Reviewing files that changed from the base of the PR and between deac174 and 0e01585.

📒 Files selected for processing (4)
  • .github/workflows/ci.yml
  • .github/workflows/perf-activation.yml
  • .github/workflows/test-e2e.yml
  • tests/test_ci_self_hosted_guard.sh

Comment thread tests/test_ci_self_hosted_guard.sh Outdated
@lawrencecchen
lawrencecchen force-pushed the fix-e2e-runner-fallbacks branch from 0e01585 to a9ad2e8 Compare May 28, 2026 03:34

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (2)
tests/test_ci_self_hosted_guard.sh (1)

31-36: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Harden run-name validation to require dynamic interpolation.

At Line 31, any static run-name: passes. The guard should require dynamic interpolation tokens (and ideally the expected fields) to prevent silent regression of run metadata.

Proposed hardening
   if ! awk '
-    /^run-name:/ { saw_run_name=1 }
+    /^run-name:/ {
+      saw_run_name=1
+      if ($0 ~ /inputs\.test_filter/ && ($0 ~ /inputs\.runner/ || $0 ~ /blacksmith-6vcpu-macos-15/) && ($0 ~ /inputs\.ref/ || $0 ~ /github\.ref_name/)) {
+        saw_run_name_dynamic=1
+      }
+    }
     /^concurrency:/ { in_concurrency=1; next }
     in_concurrency && /^jobs:/ { in_concurrency=0 }
     in_concurrency && /cancel-in-progress:[[:space:]]*true/ { saw_cancel=1 }
     in_concurrency && /inputs\.test_filter/ { saw_test_filter=1 }
-    END { exit !(saw_run_name && saw_cancel && saw_test_filter) }
+    END { exit !(saw_run_name && saw_run_name_dynamic && saw_cancel && saw_test_filter) }
   ' "$E2E_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_ci_self_hosted_guard.sh` around lines 31 - 36, The current guard
only checks for a static "run-name:" key (pattern /^run-name:/ and saw_run_name)
which allows non-dynamic names; update the validation to require dynamic
interpolation by changing the /^run-name:/ check to match interpolation tokens
(e.g., require patterns like
/\brun-name:[[:space:]]*.*(\${{[^}]+}}|\$\{[^}]+\}|{{[^}]+}})/) and optionally
assert presence of expected fields such as github.run_id or github.ref within
the matched token; adjust the saw_run_name logic to only set when that
interpolation regex matches so the END exit condition enforces a dynamic
run-name instead of any static value.
.github/workflows/test-e2e.yml (1)

65-69: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Select the newest Xcode fallback (current logic picks the lexicographically first match).

The fallback uses find ... | sort | head -n 1, which selects the lexicographically smallest Xcode*.app. With multiple installs this would pick Xcode_15.4.app over Xcode_16.2.app. The other workflows (ci.yml, perf-activation.yml) correctly use tail -n 1.

🔧 Proposed fix
             XCODE_APP="$(
               find /Applications -maxdepth 1 -name 'Xcode*.app' -print 2>/dev/null \
                 | sort \
-                | head -n 1 \
+                | tail -n 1 \
                 || true
             )"
🤖 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 @.github/workflows/test-e2e.yml around lines 65 - 69, The Xcode fallback
selects the lexicographically first match due to using "head -n 1" and should
pick the newest install; update the find pipeline that assigns XCODE_APP (the
block starting with XCODE_APP="$( find /Applications -maxdepth 1 -name
'Xcode*.app' -print 2>/dev/null | sort | head -n 1 || true") to use "tail -n 1"
instead of "head -n 1" so the sorted list returns the latest Xcode; keep the
surrounding find/sort/|| true structure unchanged.
🤖 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.

Duplicate comments:
In @.github/workflows/test-e2e.yml:
- Around line 65-69: The Xcode fallback selects the lexicographically first
match due to using "head -n 1" and should pick the newest install; update the
find pipeline that assigns XCODE_APP (the block starting with XCODE_APP="$( find
/Applications -maxdepth 1 -name 'Xcode*.app' -print 2>/dev/null | sort | head -n
1 || true") to use "tail -n 1" instead of "head -n 1" so the sorted list returns
the latest Xcode; keep the surrounding find/sort/|| true structure unchanged.

In `@tests/test_ci_self_hosted_guard.sh`:
- Around line 31-36: The current guard only checks for a static "run-name:" key
(pattern /^run-name:/ and saw_run_name) which allows non-dynamic names; update
the validation to require dynamic interpolation by changing the /^run-name:/
check to match interpolation tokens (e.g., require patterns like
/\brun-name:[[:space:]]*.*(\${{[^}]+}}|\$\{[^}]+\}|{{[^}]+}})/) and optionally
assert presence of expected fields such as github.run_id or github.ref within
the matched token; adjust the saw_run_name logic to only set when that
interpolation regex matches so the END exit condition enforces a dynamic
run-name instead of any static value.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 96193f7d-56e0-4bc8-83ab-da5ba7a680b6

📥 Commits

Reviewing files that changed from the base of the PR and between 0e01585 and a9ad2e8.

📒 Files selected for processing (4)
  • .github/workflows/ci.yml
  • .github/workflows/perf-activation.yml
  • .github/workflows/test-e2e.yml
  • tests/test_ci_self_hosted_guard.sh

@lawrencecchen
lawrencecchen force-pushed the fix-e2e-runner-fallbacks branch 2 times, most recently from 706b271 to dbf346e Compare May 28, 2026 03:44

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_ci_self_hosted_guard.sh`:
- Around line 39-42: The concurrency guard can falsely pass if the
concurrency.group drops the runner dimension, so add a check that the
concurrency block explicitly includes a runner dimension; inside the awk block
that sets in_concurrency (where symbols like in_concurrency, saw_run_name,
saw_run_name_dynamic, saw_cancel, saw_test_filter, saw_ref_name are used) add a
new pattern such as: in_concurrency && /runner/ { saw_runner=1 } (or a more
specific match like /github\.runner/ or /runs-on/ if present), and include
saw_runner in the END exit condition alongside the other saw_* variables so the
script fails unless the runner dimension is present.
🪄 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: d966fcfc-1c65-41d4-b4e9-b9a450189f19

📥 Commits

Reviewing files that changed from the base of the PR and between a9ad2e8 and 706b271.

📒 Files selected for processing (4)
  • .github/workflows/ci.yml
  • .github/workflows/perf-activation.yml
  • .github/workflows/test-e2e.yml
  • tests/test_ci_self_hosted_guard.sh

Comment thread tests/test_ci_self_hosted_guard.sh Outdated
@lawrencecchen
lawrencecchen force-pushed the fix-e2e-runner-fallbacks branch from fd6535a to e8a8546 Compare May 28, 2026 06:10

This branch was successfully deployed

1 active deployment
Preview – cmux — e8a85462 Deployed May 28, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant