ci(cmux-tui): pin pushes run the cmux_next_ daemon tests on Linux; promotion stays on macOS

Merged
TE
15d ago
+147-24

Merged at 31b6cec82b (squash of bacbd3fb), after "Review (claude subagent): SHIP at bacbd3fb7045c1aa0fd6bd36c9ff967c6c708533". The reds at the head were base reds (see the comment), plus the perf gate (an app perf counter budget in the Swift scheme compile, which this CI-only diff can't move) and my own cancelled focused proof run. Part of the ci-linux-move lane; builds on ci-speed's #23660.

Takes back #23660: that PR sent cmux-tui-pin-* daemon tests to the light minis. This PR keeps its CI_PIN_DAEMON_POOL override and its side-lane and promotion-pool guards, but changes the fallback from the light minis to Blacksmith Linux. This is the planned follow-up to #23660; deputy-2 agreed it and ci-speed was told.

Summary

The cmux_next_ daemon tests (macOS) job (cmux-next-daemon-tests in cmux-tui-artifacts.yml) runs once per merged pull request, through that PR's cmux-tui-pin-* push, and once per feat-cmux-next push. It always used a Mac. The tests are Rust, and cmux-tui.yml's Linux test job already runs the whole workspace.

  • Pin pushes move to Linux. A cmux-tui-pin-* push now takes vars.CI_PIN_DAEMON_POOL (with the same side-lane and promotion-pool guards as before). Otherwise it takes blacksmith-16vcpu-ubuntu-2404, on every attempt.
  • Every other route is unchanged:
    • a feat-cmux-next push still goes to CI_NEXT_DAEMON_POOL, else CI_NEXT_PROMOTE_POOL;
    • main, next-batch/*, a lane push with the trailer, and dispatches go where they went before;
    • the fork gate and the dispatch macos_runner input still come first.
  • The promotion gate stays on macOS.
    • The job now outputs runner_os, and publish-tree-tested writes the tree's daemon-tests marker only when runner_os is macOS.
    • A pin usually publishes the tree that its feat-cmux-next merge pushes next. If the pin wrote the marker, that push would skip its Mac tests.
    • With no marker, the feat-cmux-next push's preflight finds the tree untested (daemon_tested=false, because the publisher isn't a feat-cmux-next push). It then runs the tests on its Mac pool before request-nightly-next.
  • Steps that differ by OS:
    • clang, libclang-dev and pkg-config are installed on Linux only, as in cmux-tui.yml;
    • the cargo cache key is cmux-tui-linux on Linux, and stays cmux-tui-macos on Mac, so the Mac cache stays warm.
  • The job name is unchanged. cmux_tui_publisher_testing.py and tree-owner-wait look the job up by its name, so it keeps the "(macOS)" suffix even when it runs on Linux.
  • The runners.json entry and the Xcode-selection exemption stay, because the job still runs on macOS for feat-cmux-next.

Testing

  • Red at a23c5037e33 (tests only): python3 tests/test_cmux_tui_daemon_tests_linux.py had 3 failures and 1 error. python3 tests/test_ci_tui_routes_avoid_nightly_label.py had 2 failures, including "pin push routed to glaeda-side-light-xcode-26.6".
  • Green at the head: both commands pass. So does python3 tests/test_cmux_tui_feat_publish_order.py, whose fixture now gives the feat-cmux-next daemon job runner_os: macOS.
  • I ran every tests/*.py and tests/*.sh that reads cmux-tui-artifacts.yml locally. They pass, except for:
    • test_cmux_tui_republish_same_commit.py and test_cmux_next_checks_workflow.py, which fail the same way at the base;
    • test_ci_nightly_push_throttle.py, which needs node;
    • test_tui_publish_workflow_security.py, which needs Python 3.11. For that one I ran its daemon-route test on its own, and it passes. ci-guards runs the full file.
  • Linux proof that the tests pass: run 39692110137 of cmux-tui.yml in focused mode, with test_filter=cmux_next_, at bacbd3fb. Its test (linux) job ran on blacksmith-32vcpu-ubuntu-2404: 280 distinct cmux_next_ tests passed and 0 failed, in 8 min 20 s including the cold build. I then cancelled the run, because its macOS job was still queued on the side lane and isn't needed for this proof.

Observed / Not run

  • Observed: everything listed under Testing.
  • Not run yet:
    • a real cmux-tui-pin-* push on Linux. That happens with the first merge after this lands, and I'll add the run here;
    • a feat-cmux-next push showing the Mac run and the marker after a Linux pin. I'll add that run here too.

Mac time saved

Every merged pull request used to hold a Mac for one pin daemon-test job. Since #23660 that was a light mini, and before that the side lane. The tests now run on Linux. The feat-cmux-next push still runs them on its Mac pool, but only for the newest head (the superseded-skip), so a burst of merges costs one Mac job instead of one per merge.

Changelog

none

Risk: normal. CI routing for one test job and the condition for one marker write. The promotion gate stays on macOS.

Agent session: cmux16

🤖 Generated with Claude Code