Speed up playwright (pt2: full parallelization) #3470
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Playwright Tests | |
on: | |
push: | |
branches: [master] | |
pull_request: | |
permissions: | |
contents: read | |
jobs: | |
playwright-tests: | |
timeout-minutes: 60 | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
shardIndex: [1, 2, 3, 4] | |
shardTotal: [4] | |
steps: | |
- name: Remove all fonts | |
run: rm -rf /usr/share/fonts | |
- uses: actions/checkout@v4 | |
- name: Install CJK fonts | |
uses: awalsh128/cache-apt-pkgs-action@a6c3917cc929dd0345bfb2d3feaf9101823370ad # v1.4.2 | |
with: | |
packages: fonts-ipafont-mincho | |
execute_install_scripts: true | |
- uses: ./.github/actions/setup | |
- name: Build | |
run: npm run build | |
- name: Cache playwright browsers | |
id: cache-playwright | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cache/ms-playwright | |
key: cache-playwright-${{ hashFiles('package-lock.json') }} # playwright version is included in package-lock, so this serves as a reasonable cache key | |
- if: ${{ steps.cache-playwright.outputs.cache-hit != 'true' }} | |
name: Install Playwright Browsers | |
run: npx playwright install chromium | |
- name: Grab latest dictionaries from dictionaries branch | |
uses: actions/checkout@v4 | |
with: | |
repository: yomidevs/yomitan # so that this works on forks | |
ref: dictionaries | |
path: dictionaries | |
- name: Grab latest screenshots from master branch | |
uses: dawidd6/action-download-artifact@80620a5d27ce0ae443b965134db88467fc607b43 # pin@v2 | |
continue-on-error: true | |
id: master-screenshots | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
repo: yomidevs/yomitan # so that this works on forks | |
name: playwright-screenshots | |
branch: master | |
workflow: playwright.yml | |
workflow_conclusion: success | |
path: test/playwright/__screenshots__/ | |
- name: "[PR] Generate new screenshots & compare against master" | |
id: playwright | |
run: | | |
npx playwright test 2>&1 | tee ./playwright-output || true | |
continue-on-error: true | |
if: github.event_name == 'pull_request' && steps.master-screenshots.outcome != 'failure' | |
- name: "[Push] Generate new authoritative screenshots for master" | |
id: playwright-master | |
run: npx playwright test -u | |
if: github.event_name == 'push' | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: playwright-screenshots-${{ matrix.shardIndex }} | |
path: test/playwright/__screenshots__/ | |
retention-days: 1 | |
- name: Upload blob report to GitHub Actions Artifacts | |
if: ${{ !cancelled() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: blob-report-${{ matrix.shardIndex }} | |
path: blob-report | |
retention-days: 1 | |
- name: "[PR] Store steps.master-screenshots.outcome in a file" | |
run: echo ${{ steps.master-screenshots.outcome }} > ./master-screenshots-outcome | |
if: github.event_name == 'pull_request' | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: master-screenshots-outcome-${{ matrix.shardIndex }} | |
path: master-screenshots-outcome | |
if: github.event_name == 'pull_request' | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: playwright-output-${{ matrix.shardIndex }} | |
path: playwright-output | |
retention-days: 1 | |
if: github.event_name == 'pull_request' | |
merge-reports: | |
timeout-minutes: 60 | |
runs-on: ubuntu-latest | |
# Merge reports after playwright-tests, even if some shards have failed | |
if: ${{ !cancelled() }} | |
needs: [playwright-tests] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/setup | |
### playwright-report | |
- name: Download blob reports from GitHub Actions Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: all-blob-reports | |
pattern: blob-report-* | |
merge-multiple: true | |
- name: Merge into HTML Report | |
run: npx playwright merge-reports --reporter html ./all-blob-reports | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: playwright-report | |
path: playwright-report/ | |
### playwright-screenshots | |
- name: Download & merge screenshots from GitHub Actions Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: test/playwright/__screenshots__ | |
pattern: playwright-screenshots-* | |
merge-multiple: true | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: playwright-screenshots | |
path: test/playwright/__screenshots__/ | |
### master-screenshots-outcome | |
- name: Download master-screenshots-outcome files | |
uses: actions/download-artifact@v4 | |
with: | |
path: master-screenshots-outcomes | |
pattern: master-screenshots-outcome-* | |
merge-multiple: true | |
- name: Check if any shard failed to download master screenshots | |
run: | | |
if grep -q "failure" master-screenshots-outcomes/*; then | |
echo "failure" > merged-master-screenshots-outcome | |
else | |
echo "success" > merged-master-screenshots-outcome | |
fi | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: master-screenshots-outcome | |
path: merged-master-screenshots-outcome | |