Chaîne d'intégration : 7 min 30 par demande, dont trois fois la même installation #133

Closed
opened 2026-09-03 22:39:50 +00:00 by lenaic · 0 comments
Owner

Élévation du #40. Pas prioritaire au sens du jalon, mais payé par tout le monde à chaque demande de fusion.

Le constat, mesuré

La chaîne met 7 min 34 sur une demande (exécution #232, PR #125). Sept jobs, un seul exécuteur : ils ne s'exécutent pas en parallèle, ils font la queue.

Le coût n'est pas dans les contrôles, il est dans ce qu'on refait :

Ce qui est refait Combien de fois
apt-get install 4 jobs
pip install -r requirements-dev.txt 3 jobs, sur la même image épinglée
npm ci sur services/dashboard 2 jobs
Cache des paquets aucun, nulle part

qualite, tests-unitaires et dependances-python déclarent le même container: au même sha256, et refont chacun le même apt puis la même installation Python. dependances-dashboard et tableau-de-bord installent tous deux les dépendances npm du même projet.

Ce que je propose

  1. Réunir les trois jobs Python en un seul. Les étapes restent séparées et gardent leurs commentaires, seul le préambule est mutualisé. L'ordre est revu pour que le format et le typage échouent en premier, les audits en dernier.
  2. Réunir les deux jobs npm de la même façon.
  3. Ajouter un cache pip et un cache npm, clés portées par requirements-dev.txt, les pyproject.toml applicatifs et package-lock.json.

Sans risque pour la protection de branche : le contrôle obligatoire est Intégration / *, un joker. Aucun nom de job n'y est figé, les renommer et les fusionner ne casse rien.

Ce que je ne propose pas, et pourquoi

Un paths-ignore pour les demandes de documentation. C'est la version dangereuse : le workflow ne se joue pas du tout, donc aucun contrôle ne rapporte son statut, et le joker Intégration / * n'a rien à quoi se raccrocher. La demande peut rester bloquée en silence — le même mode de panne que la protection de branche du 1er septembre.

Et l'idée suppose que la documentation soit vérifiée par « ce qui a du sens pour elle ». Aujourd'hui rien ne vérifie un .md : ni les liens, ni le format. Filtrer par chemin ne rendrait pas la chaîne intelligente, cela la débrancherait pour une classe de fichiers.

Donc, dans l'autre sens : donner à la documentation son propre contrôle avant de lui donner une voie rapide. Un cas d'essai vérifie que les liens relatifs des .md mènent à un fichier existant. 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. Mesuré à l'écriture : 111 liens relatifs dans 62 fichiers.

Reste ouvert, après celui-ci

La sortie anticipée par périmètre. Faisable sans danger, mais à l'intérieur des jobs et jamais par paths-ignore : le job démarre, regarde si un fichier de son périmètre a changé, et sort vert en quelques secondes sinon. Il rapporte toujours son statut, donc aucun piège de protection. Demande d'abord d'éprouver sur une branche jetable ce que fait le joker face à un contrôle absent, ce qui ne se devine pas.

Le contrôle des secrets ne devra jamais se sauter : un secret peut arriver dans un .md.

Élévation du #40. Pas prioritaire au sens du jalon, mais payé par tout le monde à chaque demande de fusion. ## Le constat, mesuré La chaîne met **7 min 34** sur une demande (exécution #232, PR #125). Sept jobs, un seul exécuteur : ils ne s'exécutent pas en parallèle, ils font la queue. Le coût n'est pas dans les contrôles, il est dans ce qu'on refait : | Ce qui est refait | Combien de fois | |---|---| | `apt-get install` | 4 jobs | | `pip install -r requirements-dev.txt` | **3 jobs**, sur la même image épinglée | | `npm ci` sur `services/dashboard` | **2 jobs** | | Cache des paquets | **aucun**, nulle part | `qualite`, `tests-unitaires` et `dependances-python` déclarent le même `container:` au même sha256, et refont chacun le même apt puis la même installation Python. `dependances-dashboard` et `tableau-de-bord` installent tous deux les dépendances npm du même projet. ## Ce que je propose 1. Réunir les trois jobs Python en un seul. Les étapes restent séparées et gardent leurs commentaires, seul le préambule est mutualisé. L'ordre est revu pour que le format et le typage échouent en premier, les audits en dernier. 2. Réunir les deux jobs npm de la même façon. 3. Ajouter un cache `pip` et un cache `npm`, clés portées par `requirements-dev.txt`, les `pyproject.toml` applicatifs et `package-lock.json`. Sans risque pour la protection de branche : le contrôle obligatoire est `Intégration / *`, un joker. Aucun nom de job n'y est figé, les renommer et les fusionner ne casse rien. ## Ce que je ne propose pas, et pourquoi **Un `paths-ignore` pour les demandes de documentation.** C'est la version dangereuse : le workflow ne se joue pas du tout, donc aucun contrôle ne rapporte son statut, et le joker `Intégration / *` n'a rien à quoi se raccrocher. La demande peut rester bloquée en silence — le même mode de panne que la protection de branche du 1er septembre. Et l'idée suppose que la documentation soit vérifiée par « ce qui a du sens pour elle ». Aujourd'hui **rien** ne vérifie un `.md` : ni les liens, ni le format. Filtrer par chemin ne rendrait pas la chaîne intelligente, cela la débrancherait pour une classe de fichiers. Donc, dans l'autre sens : **donner à la documentation son propre contrôle** avant de lui donner une voie rapide. Un cas d'essai vérifie que les liens relatifs des `.md` mènent à un fichier existant. 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. Mesuré à l'écriture : 111 liens relatifs dans 62 fichiers. ## Reste ouvert, après celui-ci **La sortie anticipée par périmètre.** Faisable sans danger, mais à l'intérieur des jobs et jamais par `paths-ignore` : le job démarre, regarde si un fichier de son périmètre a changé, et sort vert en quelques secondes sinon. Il rapporte toujours son statut, donc aucun piège de protection. Demande d'abord d'éprouver sur une branche jetable ce que fait le joker face à un contrôle absent, ce qui ne se devine pas. Le contrôle des secrets ne devra jamais se sauter : un secret peut arriver dans un `.md`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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#133
No description provided.