GitHub Actions для Playwright: мой оптимальный workflow Вот YAML, который я использую в реальных проектах. Разбираю каждую важную строчку.

Это не «Hello World» workflow — это конфиг, который прошёл через несколько продуктовых проектов.

name: Playwright Tests

on: push: branches: [main] pull_request:

jobs: test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: shard: [1, 2, 3, 4] # 4 параллельных раннера

steps:

  • uses: actions/checkout@v4

  • uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' # кэш node_modules

  • name: Install dependencies run: npm ci

  • name: Cache Playwright browsers uses: actions/cache@v4 id: playwright-cache with: path: ~/.cache/ms-playwright key: playwright-${{ hashFiles('package-lock.json') }}

  • name: Install browsers if: steps.playwright-cache.outputs.cache-hit != 'true' run: npx playwright install --with-deps

  • name: Run tests (shard) run: npx playwright test --shard=${{ matrix.shard }}/4

  • uses: actions/upload-artifact@v4 if: always() with: name: report-${{ matrix.shard }} path: playwright-report/

Три момента, которые экономят больше всего:

• Кэш браузеров по хешу package-lock.json — установка занимает 15 секунд вместо 2 минут. Браузеры скачиваются только при обновлении зависимостей. • fail-fast: false — все шарды дорабатывают до конца, даже если один упал. Вы видите полную картину, а не первое падение. • matrix.shard с 4 раннерами — 500 тестов за 4 минуты вместо 16. Стоит $0 на GitHub Free.

Типичная ошибка: пропустить --with-deps при установке браузеров — Chromium запустится, но без системных библиотек. В Ubuntu это libnss3, libatk-bridge и другие. Флаг ставит всё сразу.

Что добавили бы в этот workflow? Может, есть трюк, который я пропустил — буду рад узнать.

#github_actions #playwright #ci_cd #sdet #typescript #ts @haradkou_sdet