Skip to content

Keep a crashed browser from eating the CI job - #668

Merged
tricknotes merged 1 commit into
mainfrom
fix-ci-chrome-hang
Sep 4, 2026
Merged

Keep a crashed browser from eating the CI job#668
tricknotes merged 1 commit into
mainfrom
fix-ci-chrome-hang

Conversation

@tricknotes

@tricknotes tricknotes commented Sep 4, 2026

Copy link
Copy Markdown
Owner

Summary

CI jobs intermittently go silent right after an ember build finishes, until timeout-minutes: 15 cancels them (e.g. this job; the same signature cancelled a job this morning). The orphan-process list at cleanup shows chromedriver, chrome, and two chrome_crashpad_handler processes: the renderer crashes mid-example and the driver waits on it forever, so the job produces no output and no failure.

  • Run headless Chrome with --disable-dev-shm-usage. Chrome's shared memory lives in /dev/shm, which is small on CI runners and containers; exhausting it crashes the renderer — the crashpad handlers are its trace. This is the standard mitigation for headless Chrome in CI.
  • As a second line of defense, cap :js examples at five minutes (the Timeout.timeout(300) arrangement the App#test example already uses). A hung browser then fails one example with a backtrace — and the existing failure hook dumps the page and browser console — and the rest of the suite still runs, instead of the job being cancelled with no diagnostics.

Verification

  • The js: false feature scenarios pass locally with the reconfigured support file loaded (the :js examples need Chrome, which CI provides)
  • The hang is intermittent, so the flags can't be proven locally — the crash signature (crashpad handlers among the orphans) and the /dev/shm mechanism match, and the timeout layer bounds any residual hang

A job intermittently produces no output after a build until the runtime cap
cancels it, leaving chromedriver, chrome, and two crashpad handlers as
orphans: the renderer crashes and the driver waits on it forever.

Run Chrome with `--disable-dev-shm-usage`, keeping it off the small
`/dev/shm` of CI runners and containers, where exhausting it crashes the
renderer.

As a second line of defense, cap `:js` examples at five minutes, so a hung
browser fails one example with a backtrace and lets the rest of the suite
run, instead of silently consuming the job's runtime cap.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@tricknotes
tricknotes merged commit c980adb into main Sep 4, 2026
12 checks passed
@tricknotes
tricknotes deleted the fix-ci-chrome-hang branch September 4, 2026 13:05
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