Repository navigation
ci: build cmuxTests without emitting its Swift module - #14364
Conversation
|
All contributors have signed the CLA ✍️ ✅ |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Warning Review limit reachedNext included review available in 8 minutes. View limit detailsLimit details: You’ve used all 10 included reviews currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (3)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (3)
Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe app test build configurations set ChangescmuxTests module emission
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Other Merge Risk: ⚪ Minimal · up to No actionable merge-blocking issue is established. The empty header setting has no consumer in the target’s Objective-C source. Architecture SummaryArchitecture risk: 🔵 Low · up to The change affects 3 systems. Changed systems: Architecture concerns Review detailsSystems and components
Before / after behavior
🚥 Pre-merge checks | ✅ 24 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (24 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files. (1 skipped: 1 unsupported.) ✨ Finishing Touches 💡 2📝 Generate docstrings 💡
🛠️ Fix failing CI checks 💡
🧪 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 |
c5b8b17 to
93b6e27
Compare
Nothing imports cmuxTests.swiftmodule, but its separate emit-module job type-checks every declaration and expands every @test macro: 26 s of a 31 s one-test-file rebuild, serial. The standalone driver with -no-emit-module-separately emits no module, and an empty SWIFT_OBJC_INTERFACE_HEADER_NAME removes the one output that needed it. The same edit now takes cmuxTests 4.1 s (#14352, run 36089490735). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
93b6e27 to
c9116b4
Compare
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
…14378) * test: build cmuxTests without a Swift module in scripts/test-unit.sh CI stopped emitting the cmuxTests module in #14364, which took a one-test-file rebuild from 31 s to 4.1 s. The local test-compile wrapper now passes the same cmuxTests-only settings. CMUX_TEST_EMIT_MODULE=1 keeps the module for lldb. The compile-settings test checks that the wrapper and the CI script agree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: note that a caller's OTHER_SWIFT_FLAGS wins; keep test DerivedData out of /tmp Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
85a3655 ci: seed j14 DerivedData on a trusted-only owned mini (manaflow-ai#14380) dfb9466 Merge pull request manaflow-ai#14337 from manaflow-ai/14327-team-picker-cloud e805dc8 Merge pull request manaflow-ai#12997 from manaflow-ai/task-12947-option-dead-key 8c7670d ci: stop compile admission before compiling when the fast Linux gate declined (manaflow-ai#14374) 460bda4 test: build cmuxTests without a Swift module in scripts/test-unit.sh (manaflow-ai#14378) 206c6fb ci: keep an owned Mac warm through cancelled and failed admissions (manaflow-ai#14375) b5798b5 test: isolate auto dead-key config coverage 753d4d4 Merge remote-tracking branch 'origin/main' into 14327-team-picker-cloud 1f09959 ci: route owned-mini root jobs to the root runner label (manaflow-ai#14357) 127d9d3 Remove filled background from Cloud team picker ada4519 ci: build cmuxTests without emitting its Swift module (manaflow-ai#14364) 9c2cd6f Merge remote-tracking branch 'origin/main' into 14327-team-picker-cloud 687e0a4 fix: import terminal test dependencies 244f588 ci: report which cmuxTests suites an app-source change can reach (report only) (manaflow-ai#14367) cbfa373 ci(canary): send each Cloud VM canary run to Axiom (manaflow-ai#14368) b5a50a9 test: wait for async reload, selectionchange, and pane width in three main-red app-host tests (manaflow-ai#14366) 2adda75 Merge remote-tracking branch 'origin/main' into 14327-team-picker-cloud 40b2bec fix: respect explicit Option-as-Alt for dead keys 7b42ac7 test: cover explicit and auto Option dead-key routing d2d64ee Merge origin/main and preserve both test references 106ecef Merge remote-tracking branch 'origin/main' into task-12947-option-dead-key a632acb Merge remote-tracking branch 'origin/main' into 14327-team-picker-cloud 5579c08 test: isolate team picker shortcut preference 9d5b356 Merge remote-tracking branch 'origin/main' into 14327-team-picker-cloud 6099585 Merge remote-tracking branch 'origin/main' into 14327-team-picker-cloud e761153 test: force typed Cloud flag overrides in UI fixture dcd3d05 Merge remote-tracking branch 'origin/main' into 14327-team-picker-cloud 36688f3 test: exercise team picker in the visible account footer 73e30f1 Merge remote-tracking branch 'origin/main' into 14327-team-picker-cloud 6c8f1f8 fix: move team scope into the Cloud header 6ddba81 test: cover Cloud team picker placement for manaflow-ai#14327 456ba2a fix: preserve Option dead-key composition # Conflicts: # .github/workflows/ci-guards.yml # .github/workflows/ci-macos.yml # .github/workflows/ci.yml # .github/workflows/cloud-vm-canary.yml # .github/workflows/seed-derived-data.yml
|
Observed a concrete build regression while verifying #14371 on I found no open fix by searching — RavenCinder (pending) |
|
The prerequisite repair is committed separately in #14371 as — RavenCinder (pending) |
CMUX_RELOAD_APP_EMIT_MODULE=0 builds the app target with the standalone driver and -no-emit-module-separately, and its Debug configuration generates no Objective-C header (nothing includes it). Same change #14364 made for cmuxTests. The edit-loop benchmark now reruns every scenario with and without it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* reload: skip the app's separate Swift module emission A dev build only runs the app: nothing imports its Swift module except cmuxTests, which reload never builds, and no Objective-C includes its generated header. Xcode's integrated driver still emits the module in a separate job that type-checks every declaration in the app on every edit. Use the standalone driver with -no-emit-module-separately for the app target only, the change #14364 made for cmuxTests, and generate no Objective-C header in the app's Debug configuration. On a Blacksmith 12-vCPU runner, app body and comment edits drop from 38-40 s to 25-27 s and a no-op rebuild to 20 s. CMUX_RELOAD_APP_EMIT_MODULE=1 restores the old behavior. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * reload: say how to get lldb expression evaluation back Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
After #14349, a one-test-file edit still cost
cmuxTests31 s, and 26 s of that was its own SwiftEmitModule job, running serially on the critical path. Nothing importscmuxTests.swiftmodule. CI now buildscmuxTestswithout emitting a module, and the same edit takes 4.1 s.Change
scripts/ci/compile-app-host-test-product.shbuildscmuxTestswith the standalone Swift driver (SWIFT_USE_INTEGRATED_DRIVER=NO) and-no-emit-module-separately. Xcode's integrated driver always appends-experimental-emit-module-separately, so the standalone driver is the only way to pass the flag. With it, a non-WMO build plans no emit-module job, and current swift-driver has no merge-modules job to fall back on, so no module is written. Both settings are per target ($(X_$(TARGET_NAME)):default=...), so the app and every package keep their arguments.cmux.xcodeprojsetsSWIFT_OBJC_INTERFACE_HEADER_NAME = ""forcmuxTests. The generatedcmuxTests-Swift.hcomes from the module job and nothing includes it. Without this setting, the no-module build fails inSwiftMergeGeneratedHeaders(ENOENT). Local builds also stop generating the header. They keep the integrated driver and still emit the module.Where the 26 s went
With
-stats-output-dir -fine-grained-timers(canary #14352, run 36087174643; the timers roughly double the job's wall time), the emit-module job was 85% type checking. The largest slices were declaration checking,ExpandPeerMacroRequest(7,893@Testmacros), stored-property initializer expressions, and name lookup across the imported modules. Serialization was 1.3 s. Trimming the job's other outputs did not help: without the ObjC header, with-empty-abi-descriptor, or with-avoid-emit-module-source-info, it stayed at 50 to 54 s against 48 s for the control.-experimental-lazy-typechecksaved about 1 s.Measurements
Canary #14352, run 36089490735,
blacksmith-12vcpu-macos-26, Xcode 26.6 (Swift 6.3.3). Rows arecmux-unitrebuilds on the admission's DerivedData, without stats flags.The third row shows the gain comes from dropping the module, not from the driver switch. The built bundle is unchanged where tests are concerned: the same 11,758 enumerated tests, the same
__swift5_testssection size (0x44140), and the same 332 ObjC test classes. The full-rebuild column is noisy (each series' first build also re-planned other targets), so it shows only that the full rebuild did not get worse.What this does not change
cmuxTestsfile (see ci: build cmuxTests without the compilation cache so it rebuilds incrementally #14349). That rebuild no longer waits on the module job.cmuxTestsonce, because its arguments changed. The seeds pick up the new arguments on their next build through this script.cmuxTests.swiftmodulein CI DerivedData. CI never debugs the test bundle.app-host-test-rerun.ymlcompiles-target cmuxTestswithout these settings, so it keeps the integrated driver and emits the module. It already differs from admission (no cache setting, pruned source list), so it was not reusing admission's cmuxTests objects before this change either.🤖 Generated with Claude Code
Summary by CodeRabbit