Repository navigation
ci: parallelize test suites and shard Web E2E - #642
Merged
Merged
Conversation
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.
Problem
The last successful integration run took about eight minutes: Web E2E took 8m01s and Windows took 7m45s. Node and Vitest run sequentially on every platform, browser cases use one worker, and Windows separately repeats terminal lifecycle coverage already present in its full suite.
Value
Reduce time to receive merge feedback while retaining all existing Node versions, Windows coverage, browser cases, package smoke tests and provider handoff acceptance.
Approach
all,node,ui,node-parallelandnode-serialselectors to the existing test runner. No argument still runs the full suite, and all selectors retain the non-empty discovery guard. The full command keeps Windows terminal files serialized after unrelated Node files. CI runs two disjoint ordinary-file shards (96 + 96 files) and the eight serialized terminal files on three independent Windows VMs, so unrelated processes cannot interfere. Invalid or empty shards fail before execution.Validation
actionlint .github/workflows/ci.yml: passed.bun run check: passed.bun run test: passed, 2,124 Node tests (8 skips) and 1,120 Vitest tests across 79 files.Impact
Previous revision CI results
Previous tested head:
833a7300d0184bcc3b423bb455d6d962c5d595fc(before the Windows sharding follow-up).These two previous-head observations are about 18–20% shorter than the original run; they are observations, not a guaranteed duration. Windows native Node tests remain the critical path. Browser jobs now take around three minutes instead of eight.
Cache evidence: Playwright, apt archive and Windows Bun restore keys were actually hit. Apt reported
Need to get 0 B/32.1 MB of archives; Windows dependency installation completed from the restored download cache and Effect verification succeeded. The corrected paths produce no parent-relative glob rejection. Dependencies still install against the lockfile; apt still installs/checks system packages.The first optimization run's cold apt download took 6m40s for 32.1 MB and its overall CI took 10m10s, showing why download caching and runner variability matter. All its tests passed; final cache save/reuse was subsequently verified on the frozen head above. The linked Actions runs retain logs and per-step timing evidence.
Windows sharding follow-up
Local check and full suite passed. The follow-up retains all standard hosted runners and existing aggregation gates, adding two Windows VMs (12 test jobs + 5 gates). Windows Node matrix aggregation requires all three groups to succeed. Frozen head
4a31a17b2e4611fa04b8b1547e9a3e3f637e7609passed all 17 CI jobs in run 36961846334. Wall time from first job start through all aggregation gates was 4m08s, versus the previous revision's 6m36s (~37% shorter) and the original 8m01s (~48% shorter). This is one observed run, not a guaranteed duration. Windows ordinary shards finished in 3m11s / 3m43s and the isolated process group in 2m06s, including setup and cleanup. Required legacy check names remain successful. No additional rerun was needed. Standard hosted runners on this public repository have no compute-minute charge: GitHub runner documentation. The plan concurrency limit still applies.