fix(ci): unblock test-e2e by upgrading Playwright past the yauzl hang - #2854
Open
SteveGT96 wants to merge 1 commit into
Open
fix(ci): unblock test-e2e by upgrading Playwright past the yauzl hang#2854SteveGT96 wants to merge 1 commit into
SteveGT96 wants to merge 1 commit into
Conversation
`pnpm exec playwright install --with-deps` has been hanging until the 6h GitHub Actions limit kills the job, so `test-e2e` has not completed on any PR since 2026-05-12. The hang is not in the system dependency install: apt finishes normally, then the job stalls right after the browser archive download reaches 100%, during extraction. The cause is a yauzl regression (thejoshwolfe/yauzl#168) where the `for await` over `openReadStream` never completes on Node 24.16.0+ and Node 26.x — see microsoft/playwright#40724, which was filed against Playwright 1.59.1 on Node 26, exactly this configuration. Playwright vendored the fix in 1.60.0; this repo has been pinned to 1.59.1 since 2026-04-01. The e2e job runs `node-version: latest`, which started resolving to Node 26 when 26.0.0 shipped on 2026-05-05 — the last green test-e2e run was 2026-05-05, and the first 6h hang was 2026-05-12. Renovate had already queued the 1.62.1 bump, but it is rate-limited in the dependency dashboard (openapi-ts#2173), and its devDependency automerge waits on a CI run that can no longer go green — so the update that fixes this is blocked by the problem it fixes. Also add `timeout-minutes` to the job: without it a future hang costs 6h of runner time per run, and in-progress job logs cannot be read via the API, which makes such a hang needlessly hard to diagnose. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
👷 Deploy request for openapi-ts pending review.Visit the deploys page to approve it
|
|
3 tasks
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
test-e2ehas not completed on any PR since 2026-05-12. It hangs onpnpm exec playwright install --with-depsuntil GitHub kills the job at the 6-hour runner limit, so every run endscancelledand the check never reports.This bumps
@playwright/testfrom1.59.1to1.62.1, and adds atimeout-minutesguard to the job.Root cause
The hang is not in the system dependency install —
aptfinishes normally (No services need to be restarted). The job stalls immediately after the browser archive download completes, during extraction:This is the yauzl regression in thejoshwolfe/yauzl#168: the
for awaitoveropenReadStreamnever terminates on Node 24.16.0+ and Node 26.x. See microsoft/playwright#40724 — filed against Playwright 1.59.1 on Node 26, exactly this repo's configuration — plus #41000 and #41133.Playwright vendored the fix in 1.60.0. This repo has been pinned to 1.59.1 since 2026-04-01.
Why it started when it did
The job runs
node-version: latest, which began resolving to Node 26 when 26.0.0 shipped:@playwright/testpinned to 1.59.1test-e2e(run25396835833)latestmoves to it25732646823)The other jobs stay green because only
test-e2einstalls browsers.Why this didn't self-heal
Renovate already queued
@playwright/test→ 1.62.1, but it is rate-limited in the dependency dashboard (#2173) and was never opened as a PR. Andrenovate.jsonautomerges devDependency minor/patch updates only once CI passes — which it no longer can. The update that fixes this is blocked by the very problem it fixes, which is why a manual PR is needed.On the timeout
timeout-minutes: 20is defence in depth, not the fix. Without it a hang costs 6h of runner time per run, and since in-progress job logs aren't retrievable through the API, it also makes the next such hang much harder to diagnose — the logs above only became readable once the job was cancelled.I scoped it to
test-e2e, the only job that has demonstrably hung. Happy to extend it to the other jobs if you'd prefer them bounded too.Considered and rejected
Pinning
node-versionto an LTS instead oflatest: wouldn't actually fix it, since Node 24.16+ (LTS) is affected too, and it would cut CI coverage of current Node. The Playwright bump is the real fix.How to Review
packages/openapi-fetch/playwright.config.tsuses onlydefineConfig/devices/webServer/projects, which are unchanged across 1.59 → 1.62.test-e2ejob: it should conclude in minutes instead of hanging.playwright installextracts without stalling and the e2e suite passes on chrome and firefox; webkit only fails there on a missing host lib that--with-depsinstalls on CI.Worth noting: this blocks every other open PR in the repo from showing a complete CI run, including #2853.
Checklist
docs/updated (if necessary) (n/a)pnpm run update:examplesrun (only applicable for openapi-typescript) (n/a)