Skip to content

ci: add Windows runners to catch cross-platform regressions#33

Merged
Arthur742Ramos merged 1 commit into
mainfrom
arthur742ramos/add-windows-ci-runner
May 15, 2026
Merged

ci: add Windows runners to catch cross-platform regressions#33
Arthur742Ramos merged 1 commit into
mainfrom
arthur742ramos/add-windows-ci-runner

Conversation

@Arthur742Ramos

Copy link
Copy Markdown
Owner

Summary

Follow-up to #32. The 3 production bugs fixed there were invisible to CI because every job runs on ubuntu-latest. This adds Windows coverage so the same class of bug fails CI before it lands.

Changes

Job OS Node versions Notes
test ubuntu-latest 20, 22, 24 Unchanged
test-windows (new) windows-latest 20, 22, 24 Mirrors test step-for-step. Skips coverage upload (already produced by ubuntu Node 20). fail-fast: false so one Node-version failure doesn't mask others.
e2e ubuntu-latest 20 Unchanged — full test:e2e (CLI + Playwright web).
e2e-windows (new) windows-latest 20 Runs test:e2e:cli only. The CLI e2e is what surfaced the HOME → USERPROFILE bug fixed in #32, so it's the highest-value Windows e2e to gate on.
lint, typecheck, dependency-review, build, sbom ubuntu-latest 20 Unchanged — platform-agnostic; Windows would not catch additional bugs.

build.needs and sbom.needs now include the new Windows jobs, so a Windows failure blocks the rest of the pipeline.

Why not run Playwright web e2e on Windows too?

I haven't validated the Playwright web suite on Windows in this change. Adding it without validation could yield unrelated, noisy failures and erode trust in the gate. Easy to add as a second follow-up once it's been verified.

Why not also run lint/typecheck/build on Windows?

  • TypeScript and ESLint don't have OS-specific behavior here.
  • The build outputs .js that runs anywhere; the build scripts (cpSync, inline node) are portable. (Verified locally.)
  • Adding them would just multiply CI minutes without a corresponding bug-catching benefit.

Cost

3 extra Windows test jobs + 1 Windows e2e job per CI run. Tests run ~10s on Windows locally, so the runner-minute impact is small.

Out of scope

The other follow-up I noted in #32 — symlink-realpath hardening on the file-download endpoint — is not addressed here. The web routes only serve files the analyzer itself wrote (plain markdown/JSON), so there's no realistic path for an attacker to plant a symlink inside the served directory. Happy to revisit if generated outputs ever start including arbitrary files (e.g., copied from cloned repos).

The previous PR (#32) fixed three production bugs that were invisible in CI because every job ran on ubuntu-latest. This adds Windows coverage so the same class of bug fails CI before it lands.

New jobs:

- test-windows: full matrix of Node 20, 22, 24 on windows-latest. Mirrors the existing ubuntu test matrix step-for-step except it skips the coverage upload (already produced by the ubuntu Node 20 leg). fail-fast: false so a single Node-version failure does not mask others.

- e2e-windows: runs npm run test:e2e:cli only. The CLI e2e suite uncovered the HOME->USERPROFILE bug fixed in #32, so it is the highest-value Windows e2e to gate on. The Playwright-driven web e2e is left ubuntu-only because it has not been validated end-to-end on Windows in this change.

Both new jobs are added to the build and sbom needs lists so a Windows failure blocks the rest of the pipeline.

Lint, typecheck, dependency-review, build, and sbom remain ubuntu-only. They are platform-agnostic and adding Windows there would not catch additional bugs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Arthur742Ramos Arthur742Ramos merged commit 1d277cb into main May 15, 2026
13 checks passed
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