name: Update Visual Baselines on: workflow_dispatch: permissions: contents: write pull-requests: write jobs: update-baselines: name: Regenerate linux visual baselines runs-on: ubuntu-latest timeout-minutes: 120 # The e2e webServer (playwright.config.ts) creates an isolated database via # tests/e2e-pg-create-db.cjs, so it needs Postgres + Redis on localhost. # Without these services the webServer fails with "failed to create database". services: postgres: image: postgres:17-alpine env: POSTGRES_USER: snapotter POSTGRES_PASSWORD: snapotter POSTGRES_DB: snapotter ports: - 5432:5432 options: >- --health-cmd "pg_isready -U snapotter" --health-interval 5s --health-timeout 3s --health-retries 10 redis: image: redis:8-alpine ports: - 6379:6379 options: >- --health-cmd "redis-cli ping" --health-interval 5s --health-timeout 3s --health-retries 10 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: ./.github/actions/setup - name: Get Playwright version id: pw-version run: echo "version=$(node -p "require('@playwright/test/package.json').version")" >> "$GITHUB_OUTPUT" - name: Cache Playwright browsers uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.cache/ms-playwright key: playwright-${{ runner.os }}-${{ steps.pw-version.outputs.version }} - name: Install Playwright browsers (chromium + webkit for device projects) run: pnpm playwright install --with-deps chromium webkit - name: Regenerate baselines (desktop + device projects) run: pnpm playwright test --project=chromium-visual --project=mobile-chromium --project=mobile-webkit --project=tablet-webkit --project=tablet-chromium --update-snapshots env: PW_WORKERS: "2" - name: Open PR with refreshed baselines env: GH_TOKEN: ${{ github.token }} run: | if git diff --quiet -- 'tests/e2e/__screenshots__'; then untracked=$(git ls-files --others --exclude-standard -- 'tests/e2e/__screenshots__') if [ -z "$untracked" ]; then echo "No baseline changes." exit 0 fi fi BRANCH="chore/visual-baselines-${GITHUB_RUN_ID}" git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git checkout -b "$BRANCH" git add tests/e2e/__screenshots__ git commit -m "test(e2e): refresh linux visual baselines" git push origin "$BRANCH" gh pr create --title "test(e2e): refresh linux visual baselines" \ --body "Automated baseline refresh from the update-visual-baselines workflow. Review the image diffs before merging." \ --base main --head "$BRANCH"