# Image de base des jobs CI lourds — construite SUR CHAQUE machine à runner.
#
# Elle cuit une fois pour toutes ce que chaque exécution de CI réinstallait.
# Mesures du dépôt kadans (run 628, 2026-07-29, runner ARM64 2 vCPU / 3 Gio) :
#
#   npm install -g bun                          →    8,6 s par run
#   playwright install --with-deps chromium     →  104,0 s par run  (apt-get)
#                                                  ────────
#                                                   112,6 s jetées à CHAQUE run,
#                                                   sur le job du chemin critique
#
# Le cache `actions/cache` ne peut rien contre ces 104 s : il couvre le
# NAVIGATEUR (299 Mo déjà mis en cache), pas ses dépendances SYSTÈME —
# `--with-deps` relance `apt-get` quoi qu'il arrive.
#
# ⚠ ON HÉRITE DE L'IMAGE DE RUNNER MAISON, ET C'EST ESSENTIEL : elle porte le
# certificat de la CA interne (step-ca). Une image repartant de `node:20-bookworm`
# ne ferait pas confiance à gitea.arcodange.lab, et tout job qui lui parle
# échouerait en TLS.
ARG CI_BASE_FROM=gitea.arcodange.lab/arcodange-org/runner-images:ubuntu-latest-ca
FROM ${CI_BASE_FROM}

ARG BUN_VERSION=1.3.14
ARG PLAYWRIGHT_VERSION=1.61.1

ENV DEBIAN_FRONTEND=noninteractive

# Chemin des navigateurs, figé et hors du HOME : un job qui tourne sous un autre
# utilisateur doit les retrouver.
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright

# ══════════════════════════════════════════════════════════════════════════
# ⚠ TROIS `RUN` SÉPARÉS, ET C'EST LE POINT DE CONCEPTION DE CE FICHIER.
#
# La première version faisait `npm i -g bun` puis `playwright install --with-deps`
# en deux couches, dont une de 1,36 Go — irrecevable par le registre. Ici, même
# si l'on décidait un jour de pousser cette image, chaque couche reste du même
# ordre de grandeur que celles qui passent déjà (261 Mo pour la plus grosse de
# `runner-images:ubuntu-latest-ca`).
#
# Ne pas fusionner ces `RUN` pour « gagner une couche » : le gain serait nul et
# la couche redeviendrait impossible à transporter.
# ══════════════════════════════════════════════════════════════════════════

# 1. Bun (~274 Mo)
RUN npm install -g "bun@${BUN_VERSION}" \
    && npm cache clean --force

# 2. Les dépendances SYSTÈME de Chromium — c'est CETTE couche qui rachète les
#    104 s d'apt-get de chaque run.
RUN npx --yes "playwright@${PLAYWRIGHT_VERSION}" install-deps chromium \
    && rm -rf /var/lib/apt/lists/*

# 3. Le navigateur lui-même, séparé de ses dépendances système : les deux ne
#    bougent pas au même rythme, et Docker ne réinvalide alors que la bonne.
RUN npx --yes "playwright@${PLAYWRIGHT_VERSION}" install chromium

# La trace opposable de ce qui est réellement cuit ici. La CI de kadans la LIT et
# la confronte à son `bun.lock` : une dérive de version doit échouer FORT, avec sa
# cause, plutôt que de se manifester par un « Executable doesn't exist » à
# vingt minutes de là.
RUN printf 'bun=%s\nplaywright=%s\n' \
      "$(bun --version)" "${PLAYWRIGHT_VERSION}" \
      > /etc/ci-base.versions \
    && cat /etc/ci-base.versions
