Skip to content

ci: run the no-GPU path on Windows - #160

Merged
vyncint merged 10 commits into
mainfrom
ci/windows-no-gpu-path
Sep 22, 2026
Merged

vyncint merged 10 commits into
mainfrom
ci/windows-no-gpu-path

Conversation

@vyncint

@vyncint vyncint commented Sep 22, 2026

Copy link
Copy Markdown
Owner

Probing what actually breaks. Draft body; will be rewritten once the job reports.

@vyncint
vyncint marked this pull request as ready for review September 22, 2026 06:50
@vyncint vyncint closed this Sep 22, 2026
@vyncint vyncint reopened this Sep 22, 2026
Probe commit: the job is not in required-green yet, because nothing has
ever run this suite on Windows and the point is to find out what falls
over.

Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
The toolchain file's components did not arrive with the channel on this
runner; rustc-dev and llvm-tools are both published for
x86_64-pc-windows-msvc at this nightly, so they just have to be asked for.

Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
The Windows job found it, and the probe was wrong in both directions.

It looked in <sysroot>/lib for a name starting with librustc_driver.

False negative, everywhere: librustc_driver-<hash>.so is in <sysroot>/lib
on ANY toolchain, because it is the shared library rustc itself links --
it ships with the compiler, not with rustc-dev. A stable 1.98.0 with no
rustc-dev has one match there and zero in lib/rustlib/<host>/lib, so the
guard never fired for the case it exists for.

False positive on Windows: windows-msvc puts rustc_driver-<hash>.dll
under <sysroot>/bin, so <sysroot>/lib held nothing and a toolchain with
rustc-dev correctly installed was reported as missing it -- the build
stopped, which is exactly what the module docs promise not to do.

It now looks for librustc_driver-<hash>.rmeta in
<sysroot>/lib/rustlib/<host>/lib, where the component installs on every
platform, and .rmeta because that is the metadata a dependent crate needs
-- which is what this build is about to be. The prefix match excludes
librustc_driver_impl-, which would otherwise pass.

Checked both ways by running the probe standalone against two sysroots:
silent on the nightly, and firing with the right path on stable.

Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
check_render clears the environment and puts five toolchain variables
back, which is what makes the warm run and the PTY run agree on cargo's
fingerprint. On Windows that set is missing SystemRoot, without which the
platform's own networking DLLs cannot initialise -- so cargo failed with

  [6] Could not resolve hostname (Could not resolve host: index.crates.io)

twice in a row, which reads exactly like a runner with no network and is
not. The same clear also took PATHEXT, TEMP and USERPROFILE.

The Windows names are behind cfg(windows) and the shared five are
unchanged, so nothing about the Linux and macOS runs moves.

Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
The first Windows CI run found this: `cargo reconverge learn` panicked
there, for all four lessons.

The prose arrives through include_str!, which embeds the working tree's
bytes. A Windows checkout with core.autocrlf=true -- the default on a
windows-latest runner and on most Windows clones -- gives \r\n---\r\n,
so split("\n---\n") finds no separator, every lesson collapses to one
page, and the page-metadata assertion fires. A surviving \r would also
have rendered as a glyph.

pages() normalizes line endings before splitting, and the regression test
is written against the bytes rather than the platform, because a Linux
clone of a repository whose files were committed with CRLF has the same
problem. Removing the normalization fails it.

.gitattributes pins the tree to LF as well. The code no longer needs it,
but the golden and snapshot files the PTY suites compare byte-for-byte
still would.

Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
The Windows job failed a third time, on the watch test, with

  error: could not compile `proc-macro2` (build script)

which is the same cause as the second failure wearing different clothes:
triage_cli.rs clears the environment too, and had its own inline list --
twice -- written on Linux. Without TEMP a build script has nowhere to
work, as without SystemRoot the resolver cannot resolve.

Three copies of that list is how the first fix missed two of the three
places, so there is one now, in tests/common/mod.rs, with the reason
written down beside it. check_render keeps the same behaviour and gains
RUSTUP_TOOLCHAIN and RUSTC, which triage_cli had already learned it
needed: without the pin the child's cargo and rustc can resolve
differently from the caller's.

Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
Three real bugs in, the job is worth requiring. What it cannot run is one
suite: emulation waits on a complete frame and ConPTY does not deliver
frame boundaries the way the other two consoles do -- the screen in the
failure is the right screen, fully painted. Quarantined with the reason
and #162 rather than skipped, per CONTRIBUTING section 3, because the
reduction that would go upstream needs a Windows box this change did not
have. Every other PTY suite here passes on Windows.

The README's Limitations section now states the supported platforms and
those two exceptions, which is the thing that was missing: not the
platform, the silence about it.

Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
The per-test quarantine was the wrong shape. It is not two tests: under
ConPTY the PTY suites time out waiting for a frame boundary while the
screen they print is the right screen, fully painted, and emulation and
inspect_flow both show it. That is how the console delivers what an
application wrote, not what these views render.

So the Windows job runs the workspace minus the TUI crate's PTY suites,
plus that crate's own state and rendering unit tests -- which is
everything the README claims runs anywhere: the analysis, check, the
artifact round-trip, the schemas and the CLI contract. The PTY suites
keep their Linux and macOS legs, which is where they have always been the
terminal gate.

README and CHANGELOG say so plainly rather than implying the views are
gated on three platforms. #162 holds the root-cause work; it needs a
Windows machine to produce the reduction that would go upstream.

Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
@vyncint
vyncint force-pushed the ci/windows-no-gpu-path branch from 6fcd22a to 1b76b40 Compare September 22, 2026 07:21
@vyncint
vyncint merged commit 5c173ac into main Sep 22, 2026
16 checks passed
@vyncint
vyncint deleted the ci/windows-no-gpu-path branch September 22, 2026 07:28
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.

2 participants