Skip to content

Playwright e2e never runs on PRs or main — green CI does not mean the browser suite passed #564

Description

@BorisTyshkevich

What

The Playwright e2e suite never runs on pull requests, or on pushes to main. .github/workflows/ci.yml:317:

  e2e:
    if: >-
      (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')) ||
      github.event_name == 'schedule' ||
      github.event_name == 'workflow_dispatch'

So the e2e job reports skipped on every PR and every main push, while the overall run reports success. A green check on a PR does not mean the browser suite passed — it means it never ran.

Why this is not theoretical

A batch of bug/low issues shipped today as PRs #554#558 and #561#562. Every one showed green CI; e2e was skipped on all of them. Two of those PRs (#556, #557) changed and added e2e specs, and those specs were never executed by CI.

Dispatching the workflow manually against main (run 30474498800, commit 8decf2b) gave the first real signal in this range:

6 failed, 568 passed (6.2m)

with the same two specs failing deterministically on all three engines (chromium, firefox, webkit):

  • tests/e2e/tile-open-workbench.spec.js:349expect(wide.height).toBeGreaterThan(before.height), expected > 208, received 208
  • tests/e2e/tile-open-workbench.spec.js:398items['t-sales']?.span expected 2, received null

That is a real, already-merged regression on main that a PR-level browser check would have caught at the PR. It is filed separately.

Local runs are not a substitute: they are also unreliable here for an unrelated reason (see the shared-port defect in the companion issue), so between the two there is currently no dependable e2e signal at PR time at all.

Suggested fix

Add a path-gated Chromium-only job that runs on pull requests when src/**, tests/e2e/**, playwright.config.js or src/styles.css change, and keep the full three-engine matrix for tags, nightly and manual dispatch. One engine on the affected paths is cheap and would have caught both failures above, since they reproduce on chromium.

Whatever the gating, the CI gate job should not report success when a job that was expected to run was skipped for a path reason — a skipped browser suite should be visible at the PR, not silently green.

Why deferred

Found while shipping unrelated bug/low issues; changing CI topology was outside every one of their scopes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinginboxFiled mid-task; not yet triaged into the roadmap

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions