ci: let the pre-merge Release check compile arm64 only - #13195
Conversation
The Release check compiles the app target as one whole module per architecture, so any app change recompiles both slices and the compilation cache cannot help. The Intel slice is the largest single cost in that job. CI_RELEASE_BUILD_ARCHS=arm64 (or the release_archs dispatch input) drops the Intel compile from this check. Unset keeps today's universal build. Nightly never reads the option, so what ships stays universal and an Intel-only compile break is caught there after merge. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Warning Review limit reachedNext included review available in 3 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 (5)
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 |
|
All contributors have signed the CLA ✍️ ✅ |
|
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
verify_arch only proves a slice is present, so in arm64 mode a universal binary passed and a change that brought the Intel compile back would go unnoticed. Compare each built binary's full slice list instead, the way the diff sidecar verifier already does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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. |
4b18fc9 ci: track package test helper inputs (manaflow-ai#13188) b210493 Merge pull request manaflow-ai#13181 from manaflow-ai/ci-focused-app-host-tests ced163c Merge pull request manaflow-ai#13180 from manaflow-ai/ci/remote-tmux-crash-diagnostics 9faf726 Merge pull request manaflow-ai#13178 from manaflow-ai/ci-reject-incomplete-test-runs 14c3ca1 Merge pull request manaflow-ai#13166 from manaflow-ai/ci-reuse-build-for-runtime-regressions 7c3574a ci: let the pre-merge Release check compile arm64 only (manaflow-ai#13195) 887839a ci: drop a stalled GhosttyKit download and resume it (manaflow-ai#13197) 70a244d Merge pull request manaflow-ai#13177 from manaflow-ai/ci-fast-static-preflight fcad43f build: read Xcode projects with Foundation and drop XcodeProj and PathKit (manaflow-ai#13111) 76d80b1 ci: skip Release and its helper for test-only pull requests (manaflow-ai#13122) fdc63e9 Merge pull request manaflow-ai#13176 from manaflow-ai/ci-reuse-queue-build-products 3162fee test: split an expression Xcode 27 cannot type-check (manaflow-ai#13126) d10aa64 test: use consistent XCTest imports to stop compiler diagnostic flood (manaflow-ai#13163) 1b69bf9 test: stop real-Git reftable tests depending on a 2s wall clock (manaflow-ai#13186) cad333b Merge origin/main into ci-fast-static-preflight 7522486 Merge origin/main into ci-reuse-build-for-runtime-regressions 43210e1 Bound automatic terminal titles before session persistence (manaflow-ai#13009) 674a0db ci: retire Depot macOS runners (manaflow-ai#13162) f48ef36 Merge pull request manaflow-ai#13183 from manaflow-ai/ci-early-cli-smoke ebbb17f ci: skip app-host teardown when setup never started (manaflow-ai#13179) 5fb6d8c Merge pull request manaflow-ai#13168 from manaflow-ai/ci-cache-r2-store a348064 ci: skip compile admission when an earlier run compiled the same build inputs (manaflow-ai#13139) 88e102c reload: let a reused checkout keep one warm DerivedData across tags (manaflow-ai#13131) 7a049e9 Merge origin/main into ci-reuse-build-for-runtime-regressions cd05c6e Merge origin/main into ci-fast-static-preflight 5cf41fa Merge origin/main into ci-reuse-queue-build-products 5a6322e test: guard early CLI smoke ordering 0438552 fix: pass R2 public URL through workflow environment 0716c59 test: bound app-host replay subprocesses 2e0b9b5 ci: terminate cancelled focused discovery 14bbad4 ci: keep R2 public URL configuration inside the cache actions e342c67 ci: make focused run discovery cancellable cf3984b test: avoid hard timeout in app-host classifier replay 251b050 ci: allow privileged crash report collection 7d9a7f2 Merge main after landing cache backend and suite policy b6853ee ci: allow manual cache-only seeding for R2 rollout 81d3026 test: require manual cache seeding to skip app publication 6980f8e ci: harden remote tmux diagnostics collection c24d77f ci: publish R2 cache pointers conditionally and repair failed writes 2432805 test: cover R2 pointer repair and out-of-order saves 4779d01 ci: continue past unusable build artifact candidates 9dd1579 test: reproduce corrupt candidate blocking product reuse bfb43f5 ci: check CLI version and help before app-host fan-out f2b0fae docs: use an existing suite in focused launcher example 2c04b6a ci: drain tar streams portably with BSD tar c5e1d59 ci: pin focused tests to a commit and track the requested run 1a44bde ci: consume tar padding when restoring zstd caches 31d4fd9 test: cover padded R2 archives on macOS a46567a ci: isolate R2 cache writes from release credentials ce26a8e test: require early CLI smoke gate to propagate probe failures 18a67fb test: reproduce focused launcher revision and run attribution bugs 4dd543e test: require cache-only R2 credentials for cache saves 2c8412c ci: make product reuse attempt-safe and bound archive expansion 59fb526 ci: preserve remote tmux mirror crash diagnostics d8107e4 test: cover artifact reruns, expansion limits and producer source checks 28a03e3 ci: reject interrupted app-host runs despite later passing summaries 302551d test: reproduce false-green app-host timeout and restart runs bc3a63a ci: reject invalid static inputs before expensive validation baf65d9 test: require successful static preflight before macOS admission 6cea5f0 ci: fall back when build identity cannot be established 7632c7e ci: reuse compatible compiled products in merge groups 8be0c54 ci: add an R2 bucket as a cache store every runner can read 25f50c3 test: behaviour of an R2-backed cache store script 17c2498 ci: reuse compiled app and UI products for runtime regressions 6ed96f4 test: require UI products in the shared CI build artifact 230ad52 ci: drop a timeout note about a DerivedData cache that no longer exists b5ec5cc ci: stop restoring DerivedData in pull request jobs a42ad38 Merge remote-tracking branch 'origin/main' into ci-cache-backend-switch 477fb0f ci: choose the cache store per dispatched run, and cover the nightly app build 03363d7 ci: let a repository variable move the seeded caches to the Warp store f791f87 ci: pull request jobs restore caches and never save them 5b65bb1 test: pull request jobs must restore caches read-only
Summary
The pre-merge
release-buildjob compiles the app target as one whole module per architecture. Any change to app code recompiles both slices, so the compilation cache saves little there: measured on Warp today, 27.9 min cold, 21.7 min warm with app code changed, 4 min warm with it unchanged. Of the 21.7, the x86_64 whole-module compile is about 10.5 min.This adds an opt-in to compile arm64 only in that check:
scripts/ci/release-build-archs.shresolvesuniversal(default, also when unset) orarm64, and rejects anything else.release-buildreadsvars.CI_RELEASE_BUILD_ARCHS, or the newrelease_archsdispatch input, and passes the result toARCHSand to the slice checks. The prebuilt Ghostty helper and TUI client are still verified universal in both modes.nightly.ymlandrelease.ymlnever read it, andtests/test_ci_release_build_archs.shfails if nightly ever does.Trade-off for maintainers
With
arm64, a compile error that only exists in the x86_64 slice passes the merge queue and is caught by the nightly build on that main revision instead. Swift code here is not architecture specific and GhosttyKit is prebuilt, so this should be rare, but it moves that one failure class from before merge to after it. To turn it on:Testing
tests/test_ci_release_build_archs.sh(new, wired intoworkflow-guard-tests)actionlint,tests/test_ci_self_hosted_guard.sh,tests/test_nightly_universal_build.sh,tests/test_ci_change_areas.py,tests/test_ci_pull_request_caches_are_read_only.pypass locallyworkflow_dispatchrun of this branch withrelease_archs=arm64measures the real job; result will be added as a comment.Issues
🤖 Generated with Claude Code
Summary by cubic
Adds an opt-in that lets the pre-merge Release check compile
arm64only, dropping the Intel slice that dominates the job's build time. Unset oruniversalkeeps today's universal build; witharm64, an Intel-only compile break is caught by the nightly build after merge instead of before. Slice verification now checks built binaries for exactly the resolved architectures, so a universal binary can't pass an arm64-only check.Migration
CI_RELEASE_BUILD_ARCHS=arm64, or passrelease_archs=arm64to aworkflow_dispatchrun, to enable it.Related to #13182.
Written for commit c04551a. Summary will update on new commits.