Skip to content

CI: workflow_dispatch job for the Playwright E2E smoke suite #387

Description

@mforce

Slice 3 of 3 from #277. Depends on the harness from #385.

What this lands

A workflow_dispatch-only GitHub Actions workflow that stands up the stack, seeds it, and runs the Playwright E2E smoke suite.

workflow_dispatch only — deliberately not automatic. The same reasoning that keeps the #243 sim harness out of CI applies here and applies harder: this needs a full app + Postgres boot plus a multi-minute seed before the first assertion runs, so a per-push job would be badly out of proportion to what it checks. The trade the owner accepted: it costs nothing until somebody clicks it, at the price of a workflow that nothing exercises on its own — so keeping it working is a human responsibility, exactly like tools/simulation/ itself (see the "KEEPING THIS HARNESS ALIVE" section of tools/simulation/README.md, and the #370 rule in AGENTS.md).

The portability constraint this slice actually has to solve

A GitHub runner is not NixOS. Locally the suite drives the system chromium via an explicit executable path, because Playwright's downloaded browsers do not launch on NixOS. On a runner the opposite is true — there is no system chromium, and npx playwright install chromium is the working path.

So the browser resolution has two live paths, and this workflow is the only thing that would ever exercise the second one. If it is never run, that path rots silently. Note that plainly in the workflow and in the harness README.

Acceptance

  • Dispatchable from the Actions tab; runs nowhere else.
  • Boots the stack, seeds the simulation fixture, runs the smoke suite, uploads the Playwright report as an artifact.
  • Uses the downloaded-browser path (not the NixOS system-chromium path) and proves that path works.
  • States its own approximate billed cost in the workflow file, so a future "why isn't this on every PR?" is answered where the question gets asked.
  • Fails loudly on fixture/config drift rather than running the suite against a half-seeded database.

Tracked in epic #15, under #277.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions