Skip to content

chore(ci): add timeout and retry to Playwright browser installs - #1259

Open
Wikid82 wants to merge 2 commits into
mainfrom
fix/e2e-playwright-install-retry
Open

chore(ci): add timeout and retry to Playwright browser installs#1259
Wikid82 wants to merge 2 commits into
mainfrom
fix/e2e-playwright-install-retry

Conversation

@Wikid82

@Wikid82 Wikid82 commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • apt-get inside npx playwright install --with-deps <browser> can silently hang against a flaky Azure apt mirror with no timeout of its own, burning the job's full 60-minute timeout-minutes and surfacing as a misleading cancelled run instead of a clear, actionable failure (observed on run 32068948141E2E Chromium (Security Enforcement), triggered on release-please's PR chore(main): release 0.37.0 #1258 against main).
  • Wraps all 10 Playwright browser install steps in e2e-tests-split.yml with nick-fields/retry (10 min/attempt, 3 attempts, 15s backoff), matching the existing pattern already used in docker-build.yml.
  • Job-level timeout-minutes: 60 and the concurrency: cancel-in-progress: true block are left untouched — those are correct as-is.

Test plan

  • YAML validated, actionlint clean, lefthook run pre-commit passes (incl. semgrep, 0 findings)
  • Confirmed all 10 npx playwright install --with-deps occurrences converted, no stray EXIT_CODE=$? remnants left behind
  • e2e-tests-split.yml has an unfiltered pull_request: trigger (line 82) in addition to workflow_call/workflow_dispatch, so this PR itself runs the full "E2E Tests" workflow directly — real, direct CI signal on this change, not deferred to nightly

…event job-timeout hangs

apt-get inside `playwright install --with-deps` can silently hang against
a flaky Azure apt mirror with no timeout of its own, burning the full
60-minute job timeout and surfacing as a misleading cancelled run instead
of a clear failure. Wrap all 10 Playwright browser install steps in
nick-fields/retry (10min/attempt, 3 attempts, 15s backoff), matching the
existing pattern already used in docker-build.yml.
@codecov

codecov Bot commented Aug 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-advanced-security

Copy link
Copy Markdown
Contributor

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

@github-actions

github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

✅ Supply Chain Verification Results

PASSED

📦 SBOM Summary

  • Components: 1753

🔍 Vulnerability Scan

Severity Count
🔴 Critical 0
🟠 High 0
🟡 Medium 5
🟢 Low 2
Total 11

📎 Artifacts

  • SBOM (CycloneDX JSON) and Grype results available in workflow artifacts

Generated by Supply Chain Verification workflow • View Details

…right installs

nick-fields/retry's timeout handling calls process.kill() on the child
process tree from its own Node process. `playwright install --with-deps`
internally elevates part of that tree to root via sudo to run apt-get, so
when the action's 10-minute timeout fires, the kill fails with EPERM
(cross-UID kill) and throws unhandled instead of retrying. The step died
on attempt 1 and never reached attempt 2 or 3.

Replaced all 10 occurrences with a plain bash retry loop using coreutils
`timeout`, which signals its own direct child and isn't subject to the
EPERM bug class. Matches the existing bash retry-loop idiom already used
in codecov-upload.yml and quality-checks.yml.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants