Repository navigation
ci(nightly): take the web bundles and the pending-tree cmux-tui download off build-nightly-app's critical path - #33544
Conversation
…oad off build-nightly-app's critical path Three serial costs around the Release compile, from run 41570134320 and 15 nightly-next runs of 2026-11-02/03: - Web bundles: build-nightly-inputs queued up to 9.9 min for a runner, so build-nightly-app built the bundles itself in 4 of 15 runs (36-112 s; 106 s in 41570134320). The app job now restores the bundles feat-cmux-next's pushes publish to R2 for the same source key (the restore inputs used, 8 s) before building them. - cmux-tui client: the prefetch beside the compile ran only when the tree was already published. It was pending in 10 of 15 runs, and then "Bundle the cmux-tui client" took 45-139 s against 15-33 s. A new step starts the same await-tree-client.sh wait and install into the client cache in the background; the bundle step joins it and verifies every slice as before. - Kept DerivedData: an import line changed in a package's Tests/ tree made the Release build start clean (41570134320). Those trees hold only test targets and support targets only tests link, which the app scheme never compiles; a test checks every Package.swift for that. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3f4cf9696a5c5190da68
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Shipped in:
|
teamleaderleo
left a comment
There was a problem hiding this comment.
Review (codex gpt-6.1-sol xhigh): SHIP at 24a34ef
Review (codex gpt-6.1-sol xhigh, router-review job 13d67fff555c035e3cc16a479c8acdf6): SHIP at 24a34ef
Visual verdict: no images; Leo tries the build
- [P2] [follow-up] .github/workflows/nightly.yml:2259: the R2 restore runs before the hand-off artifact is tried, so when the hand-off installs, the R2 download is thrown away. Try the hand-off first and gate the R2 restore on its failure.
Follow-ups:
- #33568 Skip the R2 restore when the hand-off installs successfully.
(This carries the router-review receipt: its queued post was dropped.)
…keep nightly.yml under its cap Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3f4cf9696a5c5190da68
|
Found 1 test failure on Blacksmith runners: Failure
|
|
Review (codex, router-review): SHIP at 24a34ef Reviewer: codex gpt-6.1-sol xhigh, fast tier. Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward. SHIP at 24a34ef
Follow-ups:
|
…lane/nightly-app-parallel
|
Review (codex, router-review): SHIP at 3834a9f Reviewer: codex gpt-6.1-sol xhigh, fast tier. Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward. SHIP at 3834a9f
Follow-ups:
|
…ightly.yml 489,500 → 474,169 bytes) (#34066) * ci(nightly): move 26 inline step bodies into nightly-steps scripts to make room under the size cap nightly.yml was 489,500 bytes against tests/test_workflow_file_size.py's 490,000-byte cap. Move 26 run blocks (with their step comments) into scripts/ci/nightly-steps/, the way #32513 and #33544 did, and write the publish-lease release step once as a YAML anchor. nightly.yml is now 473,979 bytes. With the scripts expanded back inline (tests/nightly_workflow_text.py), the parsed workflow equals base's. Five non-signing build-sign-notarize-nightly steps use #33544's .nightly-signing-control fallback so an unsigned resume of an older tree still finds them; the expander now reads that form too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-68dc160fd14d31731d3f * ci(nightly): older build trees get the new step scripts; decide's sparse checkout lists its two Review of ca78434: an unsigned resume checks out the original build commit, which lacks the scripts this PR adds, and decide's NEXT sparse checkout did not list its two. Jobs that check out build_sha and call a new script now first run one step, gated on hashFiles of a new script, that checks out only the nightly-steps files the build tree lacks from the workflow commit. Normal runs skip it. build-nightly-app's acpmux stand-in goes back inline; verify-signed-nightly's three contract checks move, covered by the same step. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-68dc160fd14d31731d3f * ci(nightly): decide's admission steps stay inline; canary test reads the expanded workflow decide's NEXT sparse checkout lists only /scripts/ci/*.py (test_ci_nightly_push_throttle.py), so its two steps go back inline instead of widening that list. test_nightly_next_canary_mode.py reads verify-signed-nightly through tests/nightly_workflow_text.py like the other workflow tests. nightly.yml is 474,169 bytes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-68dc160fd14d31731d3f --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo, 2026-11-03: "is it as warmed/sharded/skipped of redundancies as possible tho?"
In reference run 41570134320 (attempt 1),
build-nightly-apptook 17.9 min. The Release compile was 9.4 min of that. Three costs ran in series around it, and none of them depends on the compile. A sample of 15 nightly-next runs from 2026-11-02/03 shows how often each one happens.Changes
build-nightly-inputswaited up to 9.9 min for a runner. When it was late, the app built the bundles itself, 36-112 s, in 4 of 15 runs (106 s in the reference run).build-nightly-inputsalready does (8 s in the reference run), followed bybuild-web-bundles.sh --from.app-prefetch-pending-cmux-tui.sh, runs the sameawait-tree-client.shwait and the same install into the client cache in the background.Tests/tree no longer wipes the kept DerivedData.Packages/Shared/CmuxMessagesLab/Tests/.../HomeAgentMessageAvatarTests.swift.Packages/*/*/Tests/holds test targets and support targets that only tests link. The app scheme's Release build compiles none of them, sonightly_build_state.pynow skips that tree for the import and structure rules.test_package_tests_trees_feed_only_test_targetsreads everyPackage.swiftand fails if a product, or a non-test target outsideTests/, depends on a target there. A local mutation confirmed it catches that case.Whether the compile was warm: in the reference run the compilation cache was warm (434 hits, 162 misses), with kept package checkouts and the host build root. Only DerivedData started clean, for the test-file reason in item 3. The other clean builds in the sample had legitimate reasons: a Package.swift change, an import change in
Sources/, or a first build on a slot.Routing, admission and runner labels are unchanged; no job or step names a runner.
nightly.ymlis 489,211 bytes, under the 490,000 cap. The compile step's text is unchanged, so the incremental-state key is the same.Performance
These numbers are a projection from the step breakdown, not from a run after this change; the first nightly-next run after it lands will give the real number.
Tests
Run with system python3:
test_workflow_file_size,test_nightly_step_coverage,test_ci_warm_sources,test_nightly_build_runner,test_ci_nightly_off_blacksmith,test_nightly_dedicated_mini,test_ci_runs_on_fallback,test_supplychain_security,test_ci_self_hosted_guard.sh,test_nightly_build_state(32),test_nightly_helpers_beside_release_build,test_nightly_next_web_bundles_order,test_nightly_chief_cache_repair,test_nightly_background_steps,test_ci_owned_build_stateand the other nightly tests that name these scripts.test_nightly_next_arm64_only.py(it needslipo) andtest_nightly_universal_build.sh(its "nightly preparation must run on Blacksmith Linux" assertion).Prior art: #32501 (the companion prefetch this extends), #33348 and #32514 (warm host build root), #32455 (Sentry off the tail).
Agent session: agent session
🤖 Generated with Claude Code