CI : écrite pour un exécuteur shell, pas pour un conteneur
Le chemin du journal npm — /home/gitlab-runner/.npm — dit tout : le travail tourne sur l'hôte, sous l'utilisateur de l'exécuteur, pas dans un conteneur. Votre exécuteur est de type « shell ». Ce que j'aurais dû lire au premier échec « corepack: command not found » n'était pas un manque de l'image node:24 : c'est que « image: » n'a jamais été appliqué. J'ai corrigé le symptôme, et le second échec — EACCES sur /usr/local — a redit la même chose plus fort. Trois conséquences, toutes traitées « image: » est retiré plutôt que laissé en place : le garder laisserait croire que la version de Node est maîtrisée ici, alors qu'elle est celle de l'hôte. Node et pnpm annoncent désormais leur version en tête de chaque travail, pour que le prochain écart se voie sans aller-retour. Rien ne s'installe globalement. pnpm est posé dans le répertoire du projet et ajouté au PATH. npm ne peut pas le remplacer : les dépendances internes de ce dépôt sont déclarées en « workspace:* ». « services: » est ignoré aussi : aucune base, aucun cache, aucun stockage objet. Les 602 garanties ne peuvent donc pas tourner ici. Un pipeline rouge en permanence n'apprend qu'une chose : à l'ignorer Le travail « garanties » ne se déclenche que si DATABASE_URL est définie dans les variables du projet. Tant qu'aucune base n'est disponible, il ne s'exécute pas — plutôt que d'échouer à chaque passage. Reste vérifié à chaque commit, sans aucun service : le typage, la couverture des accords de contribution, et la construction du site — dont les liens morts font échouer le travail. Éprouvé en répétant les deux travaux à l'identique en local, jusqu'au « mv site/build public » : 26 pages produites dans les deux langues, aucun lien mort. Signed-off-by:Kourser <contact@kourser.bzh> Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>