Repository navigation
ci: faster pull request runs: split slow Linux jobs, cancel on compile failure, Windows cache on Dev Drive - #344838
Merged
Merged
Conversation
The Windows cache warming job installs the dependencies on the OS disk, which takes 16 to 20 minutes, against about 12 on the Dev Drive that the Windows test jobs use. Every pull request run started before the job saves the cache, about 20 minutes after each dependency change on main, has each of its Windows jobs install the dependencies itself. Move the workspace to a Dev Drive with the step of pr-win32-test.yml, and test that the two steps stay the same. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When hygiene, ESLint, the compilation or another check of Compile & Hygiene fails, the change has to be fixed and pushed again, but the test jobs keep running: about 10 macOS and 15 Windows runner hours a day go to runs whose Compile & Hygiene already failed. Hygiene and ESLint failures, most of them, are known about 2 minutes into the run. Compile & Hygiene now reports whether one of its checks failed, as opposed to its setup, which a rerun of the job fixes. A new Cancel Run job then cancels the run. It runs apart from Compile & Hygiene so that the code of the pull request never runs with a token that can cancel workflow runs. The token of a pull request from a fork is read-only, so those runs are not cancelled. PR Gate lists the job but ignores its result: Compile & Hygiene already fails the gate. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Linux Remote and Electron jobs run two test suites one after the other, about 11 minutes of tests, and most pull request runs finish when they do. The Electron smoke test shards take about 9 minutes of tests. Linux machines are plentiful, so: - Electron becomes Electron (node.js) and Electron (extension host). A new INTEGRATION_TEST_SUITE env selects one of the two, like UNIT_TEST_SUITE does for the Electron-Unit jobs. - Remote becomes Remote (integration) and Remote (smoke), as on Windows. - The Electron smoke tests use three shards instead of two, as on Windows. The longest Linux job drops from about 13.5 to about 9 minutes. PR Gate already reports every job of the Linux workflow. The skills that name the jobs and their artifacts are updated. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The cancellation probe assigns a string to a number, causing TS2322 and preventing Compile & Hygiene from passing.
1 open issue
What changed in this PR
This PR aims to shorten VS Code pull request checks and free runners sooner by increasing Linux test parallelism, cancelling runs after compilation or hygiene check failures, and accelerating Windows cache warming.
Changes:
- Split Linux Electron and Remote test jobs, and increase Electron smoke testing to three shards.
- Add an isolated cancellation job for same-repository pull requests, plus a temporary compilation-failure probe.
- Move Windows cache warming to a Dev Drive and update workflow tests and troubleshooting documentation.
| File | Description |
|---|---|
src/vs/base/common/numbers.ts |
Adds a deliberate type error to test cancellation. |
build/lib/test/detectMissingCaches.test.ts |
Checks parity between Windows Dev Drive setup steps. |
build/lib/test/detectChanges.test.ts |
Updates expected job names and cancellation-job coverage. |
build/lib/test/agentHostTestSelection.test.ts |
Adapts assertions to split Linux integration jobs. |
.github/workflows/pr.yml |
Reports failed checks and adds isolated run cancellation. |
.github/workflows/pr-node-modules.yml |
Moves Windows cache warming onto a Dev Drive. |
.github/workflows/pr-linux-test.yml |
Splits slow test jobs and adds a third smoke shard. |
.github/skills/smoke-tests/SKILL.md |
Documents revised sharding and remote smoke jobs. |
.github/skills/fix-ci-failures/SKILL.md |
Updates artifact names and download examples. |
Review effort: Balanced
Logan Ramos (lramos15)
force-pushed
the
lramos15/pr-ci-speed
branch
from
October 28, 2026 20:31
413ec9a to
a120992
Compare
Logan Ramos (lramos15)
marked this pull request as ready for review
October 28, 2026 20:51
Michael Lively (Yoyokrazy)
approved these changes
Oct 28, 2026
Ross Wollman (rwoll)
approved these changes
Oct 28, 2026
Bryan Chen (bryanchen-d)
approved these changes
Oct 28, 2026
Raymond Zhao (rzhao271)
approved these changes
Oct 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Makes pull request runs faster and frees scarce macOS and Windows runners. Three independent commits; reviewing them one at a time is easiest. The Linux cache warmer fix is separate, in #344837.
Why
Measured over about 450 successful
Code OSSruns from Oct 26 to 28:Linux / RemoteandLinux / Electronare most often the last job to finish, because each runs two suites one after the other (about 11 minutes of tests).main, pull request runs miss the Windowsnode_modulescache, and each Windows job installs the dependencies itself (about 12 minutes on the Dev Drive). The warming job installs on the OS disk, which takes 16 to 20 minutes, so it saves the cache late.What changed
ci: split the slowest Linux PR test jobs(pr-linux-test.yml). Linux runners have no queue, so:ElectronbecomesElectron (node.js)andElectron (extension host). A newINTEGRATION_TEST_SUITEenv selects one, asUNIT_TEST_SUITEdoes for the Electron-Unit jobs.RemotebecomesRemote (integration)andRemote (smoke), as on Windows.The longest Linux job drops from about 13.5 to about 9 minutes. The workflow tests and the skills that name the jobs and artifacts are updated.
ci: cancel the pull request run when Compile & Hygiene fails(pr.yml).gh run cancel. It is separate so that pull request code never runs with anactions: writetoken.ci: install the Windows node_modules cache on a Dev Drive(pr-node-modules.yml). The Windows warming job moves its workspace to a Dev Drive with the same step aspr-win32-test.yml. A new test keeps the two steps the same.Reviewer notes
Linux / Electron,Linux / RemoteandLinux / Electron-Smoke (shard n/2)go away. PR Gate is the only required check, and it already covers every job of the Linux workflow.pr-node-modules.ymlonly runs on pushes tomain, so this PR's checks don't exercise the Dev Drive change.How to test
Type 'string' is not assignable to type 'number'.✓ Request to cancel workflow 40763077190 submitted.8 seconds later.compile did not succeed (result: failure).Locally:
cd build && node --test lib/test/detectMissingCaches.test.ts lib/test/detectChanges.test.ts lib/test/agentHostTestSelection.test.ts: 33 passed, 0 failed. The fullnode --test 'lib/**/*.test.ts'also passed: 587 passed, 0 failed.npm run eslinton the changed test files passed, andnpm run typecheckinbuildpassed.actionlint1.7.7 reports nothing new compared withmain, apart from its known limits with YAML anchors and custom runner labels.