[PR #7459] [WIP] Update VRT screenshots workflow #48999

Open
opened 2026-04-26 10:51:57 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/actualbudget/actual/pull/7459
Author: @StephenBrown2
Created: 4/10/2026
Status: 🔄 Open

Base: masterHead: prune-vrt-snapshots


📝 Commits (1)

  • 87912de Update VRT screenshots workflow

📊 Changes

11 files changed (+410 additions, -25 deletions)

View changed files

📝 .github/workflows/e2e-test.yml (+27 -0)
📝 .github/workflows/e2e-vrt-comment.yml (+64 -1)
📝 .github/workflows/vrt-update-generate.yml (+24 -3)
📝 package.json (+1 -0)
📝 packages/desktop-client/README.md (+3 -0)
packages/desktop-client/bin/prune-vrt-snapshots.mjs (+160 -0)
📝 packages/desktop-client/e2e/fixtures.ts (+66 -21)
packages/desktop-client/e2e/load-playwright-globals.cjs (+13 -0)
packages/desktop-client/e2e/vrt-manifest.mjs (+45 -0)
📝 packages/desktop-client/package.json (+1 -0)
upcoming-release-notes/7459.md (+6 -0)

📄 Description

Description

This PR improves the visual regression test (VRT) update pipeline and how contributors see status on pull requests.

Prune orphaned web VRT snapshots. When tests or themes change, old PNGs can remain under e2e/*-snapshots even though Playwright no longer references them. During VRT runs (VRT=true), toMatchThemeScreenshots records each expected snapshot path into a per-worker manifest under e2e/.vrt-manifest/. A new script (yarn vrt:prune / prune-vrt-snapshots) deletes PNGs in snapshot folders that are not listed in that manifest, so local and CI updates do not leave stale files behind. The VRT update workflow clears the manifest before a run, clears Electron baseline PNGs before regeneration, runs the prune step after --update-snapshots, and stages snapshot changes with git add --no-ignore-removal on the web and desktop-electron e2e trees so removals are included in the generated patch (non-PNG paths are unstaged).

Clearer PR comments when a VRT update is already running. The E2E VRT comment workflow checks whether VRT Update - Generate is already queued or in progress for the PR’s current head commit. If so, the sticky comment still links to the failing VRT report but also points to the active workflow run instead of only suggesting /update-vrt again.

Extracted from the earlier PR #6954 which renamed VRT tests, and thus resulted in orphaned PNGs, still tracked in git.

Testing

  • Prune script: Run web VRT with VRT=true so .vrt-manifest is populated, add or rename a bogus PNG under an e2e/*-snapshots directory, run yarn vrt:prune from the repo root, and confirm only unreferenced files are removed.
  • CI workflows: Validate on a PR where VRT fails: (1) comment posts as before when no update run is active; (2) when /update-vrt has already triggered VRT Update - Generate, the alternate sticky message includes a link to that run; (3) a full VRT update produces a patch that includes deleted baseline PNGs where appropriate.
  • E2E / fixtures: yarn workspace @actual-app/web exec playwright test --list should list all tests (no load error from fixtures.ts). Run normal E2E (without VRT) in CI or locally to confirm unchanged behavior for non-VRT runs.

Checklist

  • Release notes added (see link above)
  • No obvious regressions in affected areas
  • Self-review has been performed - I understand what each change in the code does and why it is needed

Bundle Stats

Bundle Files count Total bundle size % Changed
desktop-client 28 12.91 MB → 12.91 MB (+62 B) +0.00%
loot-core 1 4.84 MB 0%
api 1 3.88 MB 0%
cli 1 7.89 MB 0%
View detailed bundle stats

desktop-client

Total

Files count Total bundle size % Changed
28 12.91 MB → 12.91 MB (+62 B) +0.00%
Changeset
File Δ Size
package.json 📈 +62 B (+0.74%) 8.19 kB → 8.25 kB
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger

Asset File Size % Changed
static/js/index.js 3.32 MB → 3.32 MB (+62 B) +0.00%

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
static/js/BackgroundImage.js 121.09 kB 0%
static/js/FormulaEditor.js 853.16 kB 0%
static/js/ReportRouter.js 1.18 MB 0%
static/js/TransactionList.js 82.49 kB 0%
static/js/Value.js 4.33 MB 0%
static/js/ca.js 191.72 kB 0%
static/js/da.js 104.4 kB 0%
static/js/de.js 174.12 kB 0%
static/js/en-GB.js 8.2 kB 0%
static/js/en.js 175.88 kB 0%
static/js/es.js 181.54 kB 0%
static/js/extends.js 485.17 kB 0%
static/js/fr.js 176.79 kB 0%
static/js/indexeddb-main-thread-worker-e59fee74.js 13.46 kB 0%
static/js/it.js 165.68 kB 0%
static/js/narrow.js 363.02 kB 0%
static/js/nb-NO.js 151.58 kB 0%
static/js/nl.js 108.66 kB 0%
static/js/pl.js 88.34 kB 0%
static/js/pt-BR.js 177.18 kB 0%
static/js/resize-observer.js 18.06 kB 0%
static/js/th.js 178.91 kB 0%
static/js/theme.js 30.79 kB 0%
static/js/uk.js 212.28 kB 0%
static/js/wide.js 295 B 0%
static/js/workbox-window.prod.es5.js 7.33 kB 0%
static/js/zh-Hans.js 110.19 kB 0%

loot-core

Total

Files count Total bundle size % Changed
1 4.84 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
kcab.worker.B_XN_qvd.js 4.84 MB 0%

api

Total

Files count Total bundle size % Changed
1 3.88 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
index.js 3.88 MB 0%

cli

Total

Files count Total bundle size % Changed
1 7.89 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
cli.js 7.89 MB 0%

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/actualbudget/actual/pull/7459 **Author:** [@StephenBrown2](https://github.com/StephenBrown2) **Created:** 4/10/2026 **Status:** 🔄 Open **Base:** `master` ← **Head:** `prune-vrt-snapshots` --- ### 📝 Commits (1) - [`87912de`](https://github.com/actualbudget/actual/commit/87912de221624cf10a53add5794f33dd1cf9aeb7) Update VRT screenshots workflow ### 📊 Changes **11 files changed** (+410 additions, -25 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/e2e-test.yml` (+27 -0) 📝 `.github/workflows/e2e-vrt-comment.yml` (+64 -1) 📝 `.github/workflows/vrt-update-generate.yml` (+24 -3) 📝 `package.json` (+1 -0) 📝 `packages/desktop-client/README.md` (+3 -0) ➕ `packages/desktop-client/bin/prune-vrt-snapshots.mjs` (+160 -0) 📝 `packages/desktop-client/e2e/fixtures.ts` (+66 -21) ➕ `packages/desktop-client/e2e/load-playwright-globals.cjs` (+13 -0) ➕ `packages/desktop-client/e2e/vrt-manifest.mjs` (+45 -0) 📝 `packages/desktop-client/package.json` (+1 -0) ➕ `upcoming-release-notes/7459.md` (+6 -0) </details> ### 📄 Description ## Description This PR improves the visual regression test (VRT) update pipeline and how contributors see status on pull requests. **Prune orphaned web VRT snapshots.** When tests or themes change, old PNGs can remain under `e2e/*-snapshots` even though Playwright no longer references them. During VRT runs (`VRT=true`), `toMatchThemeScreenshots` records each expected snapshot path into a per-worker manifest under `e2e/.vrt-manifest/`. A new script (`yarn vrt:prune` / `prune-vrt-snapshots`) deletes PNGs in snapshot folders that are not listed in that manifest, so local and CI updates do not leave stale files behind. The VRT update workflow clears the manifest before a run, clears Electron baseline PNGs before regeneration, runs the prune step after `--update-snapshots`, and stages snapshot changes with `git add --no-ignore-removal` on the web and desktop-electron `e2e` trees so **removals** are included in the generated patch (non-PNG paths are unstaged). **Clearer PR comments when a VRT update is already running.** The E2E VRT comment workflow checks whether **VRT Update - Generate** is already queued or in progress for the PR’s current head commit. If so, the sticky comment still links to the failing VRT report but also points to the active workflow run instead of only suggesting `/update-vrt` again. ## Related issue(s) Extracted from the earlier PR #6954 which renamed VRT tests, and thus resulted in orphaned PNGs, still tracked in git. ## Testing - **Prune script:** Run web VRT with `VRT=true` so `.vrt-manifest` is populated, add or rename a bogus PNG under an `e2e/*-snapshots` directory, run `yarn vrt:prune` from the repo root, and confirm only unreferenced files are removed. - **CI workflows:** Validate on a PR where VRT fails: (1) comment posts as before when no update run is active; (2) when `/update-vrt` has already triggered **VRT Update - Generate**, the alternate sticky message includes a link to that run; (3) a full VRT update produces a patch that includes deleted baseline PNGs where appropriate. - **E2E / fixtures:** `yarn workspace @actual-app/web exec playwright test --list` should list all tests (no load error from `fixtures.ts`). Run normal E2E (without `VRT`) in CI or locally to confirm unchanged behavior for non-VRT runs. ## Checklist - [x] Release notes added (see link above) - [x] No obvious regressions in affected areas - [x] Self-review has been performed - I understand what each change in the code does and why it is needed <!--- actual-bot-sections ---> <hr /> <!--- bundlestats-action-comment key:combined start ---> ### Bundle Stats Bundle | Files count | Total bundle size | % Changed ------ | ----------- | ----------------- | --------- desktop-client | 28 | 12.91 MB → 12.91 MB (+62 B) | +0.00% loot-core | 1 | 4.84 MB | 0% api | 1 | 3.88 MB | 0% cli | 1 | 7.89 MB | 0% <details> <summary>View detailed bundle stats</summary> #### desktop-client **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 28 | 12.91 MB → 12.91 MB (+62 B) | +0.00% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `package.json` | 📈 +62 B (+0.74%) | 8.19 kB → 8.25 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** Asset | File Size | % Changed ----- | --------- | --------- static/js/index.js | 3.32 MB → 3.32 MB (+62 B) | +0.00% **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- static/js/BackgroundImage.js | 121.09 kB | 0% static/js/FormulaEditor.js | 853.16 kB | 0% static/js/ReportRouter.js | 1.18 MB | 0% static/js/TransactionList.js | 82.49 kB | 0% static/js/Value.js | 4.33 MB | 0% static/js/ca.js | 191.72 kB | 0% static/js/da.js | 104.4 kB | 0% static/js/de.js | 174.12 kB | 0% static/js/en-GB.js | 8.2 kB | 0% static/js/en.js | 175.88 kB | 0% static/js/es.js | 181.54 kB | 0% static/js/extends.js | 485.17 kB | 0% static/js/fr.js | 176.79 kB | 0% static/js/indexeddb-main-thread-worker-e59fee74.js | 13.46 kB | 0% static/js/it.js | 165.68 kB | 0% static/js/narrow.js | 363.02 kB | 0% static/js/nb-NO.js | 151.58 kB | 0% static/js/nl.js | 108.66 kB | 0% static/js/pl.js | 88.34 kB | 0% static/js/pt-BR.js | 177.18 kB | 0% static/js/resize-observer.js | 18.06 kB | 0% static/js/th.js | 178.91 kB | 0% static/js/theme.js | 30.79 kB | 0% static/js/uk.js | 212.28 kB | 0% static/js/wide.js | 295 B | 0% static/js/workbox-window.prod.es5.js | 7.33 kB | 0% static/js/zh-Hans.js | 110.19 kB | 0% </div> </details> --- #### loot-core **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 4.84 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.B_XN_qvd.js | 4.84 MB | 0% </div> </details> --- #### api **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 3.88 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- index.js | 3.88 MB | 0% </div> </details> --- #### cli **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 7.89 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- cli.js | 7.89 MB | 0% </div> </details> </details> <!--- bundlestats-action-comment key:combined end ---> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-26 10:51:57 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#48999