# Pw CI Configurator

> 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.

- Skill: `pramoddutta/pw-ci-configurator-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add pramoddutta/pw-ci-configurator-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/pramoddutta/pw-ci-configurator-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- License: MIT
- Author: PramodDutta (https://skillmd.com/u/pramoddutta)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/pramoddutta/pw-ci-configurator-2

---


# 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.

