Skip to content

ci(shim-cpp): run the CEF shim C++ tests on Blacksmith Linux - #23712

Merged
teamleaderleo merged 4 commits into
feat-cmux-nextfrom
cmux/ci-linux-move
Oct 21, 2026
Merged

teamleaderleo merged 4 commits into
feat-cmux-nextfrom
cmux/ci-linux-move

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Merged (1355c9c): the first PR of the ci-linux-move lane, which moves CI jobs that don't need macOS off the Mac runners. This PR moves cmux-next-shim-cpp.yml; later workflows get their own PRs.

Summary

  • CEF shim download state (C++) now runs on blacksmith-4vcpu-ubuntu-2404 (vars.LINUX_RUNNER when set; ubuntu-24.04 on forks). It used to take a light or side mini, or Blacksmith macOS as the fallback. The job keeps its name, so required checks and the stall and merge-audit tools still match it.
  • The ten scripts/cmux-next/test-*-cpp.sh compile header-only rules that need no CEF and no Apple SDK. The job selected Xcode only to find clang++. The new scripts/cmux-next/lib/cxx.sh picks the compiler:
    • CXX when set;
    • else xcrun clang++ on a Mac, so local runs are unchanged;
    • else clang++.
  • cmux_page_path_test.cpp used macOS's /tmp symlink to pass the root through a symlink. The test now makes its own symlink, so that case is tested on Linux as well.
  • tests/test_cmux_next_shim_cpp_linux.py is a new linux-guard test, committed red first. It checks that:
    • every script takes the shared compiler and calls no xcrun itself;
    • the workflow runs every script;
    • the job stays on Linux under its name, with no Xcode step.
  • tests/test_ci_owned_pool_sources.py: on feat-cmux-next, a stale entry in main's rescue list is now a warning instead of a failure.
    • Main's list can't change in the same commit that moves a feat-cmux-next workflow off the minis, so without this change no move could ever land green.
    • A stale entry is harmless: the rescue only watches a run that has no owned job.
    • It is still a failure on main, and an owned workflow that the rescue doesn't watch still fails on both branches.
    • A follow-up PR to main removes cmux-next-shim-cpp.yml from SIDE_WORKFLOW_PATHS once this one lands.
  • 208993d (after the first CI run): the job's runs-on takes the fork-safe Linux expression the guard jobs use, the job's .github/runners.json macOS entry is gone, and a ci-guards.yml step runs tests/test_cmux_next_shim_cpp_linux.py on every PR.

Testing

  • Red at 4ab761e (test only): python3 tests/test_cmux_next_shim_cpp_linux.py failed: 11 failures in 4 tests.
  • Green at the head: the same command passes.
  • python3 tests/test_ci_owned_pool_sources.py passes (7 tests, stale-entry warning printed), and so does python3 tests/test_ci_owned_pool_rescue.py.
  • All ten scripts pass on cmux16 through both paths: xcrun clang++ (the default) and CXX=/usr/bin/clang++. The case counts match: 62, 18, 101, 20, 28, 42, 7, 18, 50 and 10. No /tmp/cmux-page-path.* directory is left behind.
  • Proven on Linux: this PR's run at 208993d and the feat-cmux-next push run at 1355c9c both passed on Blacksmith Linux.

Before and after (job CEF shim download state (C++), from the Actions jobs API)

Run Event Runner Queue Run
39674915952 push 1355c9c (after) blacksmith-4vcpu-ubuntu-2404 3 s 25 s
39674287779 PR 208993d (after) blacksmith-4vcpu-ubuntu-2404 4 s 23 s
39604308183 push 001b266 (before) cmux19 owned mini 10 s 23 s
39575400940 push 01797cf (before) cmux24 owned mini 9 s 21 s
39531504619 push 1219ce8 (before) cmux17 owned mini 4 s 80 s
39508705780 push 9bdb297 (before) cmux21 owned mini 10,846 s 14 s
39566718746 PR (before) blacksmith-6vcpu-macos-26 11,162 s 50 s
39399414046 PR (before) cmux18 owned mini 1,941 s 129 s

The test time is the same (about 20 to 25 s). What changes is the wait: on the Mac pool the job waited up to 3 h behind the side lane, and on Linux it starts in seconds. The Mac time saved is small, about 1.8 owned-mini hours a week (ci-dash), plus the queue slot.

Observed / Not run

  • Observed: everything listed under Testing.
  • Not run locally: Linux. The Linux compile (Ubuntu clang with libstdc++) is proven by the CI runs above. actionlint and shellcheck aren't installed on cmux16, so the post-edit hooks and CI check those.

Inventory: Mac-runner jobs and what they need

I read these from origin/main and origin/feat-cmux-next and ran nothing. The hours are owned-mini job hours over 7 days, from ci-dash (jobs-group.json?since=7d, about 2,142 h in total).

The linux-swift lane (cosmic-gray) took every Swift/SwiftPM job. This lane keeps lint, Rust, web/bun, Python, C++/script tests, generators and diff checks.

Workflow / job Needs Mini h/7d Verdict
cmux-next-shim-cpp / shim-downloads-cpp nothing Mac-specific: header-only C++ 1.8 MOVE (this PR)
signing-keychain-macos / bash32-syntax /bin/bash 3.2 only (CMUX_PARSE_BASH can point elsewhere) <1 MOVE: GNU bash 3.2.57 built on Linux; run it on both once
macos-matrix-fuzz / fuzz nothing on the runner: curl and python to the fleet controller, holds a Mac for up to 240 min — MOVE, if Blacksmith Linux can reach CMUX_FLEET_CONTROLLER
cmux-next-source-archive / archive xcrun llvm-dwarfdump; macOS fetch lists — PARTIAL: notices and archive on Linux (apt llvm); the macOS fetch lists stay on Mac
cmux-tui-artifacts / cmux-next-daemon-tests macOS runtime of the shipped daemon (cargo only; no SDK or GUI) 292 PARTIAL, but it gates nightly promotion, so moving it means giving up macOS runtime coverage. Not mine to decide alone; ci-speed's #23660 also edits this file
ci.yml (main) / claude-wrapper BSD stat -f, /bin/zsh spool path 1.6 PARTIAL: needs a portable stat
cmux-tui / cdp-browser-smoke (macos entry) nothing Mac-specific; a Linux entry exists — PARTIAL: drop it only if Mac CDP coverage isn't wanted
cmux-tui-build-package / build (darwin) mostly cross-built on Linux already; Mac for npm/PyPI packaging, the agent plugin and the stale-stub fallback — PARTIAL
cmux-tui / macos, macos-relay, lint/test (macos) cfg(target_os="macos") code, launchd, PTY 152 + 2.4 + 3.5 KEEP (the Linux entries already exist)
cmux-next-terminal / rust-terminal cmux-pty Apple cfgs; corpus digests recorded on macOS — KEEP
remote-daemon / remote-daemon-macos-tests darwin-only Go files 2.1 KEEP
relay-publish-npm / smoke (darwin); coderouter-release / build (darwin) darwin binaries, codesign — KEEP
relay-tls / system-keychain System keychain, security — KEEP
cmux-next / generated-files, swift-canary, daemon-test; pr/base-autofix action-exports; batch regen; seed-swiftpm-manifests CmuxNext swift build/swift test (AppKit, macOS 14 platform) 108 + 108 + 30 + 77 KEEP
Swift package jobs: agent-brands, auth-refresh, iroh-v2, relay-tls diagnostic, terminal-hang, test-feed-reply-providers, mobile-core-package, car-guards mac, cloud-machine-tests, cloud-command-deadlines Apple frameworks (CMUXMobileCore imports Darwin and CoreImage unguarded) — the linux-swift lane's
App builds and tests: notarize, stapling, Sparkle, GhosttyKit and xcframeworks, compile admission, release/scheme compile, fast-tier, dogfood, E2E, media tour, frame pacing, iOS, nightly*, release, reload-build, perf-activation, test-macos-suite, compat Xcode, codesign, a display or simulators — KEEP

The Mac side-lane queue before the first merge (ci-dash, 2026-10-21 about 20:24Z):

Pool Running Queued Oldest wait
glaeda-side-std-xcode-26.6 28 86 3,667 s
glaeda-gui-std 9 44 3,674 s
blacksmith-6vcpu-macos-26 11 21 —

Changelog

none

Risk: low. CI-only change: one test job's runner, its test scripts, and a CI guard's warning.

Agent session: cmux16

🤖 Generated with Claude Code

teamleaderleo and others added 2 commits October 21, 2026 13:31
Red on base: the scripts call xcrun themselves and the job runs on a Mac pool.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16020-82b9-7501-8b24-24eafedababb&host=cmux16
The ten scripts/cmux-next/test-*-cpp.sh compile header-only rules with no CEF
and no Apple SDK, yet the job took a Mac (light/side pool, Blacksmith macOS
fallback) and selected Xcode only to find clang++. scripts/cmux-next/lib/cxx.sh
now picks the compiler (CXX, else xcrun clang++ on a Mac, else clang++) and the
job runs on blacksmith-4vcpu-ubuntu-2404 under the same name.

cmux_page_path_test.cpp relied on macOS's /tmp being a symlink to give the root
through one; it now makes its own symlink, so Linux tests that case too.

The owned-pool sources guard now only warns, on feat-cmux-next, about a stale
entry in main's rescue list: main's list cannot change in the commit that moves
a feat-cmux-next workflow off the minis. A pull request to main removes
cmux-next-shim-cpp.yml from SIDE_WORKFLOW_PATHS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16020-82b9-7501-8b24-24eafedababb&host=cmux16
@teamleaderleo teamleaderleo added the risk:low Risk tier (docs/ci/risk-tiers.md) label Oct 21, 2026
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 208993d: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr23712 -f ref=cmux/ci-linux-move -f platform=macos -f backend_mode=local

Not verified: macOS jobs did not run: compile and app tests were skipped on 208993d239; ci-status is green without them.

CI passes on 208993d239 (run 39674287730 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 2f1920a; does not block

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by ci-linux-move on cmux16 · session

@blacksmith-sh

blacksmith-sh Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Found 10 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp944jm63j/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpz8rgtf28/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
compile admission must pass the owned Mac's GhosttyKit archive cache/
compile admission must pass the owned Mac's GhosttyKit archive cache
View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test_a_file_a_test_reads_selects_that_test (main.PullRequestTiers.test_a_file_a_tes
t_reads_selects_that_test)/
test_a_file_a_test_reads_selects_that_test (main.PullRequestTiers.test_a_file_a_tes
t_reads_selects_that_test)
View Logs
test_a_shared_module_selects_its_dependents (main.PullRequestTiers.test_a_shared_mo
dule_selects_its_dependents)/
test_a_shared_module_selects_its_dependents (main.PullRequestTiers.test_a_shared_mo
dule_selects_its_dependents)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

…n does not have

Narrower than warning on all of feat-cmux-next: a feat-cmux-next-only workflow moved off
the minis cannot drop its entry from main's list in the same commit, on either branch's
run; an entry for a workflow main has still fails, since a pull request to main can fix it.
Main gets the same test change first, so neither branch goes red when this lands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16020-82b9-7501-8b24-24eafedababb&host=cmux16
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-q6yds created for this PR by the cmux coordinator.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Independent review (claude subagent) of the owned-pool guard change, read together with #23719.

Review (claude subagent): SHIP at a0048a6

teamleaderleo added a commit that referenced this pull request Oct 21, 2026
…n does not have (#23719)

A feat-cmux-next-only workflow that moves off the minis (cmux-next-shim-cpp.yml in
#23712) cannot drop its entry from main's owned_pool_rescue list in the same commit,
and the entry cannot go first: main's run would find the workflow owned and unwatched.
Such an entry now warns; an entry for a workflow main has still fails. Same change
as feat-cmux-next's copy in #23712, so the two copies stay identical.


Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16020-82b9-7501-8b24-24eafedababb&host=cmux16

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…n the guard on PRs

The fork-routing guard wants a fork pull request's label chosen before
vars.LINUX_RUNNER, the routing table refuses an entry for a job that no
longer runs on macOS, and the registry needs a pull-request job to run
tests/test_cmux_next_shim_cpp_linux.py (now a ci-guards.yml step).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16020-82b9-7501-8b24-24eafedababb&host=cmux16
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Independent review of 208993d (the guard-fix commit), by a claude subagent:

  • The fork-safe runs-on matches the expression already used by ci-guards.yml, ci-fast-guards.yml and cmux-next-guards.yml; tests/test_ci_fork_runner_routing.py passes.
  • The runners.json entry is gone, the file is valid JSON, tests/test_runner_routing_table.py passes and runner_routing_table.py check exits 0.
  • The new ci-guards step matches its neighbours; cmux-next-guards.yml runs the ci group on every feat-cmux-next PR, so the registry no longer flags the shim test.
  • CEF shim download state (C++) passed on Blacksmith Linux in 23 s on this head.

Review (claude subagent): SHIP at 208993d

@teamleaderleo
teamleaderleo merged commit 1355c9c into feat-cmux-next Oct 21, 2026
@teamleaderleo
teamleaderleo deleted the cmux/ci-linux-move branch October 21, 2026 20:58
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

base-red-watch: cmux-next guards / cmux-next CI guard group went red on feat-cmux-next in https://github.com/manaflow-ai/cmux/actions/runs/39674917051 (first red at 1355c9c, last green at 011b014). Suspect: #23712 (commit 1355c9c). If it is yours, fix forward on feat-cmux-next.

teamleaderleo added a commit that referenced this pull request Oct 21, 2026
)

cmux-next-shim-cpp.yml runs on Blacksmith Linux since #23712, and
macos-matrix-fuzz.yml was retired in #23725, so neither takes an owned
mini any more.


Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16020-82b9-7501-8b24-24eafedababb&host=cmux16

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

teamleaderleo added a commit that referenced this pull request Oct 21, 2026
…egistered-tests

Conflicts: .github/runners.json takes the base's removal of the shim-cpp Mac
entry (#23712 moved it to Linux) and keeps this branch's two macOS jobs.
tests/test_swift_testing_suite_timeout.py takes the base's no-network fixture,
which already keeps the web-bundles case off files.cmux.com.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c31-89b3-7d62-8e8c-b116a23ae693&host=cosmic-gray
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:low Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant