UNPKG

skills-ws

Version:

87 agent skills for AI coding assistants — marketing, growth, web3, dev, design & operations. Built for OpenClaw, Claude Code, Cursor, and Codex.

107 lines (88 loc) • 3.46 kB
## Contents - CI Test Parallelization - Jest Sharding - Playwright Sharding - GitHub Actions Matrix - Playwright Sharding with Blob Reports - Split by Timing (Faster Shards) ## CI Test Parallelization ### Jest Sharding ```bash # Split across N shards (built-in since Jest 28) npx jest --shard=1/4 # run shard 1 of 4 npx jest --shard=2/4 npx jest --shard=3/4 npx jest --shard=4/4 ``` ### Playwright Sharding ```bash npx playwright test --shard=1/4 npx playwright test --shard=2/4 ``` ### GitHub Actions Matrix Coverage merge is the part that silently goes wrong. Vitest's **V8** provider does not emit nyc/Istanbul-compatible JSON, so `nyc merge` on raw V8 output produces empty or wrong reports. Two reliable options: **A. Let your coverage service merge (simplest, recommended).** Each shard uploads its own `lcov`/json; Codecov/Coveralls stitches them by commit SHA. No manual merge step. ```yaml # .github/workflows/test.yml jobs: test: strategy: { matrix: { shard: [1, 2, 3, 4] } } runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 # installs pnpm (reads version from packageManager) - uses: actions/setup-node@v4 with: { node-version: 22, cache: 'pnpm' } - run: pnpm install --frozen-lockfile # Each shard writes a uniquely-named lcov so uploads don't collide. - run: pnpm vitest run --shard=${{ matrix.shard }}/4 --coverage - uses: codecov/codecov-action@v5 # merges shards server-side by SHA with: files: ./coverage/lcov.info flags: shard-${{ matrix.shard }} token: ${{ secrets.CODECOV_TOKEN }} ``` **B. Merge yourself with Istanbul JSON.** Switch the Vitest provider to `istanbul` (which writes `coverage/coverage-final.json`), upload that per shard, then merge with `istanbul-merge` + `nyc report`: ```yaml merge-coverage: needs: test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v4 with: { pattern: coverage-*, path: shards/ } # each = coverage-final.json # Combine the per-shard Istanbul JSON into one map, then report. - run: npx istanbul-merge --out coverage/coverage-final.json shards/**/coverage-final.json - run: npx nyc report --reporter=text --reporter=lcov --temp-dir=coverage/ ``` (With provider `istanbul`, also `actions/upload-artifact@v4` each shard's `coverage/coverage-final.json` as `coverage-${{ matrix.shard }}` in the `test` job.) ### Playwright Sharding with Blob Reports ```yaml jobs: e2e: strategy: matrix: shard: [1, 2, 3, 4] steps: - run: npx playwright test --shard=${{ matrix.shard }}/4 - uses: actions/upload-artifact@v4 if: always() with: name: blob-report-${{ matrix.shard }} path: blob-report/ merge-reports: needs: e2e if: always() steps: - uses: actions/download-artifact@v4 with: { pattern: blob-report-*, merge-multiple: true, path: all-blob-reports/ } - run: npx playwright merge-reports --reporter=html all-blob-reports/ ``` ### Split by Timing (Faster Shards) ```bash # Use jest-junit to export timing, then split: npx jest --shard=1/4 --json --outputFile=timing.json # Or use Knapsack Pro / split-tests for optimal distribution npm i -D @split-tests/jest npx split-tests --junit-xml=results.xml --node-index=0 --node-total=4 | xargs npx jest ```