Skip to content

[CI] CI workflow failing on main and feat/federate — Chrome binary missing from Docker image (supervisor fails to spawn google-chrome) #14

Description

@cerebral-work

Summary

The CI workflow has been failing on main since at least 2026-07-13 (commit 0f883f72) and continues to fail on the current HEAD (d1ad313b, 2026-07-16). The same failure also occurs on the feat/federate branch (a7e3578f). All 39 E2E tests fail as a cascade.

Affected Runs

Run ID Date Branch SHA
29469385559 2026-07-16 main d1ad313b
29469107508 2026-07-16 feat/federate a7e3578f
29232051436 2026-07-13 main 0f883f72

The last known passing CI run on main was sha e09ec977 (2026-04-07).

Failing Jobs

Supervisor Health (job 87529801011)

The container starts successfully (Docker build passes), but the reach-supervisor crashes immediately after attempting to spawn google-chrome:

Error: failed to start managed processes

Caused by:
    0: failed to spawn chrome
    1: No such file or directory (os error 2)

The supervisor process log shows all other processes start successfully:

  • xvfb (pid 11) ✅
  • openbox (pid 14) ✅
  • x11vnc (pid 15) ✅
  • novnc/websockify (pid 16) ✅
  • chromeFAILgoogle-chrome binary not found

The health poll (curl -sf http://localhost:8400/health) times out after 30 seconds and the step fails.

E2E Tests (job 87529801016)

All 39 tests fail with cascading panics:

thread 't01_health_json' panicked at crates/reach-cli/tests/e2e_container.rs:22:10:
Once instance has previously been poisoned

This is because the test setup uses a Once cell to initialize the container connection; when the first test fails (health check), all subsequent tests inherit the poisoned state.

Failed tests include: t01_health_json, t02_four_processes_running, t16_chrome_version, t17_chrome_headed, t18_chrome_headless_dom, t19_chrome_click_navigates, t20_playwright_import … and 32 more.

test result: FAILED. 0 passed; 39 failed; 0 ignored; 0 measured; 0 filtered out; finished in 32.17s

Root Cause Hypothesis

google-chrome is not present in the Docker image at the path expected by reach-supervisor. This is an image packaging regression — either:

  1. The Dockerfile step that installs Chrome was removed or broken in a recent commit.
  2. The Chrome install script changed its install path, leaving the binary somewhere other than where the supervisor looks for it (/usr/bin/google-chrome or similar).
  3. A base image update changed the available package repository or package name.

Since the failure affects both main (multiple commits) and feat/federate, it is likely a Dockerfile-level issue rather than a code-level issue.

The Docker Build job itself passes (exit 0), meaning the image builds successfully — Chrome is likely installed but not at the path the supervisor resolves, or its wrapper script is broken post-build.

Suggested Fix Direction

  • Inspect the Dockerfile Chrome installation step — confirm google-chrome is installed and verify its path in the image with which google-chrome or ls /usr/bin/google-chrome*.
  • Check if a recent apt/snap/flatpak-based Chrome install changed the binary path (e.g., google-chrome-stable vs google-chrome, or moved to /opt/google/chrome/chrome).
  • Add a RUN which google-chrome || exit 1 assertion to the Dockerfile to catch this at build time.
  • Check the supervisor config for the chrome command path — it may need to be updated to the new binary location.

Filed by CI/Ops Watchdog — 2026-07-16

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions