name: e2e on: [push] # The browser end-to-end suites, one job per browser, deliberately kept out # of the check workflow: REPO_POLICIES.md caps make test at 60 seconds and # script/cibuild runs script/check, so folding a browser suite into either # would blow that cap and slow the local fast path. Before this workflow # every browser-level guarantee in this repo held only when a human # remembered to run it. # # One job per browser rather than two steps in one job, so a Chrome failure # does not hide the Firefox result. # # Each job is one script and nothing else. Both scripts need docker and # nothing else — they deliver the repo to the daemon as a build context and # build the extension inside the pinned image — which is what makes them # runnable here at all: the runner executes the job in a container against # the host's docker socket, so a `-v "$PWD:/work"` source path is resolved # by the host daemon and mounts an empty directory, and the runner image's # node is too old to install this repo's dependencies. # # These jobs REPORT, they do not gate. No branch requires these two jobs, so # a failure is a red mark a reviewer has to account for. The Chrome suite has # failed under load before, and no such report is open. A gate that fails at # random teaches people to merge past red. # # Nothing here may pass vacuously. There is no continue-on-error and no # `|| true`. Both scripts exit non-zero when docker is missing, when the # image build fails, and when the browser fails to start; the Chrome # harness aborts the suite outright if its network interception is not in # effect. jobs: e2e-chrome: runs-on: ubuntu-latest # Bounds the image build, a cold cache included, and the three Chrome # programs, so a hung browser frees the shared runner. timeout-minutes: 40 steps: # actions/checkout v4.2.2, 2026-02-22 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - run: script/test-e2e e2e-firefox: runs-on: ubuntu-latest # Bounds the image build, a cold cache included, and both Firefox # programs, so a hung browser frees the shared runner. timeout-minutes: 15 steps: # actions/checkout v4.2.2, 2026-02-22 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - run: script/test-e2e-firefox