fix(ci): bump playwright to 1.62.1 so the browser install stops hanging - #5374
Conversation
🚀 Preview deployed
|
|
review-code: advisory — blocking-set PR (§CP — approval-gated) PR #5374 is §CP: it touches Reviewed-head: @ c9d264f Class routing: Read the PR head (§HEAD): every file under review was sourced from Verified PR #5374 against the acceptance criteria of #5343, one at a time. All pass:
Independent check of the disclosed lockfile-collision risk (playwright-only, nothing near the typescript entries that #5370 is moving) — verified, with one caveat. The Independent check of the disclosed flaky unit failure — genuinely unrelated. The case is Sub-gates: Run-evidence bundle: PRESENT for head In-worktree typecheck: 31/31 tasks successful (turbo full-cache hit, meaning the inputs are content-identical to a prior green run, which is expected since this diff contains no TypeScript). The real All criteria pass. review-code does not merge, and on this §CP PR it cannot even signal auto-merge: a Verdict-written: 2026-08-10T22:11:30Z |
Playwright 1.59.1 downloads the browser archive fine and then parks forever in its bundled zip extractor under the repo's pinned Node 26.2.0, so a machine without a prebaked browser never gets one. Triage had already isolated the variable (the Node major) and shown that 1.62.1 extracts fine on the same Node, so this is a version bump, not an investigation. The catalog moves to
^1.62.1and thee2ejob's container tag moves tov1.62.1-jammyin lockstep, because the image's prebaked browsers have to match the locked client.Fixes #5343
What changed
pnpm-workspace.yaml—@playwright/testcatalog entry^1.59.1->^1.62.1. Every consumer (apps/web,packages/fabrika-cli,packages/local-render) already readscatalog:, so nothing else moves.pnpm-lock.yaml— regenerated; the diff is playwright-only (@playwright/test,playwright,playwright-core1.59.1 -> 1.62.1)..github/workflows/ci.yml—e2econtainermcr.microsoft.com/playwright:v1.59.1-jammy->v1.62.1-jammy, and the comment above it now says the hang was a 1.59.1 defect that this bump fixes, rather than stating it in the present tense.Evidence (real runs, darwin-arm64, Node 26.2.0 — the repo's
volta.nodepin)Cold
playwright install chromiuminto an emptyPLAYWRIGHT_BROWSERS_PATH,DEBUG=pw:install: exit 0 in about 8 seconds.extracting archiveis followed one second later byfixing permissionsandSUCCESS installing— the exact line the 1.59.1 runs parked on forever. 568 MB landed (chromium-1234,chromium_headless_shell-1234,ffmpeg-1011).packages/fabrika-cli/scripts/provision-browser.mjsend to end, noPLAYWRIGHT_BROWSERS_PATH, noCI, no skip flag, and nochromium-1234in the default cache: exit 0 in 11 seconds, both browsers downloaded and extracted into the default cache. That is well inside the script's spawn timeout, so the run-time exit-11remediation path is no longer where a cold machine ends up.Guards:
pipeline-cli catalog-guard checkgreen (29 manifests, allcatalog:/workspace:),pnpm typecheckgreen (31/31),pnpm lint:worktreea clean skip (no biome-handled files changed).CI: the diff touches
pnpm-lock.yamland.github/workflows/ci.yml, both of which trip thee2epath filter, so this PR runs thee2esuite inside the new container. No job timeout was raised.Finding: the browser cache the issue asks about does not exist on
mainOne acceptance criterion asks for the
.github/workflows/ci.ymlbrowser cache to be shown saving and hitting, or for a finding explaining why it cannot. There is no browser cache step inci.ymlonmain— the onlyms-playwrightmention is a comment. The cache is introduced on #5169's branch, together with the removal ofprovision-browser.mjs'sCIskip. Until that lands, no CI job extracts a browser at all (e2euses the prebaked image; every other job hits theCIskip), so there is nothing here to save or hit. This bump is what makes that cache able to work once #5169 lands; proving the save/hit belongs to #5169's PR, where the cache actually exists.Deviations
latestwith a matching-jammyimage. Disposition: no action needed — the issue explicitly says the smallest-possible-move question only needs answering if the implementer wants it.main. Disposition: the issue's own criterion sanctions this fork; the demonstration belongs to fabrika: the browser-provisioning CI skip pre-empts the presence check, so it only fires when the browser is genuinely missing #5169.Post:post-clobbercase) out of 2424; a re-run of the same command found no changed test files and the second push was clean. Why: the diff touches noapps/webcode, so this is unrelated flake, not a regression from the bump. Disposition: for the reviewer to judge — flagged here rather than silently swallowed.