Skip to content

CI: build the WSL job on ext4, skip the unused Chromium download, list tsconfig types - #772

Merged
ochafik merged 2 commits into
mainfrom
ci-perf
Sep 8, 2026
Merged

CI: build the WSL job on ext4, skip the unused Chromium download, list tsconfig types#772
ochafik merged 2 commits into
mainfrom
ci-perf

Conversation

@ochafik

@ochafik ochafik commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Three changes, each measured or verified before landing; two cache-based approaches were tried first and dropped (details at the end).

WSL job on ext4. Build (Windows WSL) is the critical path of every CI run (589 to 752 s across the last six). Its checkout is on the Windows drive, which WSL reaches over 9P; npm ci there takes about 3 minutes against 23 s on the Linux job with the same lockfile. The step now copies the tree onto the distro's ext4 filesystem first, which is what Microsoft's WSL docs recommend for anything I/O heavy. Everything the job does (install, build, examples, tests, prettier) runs on the copy; nothing downstream reads the original.

--only-shell for Playwright. The e2e job downloaded the full Chromium build (about 165 MB) on every run, but a headless run with no channel launches chromium-headless-shell and never opens it (PW_CHANNEL is unset in CI). Same command, one flag.

Explicit types in every tsconfig. 48 tsconfigs now list the @types packages they use (node, bun, vite/client, dom-speech-recognition) instead of relying on TypeScript auto-including everything under node_modules/@types. On TypeScript 5.9 this is a no-op, checked project by project: identical exit codes and diagnostics across all 48, no source file dropped from any program, and byte-identical emitted .d.ts for the root and the 23 example servers. It is the prerequisite for TypeScript 7 (the Go compiler), which drops auto-inclusion: on main the TS 7 compiler fails 41 of 48 projects on exactly that, and with these lists it passes all 48, 7 to 8× faster per project. The upgrade itself waits on TypeDoc, which still needs the TS 5/6 compiler API (TypeStrong/typedoc#3098, maintainer expects support around TS 7.1). Note for that future flip: TS 7 emits a slightly different app-bridge.d.ts, so it should be a version bump for checking first, with declaration emit staying on the old compiler until the output is reviewed.

Rejected. An npm cache for the WSL job (actions/cache on a Windows-side dir): mechanically sound, but npm ci is slow there because of 9P, not downloads (tarball caching is worth 7 to 13 s elsewhere), and a prefix-restored cache grows without bound under npm's no-prune cacache. A Playwright browser cache: Playwright's own CI docs say not to, and the measured download is 9.6 s on a job 100 s or more off the critical path.

…t tsconfig types

The Windows WSL job is the critical path of every CI run (589 to 752 s).
Its checkout sits on the Windows drive, which WSL reaches over 9P, and
writing node_modules there is what makes npm ci take about three minutes
where the Linux job takes 23 s. The step now copies the tree onto the
distro's ext4 filesystem before installing and building, as Microsoft's
WSL guidance recommends for I/O-heavy work.

The e2e job downloaded the full Chromium build (about 165 MB) on every
run, but a headless run with no channel launches chromium-headless-shell
and never opens it. `--only-shell` skips that download.

Every tsconfig now lists the @types packages it uses (node, bun,
vite/client, dom-speech-recognition) instead of relying on TypeScript
auto-including everything under node_modules/@types. On TypeScript 5.9
this is a no-op: identical diagnostics across all 48 projects and
byte-identical emitted .d.ts files. It is a prerequisite for TypeScript 7,
which drops the auto-inclusion; with these lists the Go compiler passes
all 48 projects, so that upgrade becomes a version bump once TypeDoc
supports it.

Two cache-based approaches were evaluated and rejected: an npm cache for
the WSL job (npm ci is slow there because of 9P, not downloads, and a
prefix-restored cache grows without bound) and a Playwright browser cache
(Playwright's docs advise against it; the download is under 10 s).
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Preview

Preview deployments for this PR have been cleaned up.

@pkg-pr-new

pkg-pr-new Bot commented Sep 8, 2026

Copy link
Copy Markdown

Open in StackBlitz

@modelcontextprotocol/ext-apps

npm i https://pkg.pr.new/@modelcontextprotocol/ext-apps@772

@modelcontextprotocol/server-basic-preact

npm i https://pkg.pr.new/@modelcontextprotocol/server-basic-preact@772

@modelcontextprotocol/server-basic-react

npm i https://pkg.pr.new/@modelcontextprotocol/server-basic-react@772

@modelcontextprotocol/server-basic-solid

npm i https://pkg.pr.new/@modelcontextprotocol/server-basic-solid@772

@modelcontextprotocol/server-basic-svelte

npm i https://pkg.pr.new/@modelcontextprotocol/server-basic-svelte@772

@modelcontextprotocol/server-basic-vanillajs

npm i https://pkg.pr.new/@modelcontextprotocol/server-basic-vanillajs@772

@modelcontextprotocol/server-basic-vue

npm i https://pkg.pr.new/@modelcontextprotocol/server-basic-vue@772

@modelcontextprotocol/server-budget-allocator

npm i https://pkg.pr.new/@modelcontextprotocol/server-budget-allocator@772

@modelcontextprotocol/server-cohort-heatmap

npm i https://pkg.pr.new/@modelcontextprotocol/server-cohort-heatmap@772

@modelcontextprotocol/server-customer-segmentation

npm i https://pkg.pr.new/@modelcontextprotocol/server-customer-segmentation@772

@modelcontextprotocol/server-debug

npm i https://pkg.pr.new/@modelcontextprotocol/server-debug@772

@modelcontextprotocol/server-lazy-auth

npm i https://pkg.pr.new/@modelcontextprotocol/server-lazy-auth@772

@modelcontextprotocol/server-map

npm i https://pkg.pr.new/@modelcontextprotocol/server-map@772

@modelcontextprotocol/server-pdf

npm i https://pkg.pr.new/@modelcontextprotocol/server-pdf@772

@modelcontextprotocol/server-scenario-modeler

npm i https://pkg.pr.new/@modelcontextprotocol/server-scenario-modeler@772

@modelcontextprotocol/server-shadertoy

npm i https://pkg.pr.new/@modelcontextprotocol/server-shadertoy@772

@modelcontextprotocol/server-sheet-music

npm i https://pkg.pr.new/@modelcontextprotocol/server-sheet-music@772

@modelcontextprotocol/server-system-monitor

npm i https://pkg.pr.new/@modelcontextprotocol/server-system-monitor@772

@modelcontextprotocol/server-threejs

npm i https://pkg.pr.new/@modelcontextprotocol/server-threejs@772

@modelcontextprotocol/server-transcript

npm i https://pkg.pr.new/@modelcontextprotocol/server-transcript@772

@modelcontextprotocol/server-video-resource

npm i https://pkg.pr.new/@modelcontextprotocol/server-video-resource@772

@modelcontextprotocol/server-wiki-explorer

npm i https://pkg.pr.new/@modelcontextprotocol/server-wiki-explorer@772

commit: ae4f7e0

@ochafik
ochafik merged commit 352f6ce into main Sep 8, 2026
23 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