Files
english/.opencode/skills/web-testing/references/ci-cd-testing-workflows.md
2026-04-12 01:06:31 +07:00

2.5 KiB

CI/CD Testing Workflows

GitHub Actions - Complete Workflow

name: Test Suite
on:
  push:
    branches: [main]
  pull_request:

jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20, cache: 'npm' }
      - run: npm ci
      - run: npm run test:unit -- --coverage
      - uses: actions/upload-artifact@v4
        with: { name: coverage, path: coverage/ }

  e2e-tests:
    needs: unit-tests
    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
      - run: npx playwright test --shard=${{ matrix.shard }}/4
      - uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: playwright-report-${{ matrix.shard }}
          path: playwright-report/

Test Splitting

# By shard (equal files)
npx playwright test --shard=1/4

# By timing (Knapsack)
- uses: chaosaffe/split-tests@v1
  with:
    glob: 'tests/**/*.spec.ts'
    split-total: ${{ matrix.shard }}

Caching

- uses: actions/cache@v4
  with:
    path: |
      ~/.npm
      ~/.cache/ms-playwright
    key: ${{ runner.os }}-${{ hashFiles('package-lock.json') }}

Flaky Test Management

- run: npx playwright test --retries=2
- run: npx playwright test --grep-invert @flaky  # Quarantine

Performance & Security Gates

- run: npm install -g @lhci/cli && lhci autorun
- run: npm audit --audit-level=high
- uses: github/codeql-action/analyze@v3

Merge Reports

merge-reports:
  needs: e2e-tests
  steps:
    - uses: actions/download-artifact@v4
      with: { pattern: playwright-report-*, merge-multiple: true }
    - run: npx playwright merge-reports ./all-reports

GitLab CI

stages: [test, e2e]

unit:
  stage: test
  script: [npm ci, npm run test:unit]

e2e:
  stage: e2e
  parallel: 4
  script:
    - npm ci && npx playwright install --with-deps
    - npx playwright test --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL
  artifacts:
    when: on_failure
    paths: [playwright-report/]

Best Practices

  • Fail fast: Unit tests before E2E
  • Parallelism: Shard E2E across jobs
  • Cache: npm, Playwright browsers
  • Artifacts on failure: Reports for debugging
  • Security gates: npm audit, SAST before merge