From 48e3d6827c56a10a20570965a47149d55829d85f Mon Sep 17 00:00:00 2001 From: CI Bot Date: Thu, 30 Jul 2026 08:54:43 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix(cicd)=20=E2=80=94=20=C3=A9pingler=20la?= =?UTF-8?q?=20version=20du=20runner=20:=20`latest`=20+=20`pull:=20missing`?= =?UTF-8?q?=20ne=20rafra=C3=AEchit=20JAMAIS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Réponse à « qu'est-ce qui nous empêche d'upgrade des deux côtés ? » : rien. Le playbook déployait `gitea/act_runner:latest` avec `pull: missing`, c'est-à-dire la pire combinaison possible — un tag FLOTTANT qui n'est JAMAIS rafraîchi. Chaque hôte garde donc ce que « latest » voulait dire le jour de son premier pull : pi1 : sha256:7bdc8d31… → v0.3.1 pi3 : sha256:0f65fa10… → v0.2.13 Deux machines censées être équivalentes, deux versions à trois mineures d'écart. Effets mesurés : le MÊME job, sur la MÊME image de CI, met 511 s sur pi1 et 397 s sur pi3 (114 s d'écart imputables à la machine) ; et pi3 a mal lu la définition d'un job dont il dépendait (« 'runs-on' key not defined », puis « No steps found »). ⚠ POURQUOI PAS `latest` + `pull: always`. `latest` vaut aujourd'hui **0.6.1** (Docker Hub, 30/04/2026), soit 3 à 4 versions mineures devant tout ce qui est éprouvé ici. Le runner exécute TOUTE la CI de la forge : une montée subie, non datée et non choisie s'y paie cher. On épingle donc, et on monte délibérément. ⚠ POURQUOI 0.3.1 ET PAS 0.6.1. 0.3.1 est la version que pi1 exécute DÉJÀ avec succès sur cette forge. Ce changement aligne donc pi3 VERS LE HAUT, sur du prouvé, sans saut de quatre versions. Passer ensuite à 0.6.1 devient une modification d'UNE ligne, datée et reculable — c'est tout l'intérêt de la variable. ⚠ Et `pull: missing` redevient CORRECT avec un tag épinglé : changer la version change le tag, donc l'image est absente, donc elle est tirée. Aucun besoin de `pull: always`, qui interrogerait le registre à chaque passage pour rien. ⚠ NE PAS jouer ce playbook pendant qu'une CI tourne : il recrée les conteneurs de runner et TUE les jobs en vol (journaux perdus). Vérifier `list_runs` avant — et se rappeler qu'un merge est un déclencheur. Refs arcodange-org/factory#50 Co-Authored-By: Claude Opus 5 (1M context) --- .../inventory/group_vars/all/gitea.yml | 23 +++++++++++++++++++ .../arcodange/factory/playbooks/03_cicd.yml | 9 +++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/ansible/arcodange/factory/inventory/group_vars/all/gitea.yml b/ansible/arcodange/factory/inventory/group_vars/all/gitea.yml index 837e292..825e5f1 100644 --- a/ansible/arcodange/factory/inventory/group_vars/all/gitea.yml +++ b/ansible/arcodange/factory/inventory/group_vars/all/gitea.yml @@ -9,3 +9,26 @@ # so the secret propagation playbook iterates over this list. gitea_secret_propagation_users: - arcodange + +# ══════════════════════════════════════════════════════════════════════════ +# VERSION DU RUNNER GITEA ACTIONS — ÉPINGLÉE, ET C'EST LE POINT. +# +# Le playbook 03_cicd déployait `gitea/act_runner:latest` avec `pull: missing`, +# c'est-à-dire la pire combinaison possible : un tag FLOTTANT qui n'est JAMAIS +# rafraîchi. Chaque hôte garde ce que « latest » voulait dire le jour de son +# premier pull — d'où deux machines censées être équivalentes qui divergent +# (constaté le 2026-07-30) : +# +# pi1 : sha256:7bdc8d31… → act_runner v0.3.1 +# pi3 : sha256:0f65fa10… → act_runner v0.2.13 +# +# Effet mesuré : le MÊME job, sur la MÊME image de CI, met 511 s sur pi1 et +# 397 s sur pi3 — 114 s d'écart imputables à la machine. Et pi3 (v0.2.13) a mal +# lu la définition d'un job dont il dépendait (« 'runs-on' key not defined », +# puis « No steps found »). +# +# ⚠ NE PAS remplacer par `latest` + `pull: always` : `latest` vaut aujourd'hui +# 0.6.1, soit 3 à 4 versions mineures devant tout ce qui est éprouvé ici. Le +# runner exécute TOUTE la CI de la forge — une montée subie, non datée et non +# choisie, s'y paie cher. Une version épinglée se relit, se date et se recule. +gitea_runner_version: "0.3.1" diff --git a/ansible/arcodange/factory/playbooks/03_cicd.yml b/ansible/arcodange/factory/playbooks/03_cicd.yml index 353bc7e..c0cf3d5 100644 --- a/ansible/arcodange/factory/playbooks/03_cicd.yml +++ b/ansible/arcodange/factory/playbooks/03_cicd.yml @@ -30,7 +30,14 @@ name: arcodange_factory_gitea_action services: gitea_action: - image: gitea/act_runner:latest + # ⚠ VERSION ÉPINGLÉE (inventory/group_vars/all/gitea.yml), PAS `latest`. + # `latest` + `pull: missing` = tag flottant JAMAIS rafraîchi : chaque + # hôte gardait ce que « latest » voulait dire à son premier pull, d'où + # pi1 en v0.3.1 et pi3 en v0.2.13 sur des machines censées être + # équivalentes (114 s d'écart mesurés sur le même job). + # Avec un tag épinglé, `pull: missing` redevient CORRECT : changer la + # version change le tag, donc l'image est absente, donc elle est tirée. + image: gitea/act_runner:{{ gitea_runner_version }} container_name: gitea_action restart: always environment: -- 2.54.0 From 6bb27b0e5c8860c633a51fadb21c8f2b3307bffd Mon Sep 17 00:00:00 2001 From: CI Bot Date: Thu, 30 Jul 2026 09:03:40 +0200 Subject: [PATCH 2/2] =?UTF-8?q?feat(cicd)=20=E2=80=94=20Gitea=201.27.1=20e?= =?UTF-8?q?t=20Gitea=20Runner=202.3.0=20:=20l'image=20du=20runner=20a=20CH?= =?UTF-8?q?ANG=C3=89=20DE=20NOM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ⚠ CORRIGE LE PREMIER JET DE CETTE BRANCHE, qui épinglait `gitea/act_runner:0.3.1`. `gitea/act_runner` est GELÉE à 0.6.1. Le successeur officiel est `gitea/runner` (binaire renommé `act_runner` → `gitea-runner`), aujourd'hui en **2.3.0**. Épingler l'ancien nom nous aurait enfermés dans une image morte — trouvé grâce aux notes de version de Gitea 1.27 signalées par le fondateur. VÉRIFIÉ AVANT DE BASCULER — c'est un remplacement DIRECT pour ce compose : • entrypoint identique : /sbin/tini -- run.sh • mêmes variables lues : CONFIG_FILE, GITEA_INSTANCE_URL, GITEA_RUNNER_{REGISTRATION_TOKEN,NAME,LABELS} • config.yaml compatible : capacity, labels, cache.*, container.force_pull, options, valid_volumes, host.workdir_parent — AUCUNE clé utilisée ici n'a disparu (comparé au `gitea-runner generate-config` de la 2.3.0) La 2.3.0 apporte en prime des réglages qui parlent à nos pannes connues : `health_check.min_free_disk_space_mb` (les images de runner supprimées quand le disque se remplit, ADR 20260407) et `state_report_interval` (les tâches tuées en zombie faute de rapport, factory#50). GITEA 1.25.5 → 1.27.1 : deux versions mineures, migrations de base IRRÉVERSIBLES. Sauvegardes du jour VÉRIFIÉES avant, pas supposées : /mnt/backups/postgres/backup_20260730.sql.gz 13 Mo, gzip -t OK, contient « CREATE DATABASE gitea » (pg_dumpall) /mnt/backups/gitea/backup_20260730.gitea.gz 1,7 Go, gzip -t OK ⚠ Le backup Gitea utilise `gitea dump --skip-db` : il ne contient PAS la base. C'est le dump postgres qui la porte — les deux sont nécessaires. Changements cassants de 1.27 et leur portée ici, vérifiée : • workflows réutilisables externes retirés → AUCUN dans front, kadans-api, factory (contrôlé programmatiquement, `uses:` au niveau job) • nonce CSP pour scripts inline → concerne les templates personnalisés, nous n'en avons pas • X-Content-Type-Options: nosniff par défaut Refs arcodange-org/factory#50 Co-Authored-By: Claude Opus 5 (1M context) --- .../factory/inventory/group_vars/all/gitea.yml | 17 ++++++++++++++++- .../inventory/group_vars/gitea/gitea.yml | 11 ++++++++++- ansible/arcodange/factory/playbooks/03_cicd.yml | 2 +- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/ansible/arcodange/factory/inventory/group_vars/all/gitea.yml b/ansible/arcodange/factory/inventory/group_vars/all/gitea.yml index 825e5f1..2381e8d 100644 --- a/ansible/arcodange/factory/inventory/group_vars/all/gitea.yml +++ b/ansible/arcodange/factory/inventory/group_vars/all/gitea.yml @@ -31,4 +31,19 @@ gitea_secret_propagation_users: # 0.6.1, soit 3 à 4 versions mineures devant tout ce qui est éprouvé ici. Le # runner exécute TOUTE la CI de la forge — une montée subie, non datée et non # choisie, s'y paie cher. Une version épinglée se relit, se date et se recule. -gitea_runner_version: "0.3.1" +# ⚠ L'IMAGE A CHANGÉ DE NOM. `gitea/act_runner` est gelée à 0.6.1 ; le +# successeur officiel est `gitea/runner`, et son binaire s'appelle désormais +# `gitea-runner` (plus `act_runner`). +# Vérifié avant de basculer — c'est un REMPLACEMENT DIRECT pour ce compose : +# • entrypoint identique : /sbin/tini -- run.sh +# • mêmes variables lues : CONFIG_FILE, GITEA_INSTANCE_URL, +# GITEA_RUNNER_{REGISTRATION_TOKEN,NAME,LABELS} +# • config.yaml compatible : capacity, labels, cache.*, container.force_pull, +# options, valid_volumes, host.workdir_parent — AUCUNE clé utilisée ici n'a +# disparu (comparé à `gitea-runner generate-config` de la 2.3.0). +# Le blog de Gitea 1.27 recommande « Gitea Runner 2.0.0 » ; 2.3.0 est la même +# lignée majeure, en plus récent. Gitea reste par ailleurs compatible fil-à-fil +# avec les runners plus anciens — il désactive simplement les fonctionnalités +# qu'ils n'annoncent pas. +gitea_runner_image: "gitea/runner" +gitea_runner_version: "2.3.0" diff --git a/ansible/arcodange/factory/inventory/group_vars/gitea/gitea.yml b/ansible/arcodange/factory/inventory/group_vars/gitea/gitea.yml index ed88c9a..6b0ac9f 100644 --- a/ansible/arcodange/factory/inventory/group_vars/gitea/gitea.yml +++ b/ansible/arcodange/factory/inventory/group_vars/gitea/gitea.yml @@ -1,4 +1,13 @@ -gitea_version: 1.25.5 +# ⚠ Montée 1.25.5 → 1.27.1 : DEUX versions mineures, avec migrations de base +# IRRÉVERSIBLES (Gitea ne sait pas redescendre après migration). Sauvegardes du +# jour vérifiées avant la bascule (pg_dumpall 13 Mo intègre + archive fichiers +# 1,7 Go intègre, /mnt/backups). +# Changements cassants relevés dans les notes de version, et leur portée ICI : +# • workflows réutilisables externes retirés → AUCUN dans nos trois dépôts (vérifié) +# • nonce CSP exigé pour les scripts inline → concerne les templates +# personnalisés ; nous n'en avons pas +# • X-Content-Type-Options: nosniff par défaut +gitea_version: 1.27.1 gitea_database: db_name: gitea diff --git a/ansible/arcodange/factory/playbooks/03_cicd.yml b/ansible/arcodange/factory/playbooks/03_cicd.yml index c0cf3d5..532ddf8 100644 --- a/ansible/arcodange/factory/playbooks/03_cicd.yml +++ b/ansible/arcodange/factory/playbooks/03_cicd.yml @@ -37,7 +37,7 @@ # équivalentes (114 s d'écart mesurés sur le même job). # Avec un tag épinglé, `pull: missing` redevient CORRECT : changer la # version change le tag, donc l'image est absente, donc elle est tirée. - image: gitea/act_runner:{{ gitea_runner_version }} + image: "{{ gitea_runner_image }}:{{ gitea_runner_version }}" container_name: gitea_action restart: always environment: -- 2.54.0