Skip to content

Playwright CI suite runtime up ~63% in 9 days (131s→213s), no sharding — will keep compounding #394

Description

@mkofler96

Problem

The "Run frontend tests" step of the Frontend CI job has grown steadily over the last ~9 days, measured directly from workflow run history (ci.yml, job "Frontend", step "Run frontend tests"):

Date Run Duration
2026-07-03 #660 (fdeff06) 131s
2026-07-04 #689 (0cfb6f5) 137s
2026-07-09 #715 (ed5bb2f) 160s
2026-07-12 #742 (03e830e, current HEAD) 213s

That's a ~63% increase in under two weeks, with no corresponding change to CI parallelism. web/playwright.config.ts sets no workers/shard option, and the Frontend job in ci.yml runs the whole suite serially in a single runner — there is no --shard matrix like Playwright supports.

Root cause

Six new full end-to-end Playwright spec files were added in the same window (git log --diff-filter=A --since=2026-07-03 -- web/tests):
edge-pick.spec.ts, auto-shell.spec.ts, crane-hook-example.spec.ts, multibody-materials.spec.ts, multibody-solve.spec.ts, new-analysis.spec.ts.

The largest single contributor is the mixed shell/solid case added in #392: web/tests/example-load.spec.ts sets test.setTimeout(180_000) and drives a real in-browser RBE3-coupled CG solve (thousands of iterations per the commit message) against a newly committed 2.06 MB crane-hook-shell.vtu fixture. web/tests/edge-pick.spec.ts (90s timeout, real viewport-click flow) is a secondary contributor.

This isn't a bug in any one PR — it's the natural result of the project's validation strategy (one full-browser-plus-WASM spec per new physics capability) with no CI-side scaling to match. At the current growth rate, the frontend job will keep costing more per PR indefinitely as more example/physics coverage is added (see the roadmap of pending shell/multibody capabilities: #354, #355, #357, #359, #388, #389).

Suggested fix

  • Shard the Playwright run across parallel CI jobs (npx playwright test --shard=1/N style matrix), mirroring the pattern CI already uses to run rust / clang-tidy / wasm as separate parallel jobs.
  • Alternatively/additionally, split "fast" unit-style specs from "slow" full-solve example specs so the fast set can gate quickly and the slow set runs with more parallelism.
  • Track this going forward — e.g. fail CI (or at least warn) if the frontend test step exceeds some threshold, so future growth is caught before it silently becomes the new normal.

Related

Distinct from #365 (no unit tests in the Rust bridge crates — a coverage gap, not a runtime one).

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions