Skip to content

CI speed 15: Windows tests on windows-11-arm, nightly x64 tests - #45

Open
hoangvu12 wants to merge 2 commits into
mainfrom
ci/windows-tests-arm64
Open

hoangvu12 wants to merge 2 commits into
mainfrom
ci/windows-tests-arm64

Conversation

@hoangvu12

Copy link
Copy Markdown
Owner

Ticket: .scratch/ci-speed/issues/15-windows-tests-arm64.md (coverage option (b), user decision 2026-10-29).

  • tests runs on windows-11-arm for PRs and pushes; app stays on windows-2022 (packages, installs and smoke-tests the shipped x64 build).
  • Nightly (schedule, 04:11 UTC): tests alone on windows-2022, cold, with no Rust cache restore or save.
  • windows-ci-setup: clang for aarch64 ring, x64-or-arm64 fxc lookup, a rust-cache switch. rust-cache saves only on pushes to main. rust-cache keys by architecture, so arm64 gets its own windows-tests entry, which replaces the x64 one. rust-lld already applies per host triple (05).
  • scripts/test-windows-linker.ps1: PE machine + Rich-header linker check, now run by both jobs.
  • Dispatch inputs: tests_runner, app_runner (replaces runner), rust_cache.

Measurements and the A/B pair are in the ticket's Comments.

PRs and pushes run the `tests` job on windows-11-arm. The `app` job
stays on windows-2022 and keeps packaging and installer-testing the
shipped x86_64 build. x64 coverage for the test suites (user decision,
option b) comes from a nightly schedule. It runs `tests` alone on
windows-2022, cold: no Rust cache restored or saved.

windows-ci-setup gains release.yml's clang step for aarch64 ring
builds, its x64-or-arm64 fxc lookup, and a rust-cache switch.
rust-cache now saves only on pushes to main, so scheduled and dispatch
runs on main never write an entry. rust-cache keys by OS and
architecture, so arm64 gets its own windows-tests entry, which replaces
the x64 one. The host-triple rust-lld config from 05 already covers
aarch64-pc-windows-msvc.

A new script, test-windows-linker.ps1, reports a binary's PE machine
and whether it was linked by rust-lld or link.exe (the Rich header).
The app job's inline linker check moves into it, and the tests job now
runs it on the roboco.exe its CLI tests ran. tests pins node 24 for the
Cursor shim suite on both architectures.

The runner input is split into tests_runner and app_runner, and a new
rust_cache input reproduces the nightly's cold build by dispatch.
…i-speed 15)

The first arm64 run failed three ConPTY tests on all three tries
(roboco-engine terminals::windows_tests: open_with_command_delivers_
the_exact_command_to_conpty, conpty_unicode_cwd_resize_replay_and_exit,
conpty_cleanup_kills_descendants_on_close_shutdown_and_drop). Each one
stalled at the first non-core cmdlet that Windows PowerShell 5.1 ran.

Timing on both images (scratch run 40769851192): on windows-11-arm,
Split-Path, Set-Content or Start-Process takes 22-23 s in every new
powershell.exe. The module analysis cache starts cold and scans the
whole PSModulePath, Az included, until one process completes a full
Get-Command (117 s). After that the same command takes 0.3 s.
windows-2022 takes 0.2 s from the start.

On arm64 the tests job now starts that Get-Command in the background
as its first step, and joins it right before the tests. The join step
fails, by name, if a new powershell.exe still needs more than 5 s for
Split-Path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant