fix(ci): give gitlab perf job a discoverable chromium (ADR-0028) (#243)
## Summary Fix the GitLab `perf` job, which failed at the Lighthouse CI healthcheck with `Chrome installation not found`. Follow-up on [ADR-0028](../docs/decisions/0028-migrate-cicd-and-git-hosting-to-gitlab.md) Phase 2 (`.gitlab-ci.yml` landed in #241). ## Root cause The `perf` job ran on `mcr.microsoft.com/playwright:v1.55.0-jammy`. That image **does** ship Chromium, but under `/ms-playwright/chromium-<rev>/chrome-linux/chrome` — a non-standard path/name. Lighthouse CI uses `chrome-launcher`, which discovers Chrome by probing the `PATH` (`google-chrome`, `chromium`, `chromium-browser`) or the `CHROME_PATH` env var. It cannot find Playwright's bundled Chromium, so the healthcheck fails before any run starts. The same class of failure ("absence de Chrome pour Lighthouse") was hit and solved on the Gitea side — there the `catthehacker/ubuntu:full-22.04` image happened to carry Chrome at a standard location. ## Fix Decouple the two browser-driving tools instead of forcing one image to serve both: | Aspect | Before | After | | --- | --- | --- | | `image` | `mcr.microsoft.com/playwright:v1.55.0-jammy` | `node:24-bookworm` (same as the `.node-job` base) | | Chrome | bundled, undiscoverable | `apt-get install --no-install-recommends chromium` → `/usr/bin/chromium` | | `CHROME_PATH` | unset | `/usr/bin/chromium` (explicit, removes any PATH ambiguity) | | `before_script` | inherited | `!reference [.node-job, before_script]` + the apt install | Rationale for not pinning Playwright's Chromium via `CHROME_PATH` instead: that couples the perf job to an exact match between the npm `@playwright/test` version and the Docker image tag. A Renovate bump of `@playwright/test` while the image stays at `v1.55.0` would silently break `executablePath()`. The apt-installed Debian `chromium` has no such coupling. The future ADR-0016 axe-core e2e job — which drives **Playwright** directly — will use the Playwright image. Lighthouse wants a standard Chrome; Playwright wants its own browsers. Different tools, different images. `lighthouserc.js` already passes `--no-sandbox` (containerised-CI requirement), so no change needed there — that flag's rationale applies identically on GitLab Runner. ## Trade-off noted The `apt-get install chromium` re-downloads ~100 MB per perf run (the package lands in the job container's ephemeral writable layer, not a cached image layer). Acceptable for now. If perf-job duration or `vm-gitlab` bandwidth becomes a pain, the clean optimisation is a small custom image with Chromium pre-installed, pushed to GitLab's Container Registry — out of scope here, flagged for later. ## Test plan - [ ] GitLab `perf` job reaches the Lighthouse run (no more `Chrome installation not found`) and the ADR-0017 assertions evaluate. - [ ] `chromium` apt install completes on `node:24-bookworm` (Debian bookworm `main` carries the package). - [ ] `.gitlab-ci.yml` passes GitLab CI Lint (Project → Build → Pipeline Editor → Validate) — confirms the `!reference` + added keys parse. - [ ] Other jobs (`check`, `audit`, `commits`, `a11y`, `sast`, `secret_detection`) unaffected. ## Related - [ADR-0028](../docs/decisions/0028-migrate-cicd-and-git-hosting-to-gitlab.md) Phase 2 — `.gitlab-ci.yml` (#241). - [ADR-0017](../docs/decisions/0017-performance-budgets-lighthouse-ci.md) — Lighthouse CI perf budgets. - [ADR-0016](../docs/decisions/0016-accessibility-baseline-wcag-aa-targeted-aaa.md) — future axe-core e2e (will own the Playwright image). --------- Co-authored-by: Julien Gautier <julien.gautier@apf.asso.fr> Reviewed-on: #243
This commit was merged in pull request #243.
This commit is contained in:
+15
-5
@@ -105,11 +105,21 @@ commits:
|
||||
perf:
|
||||
extends: .node-job
|
||||
stage: perf
|
||||
# Lighthouse CI drives a real Chrome instance. Playwright's image is
|
||||
# the canonical "Node + browsers" CI image and is already on our
|
||||
# roadmap for the ADR-0016 axe-core e2e — single image covers both
|
||||
# uses once the a11y suite lands.
|
||||
image: mcr.microsoft.com/playwright:v1.55.0-jammy
|
||||
# Lighthouse CI drives a real Chrome via chrome-launcher, which
|
||||
# probes the PATH / CHROME_PATH for a standard Chrome/Chromium
|
||||
# binary. The Playwright image bundles Chromium under /ms-playwright
|
||||
# with a non-standard name chrome-launcher cannot discover, so we
|
||||
# stay on the base Node image and apt-install Debian's `chromium`
|
||||
# (lands at /usr/bin/chromium). The future ADR-0016 axe-core e2e job
|
||||
# — which drives Playwright directly — will use the Playwright image
|
||||
# instead: the two tools want different things, so they get
|
||||
# different images rather than one image that serves both poorly.
|
||||
image: node:24-bookworm
|
||||
variables:
|
||||
CHROME_PATH: /usr/bin/chromium
|
||||
before_script:
|
||||
- !reference [.node-job, before_script]
|
||||
- apt-get update -qq && apt-get install -y -qq --no-install-recommends chromium
|
||||
# Skip on Renovate MRs (same rationale as commits + the perf signal
|
||||
# on a dep bump is essentially zero). Push events on `main` still
|
||||
# run perf — we catch regressions immediately post-merge, not
|
||||
|
||||
Reference in New Issue
Block a user