Skip to content

ci(e2e): unify Linux + Windows UI tests into one parallel workflow#1027

Merged
wenytang-ms merged 7 commits into
mainfrom
ci/parallel-e2e-plans
Jun 5, 2026
Merged

ci(e2e): unify Linux + Windows UI tests into one parallel workflow#1027
wenytang-ms merged 7 commits into
mainfrom
ci/parallel-e2e-plans

Conversation

@wenytang-ms
Copy link
Copy Markdown
Contributor

@wenytang-ms wenytang-ms commented Jun 5, 2026

Summary

Consolidates the two former UI workflow files (linuxUI.yml, windowsUI.yml) into a single e2eUI.yml with per-OS pipelines and per-plan parallelism via matrix strategy.

Modelled after vscode-java-pack/.github/workflows/e2e-autotest.yml.

Background: with 5+ e2e plans (and growing) the previous single sequential job (autotest run-all) was pushing past the 30-minute per-job timeout. Splitting into per-plan matrix jobs lets every plan run independently.

New pipeline (single workflow file)

lint               (ubuntu, OS-agnostic)
discover-plans

build-linux   ──┐
e2e-linux  (×N) ┤
                ├──→ analyze  → unified summary covering both OSes
build-windows ──┤
e2e-windows(×N) ┘
Job Purpose
lint tslint + checkstyle (ubuntu, OS-agnostic)
discover-plans Scan test/e2e-plans/*.yaml → emit JSON matrix
build-linux / build-windows Build OSGi + vsce package → upload per-OS VSIX artifact
e2e-linux (matrix per plan) Depends only on build-linux. Downloads VSIX, runs plan under Xvfb 1920×1080
e2e-windows (matrix per plan) Depends only on build-windows. Downloads VSIX, runs plan
analyze if: always() — downloads all plan results from both OSes, prefixes each plan dir by OS (linux-…, windows-…), runs autotest analyze once, writes one combined summary.md into $GITHUB_STEP_SUMMARY

Notes

  • Per-OS pipelines are fully independent: a slow Windows build cannot delay the start of Linux e2e plans, and vice versa.
  • fail-fast: false — a single flaky plan doesn't cancel its siblings.
  • VSIX is built once per OS and shared via artifact instead of being rebuilt per plan.
  • Per-job timeout reduced 30 → 25 min.
  • No gate jobs: each matrix cell surfaces as its own PR check, so failures are visible without an extra summary gate. ⚠️ Branch protection rules that previously required Linux-UI / Windows-UI checks will need to be updated to require either E2E Summary (the analyze job) or the individual matrix check names (e.g. E2E Linux (java-dep-build-lifecycle)), otherwise PRs will appear to wait forever for the old check names.
  • Each plan's screenshots/results live in their own artifact (e2e-results-<os>-<plan>), making per-plan triage easier.

Follow-up

Independent of the Phase-A coverage PR; this PR only changes CI plumbing.

wenytang-ms and others added 2 commits May 28, 2026 10:42
Adds three more vscode-java-dependency commands to the E2E plans, each
exercised through its documented user-visible UI surface:

* java-dep-new-types.yaml
  - Adds a 7th cycle for newJavaRecord between Annotation and Abstract
    Class. The Record option is filtered out for projects below Java 16
    (see JavaType.getDisplayNames in src/explorerCommands/new.ts); the
    fixture pom.xml is Java 17 so the option renders. Plan goes from
    64 → 75 steps.

* java-dep-build-lifecycle.yaml
  - Adds Test 6: java.project.update via the Maven submenu on the
    project context menu (the command's only UI mount — no palette,
    no toolbar). Uses the new 'contextMenuSubmenu' autotest action
    that hovers a submenu trigger then clicks a leaf inside the
    nested menu.
  - Adds Test 7: java.project.clean.workspace via the view-title
    overflow menu. The command may or may not raise a confirmation
    dialog depending on JDT.LS state; we use the tolerant
    tryClickDialogButton variant so the step passes either way
    (cancelling the dialog if shown, avoiding the destructive
    VS Code reload). Plan goes from 18 → 26 steps.

Requires @vscjava/vscode-autotest >= 0.7.11 (adds contextMenuSubmenu).

Locally verified:
  java-dep-new-types.yaml         75/75 passing
  java-dep-build-lifecycle.yaml   26/26 passing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Refactor linuxUI.yml and windowsUI.yml from a single sequential job

running autotest run-all into a 5-job parallel pipeline modelled after

vscode-java-pack/.github/workflows/e2e-autotest.yml:

  1. build-<os>: produce VSIX once, upload as artifact

  2. discover-plans: scan test/e2e-plans/*.yaml -> matrix output

  3. e2e-<os> (matrix per plan): download VSIX, run a single plan

  4. analyze-<os>: aggregate results.json across plans into summary.md

  5. linux-ui / windows-ui: gate job preserving the original required

     status-check name so existing branch protection keeps working

Per-job timeout drops to 25 min and individual plan failures surface

independently. Sub-screenshots from each plan are preserved per-plan

in their own artifact for easier triage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Merges the per-OS workflows (linuxUI.yml, windowsUI.yml) into a single

e2eUI.yml with a unified entry point and a single shared summary.

Structure:

  - discover-plans                       (matrix output)

  - build-linux / build-windows          (VSIX artifacts)

  - e2e-linux / e2e-windows (matrix)     (one job per (OS, plan))

  - analyze                              (one combined summary across both OSes,

                                          plan dirs prefixed by OS for clarity)

  - Linux-UI / Windows-UI (gate jobs)    (preserve required status-check names)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@wenytang-ms wenytang-ms changed the title ci(e2e): parallelize UI tests across plans with matrix strategy ci(e2e): unify Linux + Windows UI tests into one parallel workflow Jun 5, 2026
wenytang-ms and others added 3 commits June 5, 2026 11:08
Reworks the e2e workflow so {os, plan} is a single cartesian matrix

instead of two parallel jobs (e2e-linux, e2e-windows):

  - lint              tslint + checkstyle (ubuntu, OS-agnostic)

  - discover-plans

  - build (matrix on os)

  - e2e   (matrix on {os, plan})       cartesian 2 x N parallel jobs

  - analyze                            one combined summary across both OSes

  - Linux-UI / Windows-UI gates        preserve required-check names

Inspired by vscode-java-pack/e2e-autotest.yml extended with an OS

dimension. OS-specific steps (Xvfb, shell flavor) are guarded by

runner.os conditionals.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Each matrix cell already surfaces as its own PR check, so a separate

gate is unnecessary. Branch protection should be updated to require

the individual matrix checks (or the 'E2E Summary' job) directly.

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

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR refactors the repository’s E2E UI CI by replacing the separate Linux/Windows workflows with a single unified workflow that builds VSIX artifacts per OS and runs UI plans in parallel via a matrix, then aggregates results into one summary. It also updates two E2E plan YAMLs to expand UI coverage (notably adding a “Record” creation flow and adding project “Reload/Clean” coverage).

Changes:

  • Replace .github/workflows/linuxUI.yml + windowsUI.yml with a consolidated .github/workflows/e2eUI.yml using matrix parallelism and a unified analysis job.
  • Extend java-dep-new-types.yaml to include “New Record” coverage and renumber subsequent tests.
  • Extend java-dep-build-lifecycle.yaml to cover java.project.update (via Maven submenu) and java.project.clean.workspace (via view overflow).

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
test/e2e-plans/java-dep-new-types.yaml Adds “New Record” flow and shifts later steps to keep coverage of all “New …” options.
test/e2e-plans/java-dep-build-lifecycle.yaml Adds additional build-lifecycle command coverage (update + clean workspace) using UI entry points.
.github/workflows/windowsUI.yml Removes the legacy Windows-only UI workflow.
.github/workflows/linuxUI.yml Removes the legacy Linux-only UI workflow.
.github/workflows/e2eUI.yml Introduces a unified, parallel OS×plan E2E UI workflow with shared analysis/summary.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/e2eUI.yml Outdated
Comment thread .github/workflows/e2eUI.yml Outdated
Folding OS into the e2e matrix forced every cell to wait for the entire

build matrix to finish (Linux + Windows), so a slow Windows build delayed

Linux e2e jobs by ~2.5 min unnecessarily (Copilot review feedback).

Split back into independent per-OS pipelines:

  build-linux   -> e2e-linux  (matrix on plan)

  build-windows -> e2e-windows (matrix on plan)

Both pipelines feed into the shared discover-plans + analyze jobs, so the

unified entry point and combined summary are preserved.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@wenytang-ms wenytang-ms merged commit 11a0645 into main Jun 5, 2026
40 of 42 checks passed
@wenytang-ms wenytang-ms deleted the ci/parallel-e2e-plans branch June 5, 2026 06:16
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.

3 participants