name: regenerating-screenshots description: 'Creates a PR to regenerate Playwright screenshot expectations. Use when screenshot tests are failing on main or PRs due to stale golden images. Triggers on: regen screenshots, regenerate screenshots, update expectations, fix screenshot tests.'
Regenerating Playwright Screenshot Expectations
Automates the process of triggering the PR: Update Playwright Expectations
GitHub Action by creating a labeled PR from origin/main.
Steps
Fetch latest main
git fetch origin mainCreate a timestamped branch from
origin/mainFormat:
regen-screenshots/YYYY-MM-DDTHH(hour resolution, local time)git checkout -b regen-screenshots/<datetime> origin/mainCreate an empty commit
git commit --allow-empty -m "test: regenerate screenshot expectations"Push the branch
git push origin regen-screenshots/<datetime>Generate a poem about regenerating screenshots. Be creative — a new, unique poem every time. Short (4–8 lines). Can be funny, wistful, epic, haiku-style, limerick, sonnet fragment — vary the form.
Create the PR with the poem as the body (no label yet).
Write the poem to a temp file and use
--body-file:# Write poem to temp file # Create PR: gh pr create \ --base main \ --head regen-screenshots/<datetime> \ --title "test: regenerate screenshot expectations" \ --body-file <temp-file>Add the label as a separate step to trigger the GitHub Action.
The
labeledevent only fires when a label is added after PR creation, not when applied during creation via--label.Use the GitHub API directly (
gh pr edit --add-labelfails due to deprecated Projects Classic GraphQL errors):gh api repos/{owner}/{repo}/issues/<pr-number>/labels \ -f "labels[]=New Browser Test Expectations" --method POSTReport the result to the user:
- PR URL
- Branch name
- Note that the GitHub Action will run automatically and commit updated screenshots to the branch.
Notes
- The
New Browser Test Expectationslabel triggers thepr-update-playwright-expectations.yamlworkflow. - The workflow runs Playwright with
--update-snapshots, commits results back to the PR branch, then removes the label. - This is fire-and-forget — no need to wait for or monitor the Action.
- Always return to the original branch/worktree state after pushing.