Visitar URL original
ci: run the Windows checks in the merge queue, on runners of its own by Yoyokrazy · Pull Request #348041 · microsoft/vscode · GitHub
Skip to content

ci: run the Windows checks in the merge queue, on runners of its own - #348041

Merged
Ladislau Szomoru (lszomoru) merged 5 commits into
mainfrom
agents/merge-queue-configuration-analysis
Nov 13, 2026
Merged

Ladislau Szomoru (lszomoru) merged 5 commits into
mainfrom
agents/merge-queue-configuration-analysis

Conversation

@Yoyokrazy

@Yoyokrazy Michael Lively (Yoyokrazy) commented Nov 12, 2026 •

Copy link
Copy Markdown
Collaborator

Prepares the Code OSS and Component Fixtures workflows for a merge queue on main.

PR vs merge queue

Pull requests to main Merge queue Pull requests to release/* (no queue)
Compile & Hygiene, all Linux checks, Screenshots & Tests ✅ ✅ ✅
Windows checks (Windows / *, Copilot - Test (Windows), chat-lib - Test (Windows)) ❌ (one skipped Windows check) ✅ ✅
Runners vscode-large-runners-{ubuntu,windows}-8-core vscode-large-runners-{ubuntu,windows}-8-core-merge-queue vscode-large-runners-{ubuntu,windows}-8-core-merge-queue

Changes

  • pr.yml and component-fixtures.yml also run on merge_group. PR Gate and Screenshots & Tests stay the required checks.
  • The merge queue, and pull requests to release branches, which have no merge queue, run every job on dedicated runners, so the load of pull requests to main can't hold them up. The reusable test workflows take the runner as an input. Windows / Electron-Smoke (WSL) stays on its 1ES pool.
  • Change detection (.github/actions/detect-changes, shared with the Agent Host E2E detection) and the ripple test plan compare a merge group with the commit of main it forks from, rather than merge_group.base_sha, which names the merge group ahead of it. A queue run therefore covers its pull request and those ahead of it that haven't merged, so the queue can merge a group when only its last entry passes.
  • Hygiene, oxlint and the Codex sync check use the same base in the queue. Cancel Run also cancels failed queue runs. Queue runs use the workspace images of main and don't save caches.

Before enabling the queue

  • The merge queue runners must have the same image and size as the PR runners (Windows: windows-2025-vs2026), or the workspace images won't mount.
  • Every required check, including those reported by apps, must also report on merge_group commits, or entries time out.
  • The queue itself is the ruleset in .github/rulesets/main-merge-queue.json, which a repository admin applies with node .github/rulesets/rulesets.ts apply (see .github/rulesets/README.md): squash, build concurrency 8, group size 1–8, only the head of a group must pass, 45 minute check timeout. The new Rulesets workflow checks daily, and after changes on main, that the live rulesets match their files, so it fails on main until the ruleset is applied.

Testing

  • cd build && node --test lib/test/detectChanges.test.ts lib/test/agentHostTestSelection.test.ts lib/test/workspaceImage.test.ts lib/test/detectMissingCaches.test.ts lib/test/rulesets.test.ts: passed. New tests cover merge group change detection, the PR vs merge queue job and runner split, and the ruleset drift check.
  • node .github/rulesets/rulesets.ts check against microsoft/vscode: reports that the ruleset isn't applied yet, as expected. Comparing an existing live ruleset with itself finds no drift.
  • pnpm run oxlint on the changed TypeScript files: passed.
  • pnpm exec tsc --project build/tsconfig.json: no errors in the changed files.
  • actionlint on the changed and new workflows: no new findings.
  • Not run: an actual merge_group run, which needs the queue enabled.

Pull requests now run Compile & Hygiene and the Linux checks, and the merge queue runs every check, including Windows, on the vscode-large-runners-*-8-core-merge-queue runners so that pull requests cannot hold up merges. Code OSS and Component Fixtures run on merge_group events. In the queue, change detection and the ripple test plan compare a merge group with the commit of main it forks from, so its run covers the pull requests ahead of it that haven't merged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings November 12, 2026 23:55
Adds .github/rulesets with the merge queue ruleset of main, a script that applies the rulesets (admins) and checks them against the live ones, and a Rulesets workflow that runs the check daily and after changes on main, so that changes in the settings or unapplied changes to the files get caught. The README explains how to change and apply a ruleset.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Release-branch PRs lose Windows coverage without a merge-queue fallback, while queue runs can also fail hygiene checks after change-detection errors and lose screenshot comparisons through an incorrect baseline.

3 open issues
What changed in this PR

Prepares the Code OSS and Component Fixtures workflows for a merge queue on main, with dedicated runners and queue-aware change detection.

Changes:

  • Adds merge_group triggers and moves Windows validation to queue runs.
  • Makes reusable test runners configurable and compares queued changes against their common ancestor with the base branch.
  • Updates workspace-image selection, cache behavior, tests, and documentation.
File Description
build/​ripple/​README.md Documents queue-aware test-plan baselines.
build/​lib/​test/​detectChanges.test.ts Tests merge-group detection and runner routing.
build/​lib/​test/​agentHostTestSelection.test.ts Updates mocks and Windows job expectations.
.github/​workflows/​workspace_image/​README.md Documents queue runner image requirements.
.github/​workflows/​pr.yml Adds queue execution, dedicated runners, and shared comparison baselines.
.github/​workflows/​pr-win32-test.yml Accepts a configurable Windows runner, excluding WSL.
.github/​workflows/​pr-linux-test.yml Accepts a configurable Linux runner.
.github/​workflows/​pr-linux-cli-test.yml Makes Rust job runners configurable.
.github/​workflows/​component-fixtures.yml Adds queue execution and adjusts image and cache selection.
.github/​actions/​detect-changes/​detect.ts Shares changed-file lookup and supports merge-group comparisons.
.github/​actions/​detect-changes/​action.yml Updates the token description for merge groups.
.github/​actions/​detect-agent-host-e2e-changes/​detect.ts Reuses shared lookup for Agent Host test selection.
.github/​actions/​detect-agent-host-e2e-changes/​action.yml Updates the token description for merge groups.

Review effort: Balanced

Comment thread .github/workflows/pr.yml Resolved
Comment thread .github/workflows/pr.yml Resolved
… group base

Release branches have no merge queue, so their pull requests run the Windows checks, and the merge_group triggers name main. In a merge group whose base Detect Changes couldn't find, hygiene, oxlint and the Codex check check everything instead of failing. Merge groups skip the screenshot comparison, which is feedback for pull requests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pull requests to release branches, which have no merge queue, now run on the vscode-large-runners-*-8-core-merge-queue runners like the merge queue, so that the load of pull requests to main can't hold them up.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@lszomoru
Ladislau Szomoru (lszomoru) merged commit 4998a22 into main Nov 13, 2026
38 checks passed
@lszomoru
Ladislau Szomoru (lszomoru) deleted the agents/merge-queue-configuration-analysis branch November 13, 2026 11:16
@vs-code-engineering vs-code-engineering Bot added this to the 1.147.0 milestone Nov 13, 2026
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.

4 participants