outillage: la chaîne ne réinstalle plus trois fois la même chose (#133) #134

Merged
olivier merged 1 commit from lenaic/40-ci-plus-rapide into develop 2026-09-04 07:23:10 +00:00
Owner

Ce que ça change

La chaîne réinstallait quatre fois apt, trois fois l'outillage Python sur la même image épinglée, et deux fois les dépendances npm du même projet, sans aucun cache. Les trois jobs Python n'en font plus qu'un, les deux jobs npm également, et deux caches sont ajoutés.

Aucune étape n'est perdue ni réécrite : elles gardent leurs commandes, leurs gardes et leurs commentaires. Seul le préambule est mutualisé, et l'ordre revu pour que le format et le typage échouent en premier.

Closes #133

Preuve

$ ./tests/ci/test-liens-markdown.sh          # sur develop, avant toute modification
111 lien(s) relatif(s) examiné(s) dans 62 fichier(s).
Tous les liens relatifs mènent à un fichier existant.
code de sortie : 0

$ sed -i 's|[ci.md](ci.md)|[ci.md](ci-inexistant.md)|' docs/runbooks/README.md
$ ./tests/ci/test-liens-markdown.sh          # essai négatif
ÉCHEC  docs/runbooks/README.md → ci-inexistant.md
1 lien(s) cassé(s).
code de sortie : 1

La durée réelle est à lire sur l'exécution de cette demande, puis sur la suivante une fois le cache amorcé : le premier passage remplit le cache, il ne le lit pas.

Relecture

  • Un pair a relu et laissé un commentaire, même court
  • Ses remarques sont traitées, ou une réponse explique pourquoi elles ne le sont pas

Où regarder en priorité

Le point à trancher. « Tableau de bord » passait par actions/setup-node avec node 24, alors que « Dépendances du tableau de bord » épinglait son image en 22.18. Deux avis coexistaient dans le fichier. J'ai retenu l'image épinglée par empreinte, qui respecte notre propre règle sur les images, et les deux versions satisfont le champ engines de package.json. Les tests unitaires du tableau de bord tournent donc maintenant sur node 22.18 au lieu de 24. Si l'équipe préfère 24, c'est une image node:24 épinglée qu'il faut mettre, pas un retour à setup-node.

La sûreté vis-à-vis de la protection de branche. Le contrôle obligatoire est Intégration / *, un joker : j'ai vérifié dans l'API avant de toucher au fichier. Aucun nom de job n'y est figé, donc les fusions et les renommages ne peuvent pas bloquer une demande. C'est aussi la raison pour laquelle je n'ai pas ajouté de paths-ignore : un workflow qui ne se joue pas ne rapporte aucun contrôle, et le joker n'a alors rien à quoi se raccrocher. Le détail est dans le #133.

Le renommage du job images. Il accueillait déjà trois cas d'essai qui ne parlaient pas d'images. « Contrôles statiques du dépôt » décrit ce qu'il est devenu, et c'est là que le contrôle des liens est posé, pour ne pas payer un démarrage de conteneur de plus.

Une chose que je n'ai pas touchée. Plusieurs noms d'étapes finissent par (ticket #77) sans guillemets : YAML lit #77) comme un commentaire et le nom affiché est tronqué. C'est cosmétique, ça préexiste, et le corriger aurait ajouté du bruit à un diff déjà large. À faire dans un passage dédié si ça vous gêne dans les journaux.

## Ce que ça change La chaîne réinstallait quatre fois `apt`, trois fois l'outillage Python sur la même image épinglée, et deux fois les dépendances npm du même projet, sans aucun cache. Les trois jobs Python n'en font plus qu'un, les deux jobs npm également, et deux caches sont ajoutés. Aucune étape n'est perdue ni réécrite : elles gardent leurs commandes, leurs gardes et leurs commentaires. Seul le préambule est mutualisé, et l'ordre revu pour que le format et le typage échouent en premier. Closes #133 ## Preuve ``` $ ./tests/ci/test-liens-markdown.sh # sur develop, avant toute modification 111 lien(s) relatif(s) examiné(s) dans 62 fichier(s). Tous les liens relatifs mènent à un fichier existant. code de sortie : 0 $ sed -i 's|[ci.md](ci.md)|[ci.md](ci-inexistant.md)|' docs/runbooks/README.md $ ./tests/ci/test-liens-markdown.sh # essai négatif ÉCHEC docs/runbooks/README.md → ci-inexistant.md 1 lien(s) cassé(s). code de sortie : 1 ``` La durée réelle est à lire sur l'exécution de cette demande, puis sur la suivante une fois le cache amorcé : le premier passage remplit le cache, il ne le lit pas. ## Relecture - [ ] Un pair a relu et laissé un commentaire, même court - [ ] Ses remarques sont traitées, ou une réponse explique pourquoi elles ne le sont pas ## Où regarder en priorité **Le point à trancher.** « Tableau de bord » passait par `actions/setup-node` avec node 24, alors que « Dépendances du tableau de bord » épinglait son image en 22.18. Deux avis coexistaient dans le fichier. J'ai retenu l'image épinglée par empreinte, qui respecte notre propre règle sur les images, et les deux versions satisfont le champ `engines` de `package.json`. **Les tests unitaires du tableau de bord tournent donc maintenant sur node 22.18 au lieu de 24.** Si l'équipe préfère 24, c'est une image `node:24` épinglée qu'il faut mettre, pas un retour à `setup-node`. **La sûreté vis-à-vis de la protection de branche.** Le contrôle obligatoire est `Intégration / *`, un joker : j'ai vérifié dans l'API avant de toucher au fichier. Aucun nom de job n'y est figé, donc les fusions et les renommages ne peuvent pas bloquer une demande. C'est aussi la raison pour laquelle je n'ai **pas** ajouté de `paths-ignore` : un workflow qui ne se joue pas ne rapporte aucun contrôle, et le joker n'a alors rien à quoi se raccrocher. Le détail est dans le #133. **Le renommage du job `images`.** Il accueillait déjà trois cas d'essai qui ne parlaient pas d'images. « Contrôles statiques du dépôt » décrit ce qu'il est devenu, et c'est là que le contrôle des liens est posé, pour ne pas payer un démarrage de conteneur de plus. **Une chose que je n'ai pas touchée.** Plusieurs noms d'étapes finissent par `(ticket #77)` sans guillemets : YAML lit ` #77)` comme un commentaire et le nom affiché est tronqué. C'est cosmétique, ça préexiste, et le corriger aurait ajouté du bruit à un diff déjà large. À faire dans un passage dédié si ça vous gêne dans les journaux.
outillage: la chaîne ne réinstalle plus trois fois la même chose
All checks were successful
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 3m9s
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 4s
Intégration / Aucun secret commité (pull_request) Successful in 3s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 4m7s
2ea036441f
Sept jobs sur un exécuteur unique ne s'exécutent pas en parallèle, ils font la
queue. Le coût n'était pas dans les contrôles mais dans ce qu'ils refaisaient :
quatre apt-get, trois « pip install -r requirements-dev.txt » sur la même image
épinglée au même sha256, deux « npm ci » sur le même projet, et aucun cache
nulle part. Sept minutes trente sur la demande #125.

Les trois jobs Python n'en font plus qu'un, les deux jobs npm également. Aucune
étape n'est perdue ni réécrite : elles gardent leurs commandes, leurs gardes et
leurs commentaires, seul le préambule est mutualisé. L'ordre est revu pour que
le format et le typage échouent en quelques secondes, les audits en dernier.
S'ajoutent un cache pip et un cache npm, dont les clés portent sur les fichiers
qui décrivent réellement ce qui sera installé.

La protection de branche exige « Intégration / * », un joker : aucun nom de job
n'y est figé, les réunir et les renommer ne casse aucun contrôle obligatoire.

Un cas d'essai est ajouté : les liens relatifs des fichiers Markdown mènent à un
fichier qui existe. Dix manuels se citent les uns les autres et un fichier
renommé casse ces renvois en silence, jusqu'au jour où on en a besoin, c'est-à-
dire en panne. Il examine 111 liens dans 62 fichiers, passe sur develop, et son
échec a été éprouvé sur un lien volontairement cassé. C'est le seul contrôle que
la documentation ait à elle : elle ne saute rien, elle a le sien.

Le job « Images épinglées par version » accueillait déjà trois cas d'essai qui ne
parlaient pas d'images. Il est renommé « Contrôles statiques du dépôt », ce qu'il
est devenu.

Ticket #133, élévation du #40.
olivier approved these changes 2026-09-04 07:23:06 +00:00
olivier merged commit 8c2e44238f into develop 2026-09-04 07:23:10 +00:00
olivier deleted branch lenaic/40-ci-plus-rapide 2026-09-04 07:23:10 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
g2/enervision!134
No description provided.