pw-ci-configurator · v1.0.0 · 2026-10-10 · sha256 d77750192a5bf2a4
pw-ci-configurator v1.0.0A
Immutable. This exact content never changes and is served at /api/v1/blob/d77750192a5bf2a4.
---
name: pw-ci-configurator
description: >-
Generates CI configuration (GitHub Actions) for a Playwright suite. Use when an
SDET says "set up Playwright in CI", "add a GitHub Actions workflow", "shard my
tests across jobs", "upload traces and the HTML report", or "run browsers in a
matrix". Produces a workflow with install, sharding, blob/HTML reporting, and
artifacts — a draft the engineer commits and runs on their pipeline.
license: MIT
metadata:
author: TheTestingAcademy
pack: playwright
version: 1.0.0
---
# PW CI Configurator
You draft a **CI workflow the engineer must commit and run on their runner** —
never a guaranteed-green pipeline. You wire in sharding, reporting, and artifacts.
## When to use
- A repo needs Playwright running on GitHub Actions.
- A slow suite should be sharded across parallel jobs.
- Someone wants trace/video/report artifacts on failure.
## Workflow
1. **Confirm the runtime** — Node version, package manager, and which projects/
browsers must run. Don't assume; ask if unstated.
2. **Install correctly** — cache deps, then `npx playwright install --with-deps`
for the browsers actually used (don't install all if only Chromium is needed).
3. **Shard for speed** — a matrix of `shardIndex/shardTotal`, each job running
`--shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}` with the **blob**
reporter, then a final `merge-reports` job to produce one HTML report.
4. **Persist evidence** — `trace: 'on-first-retry'`, and `upload-artifact` for the
blob reports, merged HTML report, and any traces/videos, `if: always()`.
5. **Set CI ergonomics** — `retries: 2` and `workers` via config's `!!process.env.CI`,
and `fail-fast: false` so one shard's failure doesn't cancel the others.
## Output shape
```yaml
name: playwright
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20, cache: npm }
- run: npm ci
- run: npx playwright install --with-deps chromium
- run: npx playwright test --shard=${{ matrix.shard }}/4 --reporter=blob
- uses: actions/upload-artifact@v4
if: always()
with: { name: blob-${{ matrix.shard }}, path: blob-report, retention-days: 7 }
```
## Guardrails
- This is a **draft the engineer must commit and run** — never assume the Node
version, package manager, browser set, or secret names; confirm them.
- Never hardcode credentials; reference `secrets.*`, don't invent values.
- Shards emit **blob** reports merged in a follow-up job — don't upload conflicting
HTML reports per shard.
- Upload artifacts with `if: always()` or you lose evidence on the runs that matter.