fix(cicd) — épingler la version du runner : latest + pull: missing ne rafraîchit JAMAIS

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) <[email protected]>
This commit is contained in:
CI Bot
2026-07-30 08:54:43 +02:00
co-authored by Claude Opus 5
parent 1a8b6bf36c
commit 48e3d6827c
2 changed files with 31 additions and 1 deletions
@@ -9,3 +9,26 @@
# so the secret propagation playbook iterates over this list. # so the secret propagation playbook iterates over this list.
gitea_secret_propagation_users: gitea_secret_propagation_users:
- arcodange - 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"
@@ -30,7 +30,14 @@
name: arcodange_factory_gitea_action name: arcodange_factory_gitea_action
services: services:
gitea_action: 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 container_name: gitea_action
restart: always restart: always
environment: environment: