Skip to content

La CI Windows tourne en séquentiel : la cause, pas les symptômes - #6

Open
pymenvert wants to merge 1 commit into
mainfrom
fix/ci-windows-en-sequentiel
Open

La CI Windows tourne en séquentiel : la cause, pas les symptômes#6
pymenvert wants to merge 1 commit into
mainfrom
fix/ci-windows-en-sequentiel

Conversation

@pymenvert

Copy link
Copy Markdown
Owner

Objectif

Publier la 2.1.1 a demandé quatre passages de CI Windows, avec quatre
échecs sur quatre tests différents
de champ3d.test.js — et pas un seul
défaut dans Cascade
:

ce qui tombait ce que c'était vraiment
l'ordre 3D relevait 3 barres sur 4 fenêtre de relevé à 80 ms de marge
46 tests « cancelled », fail 0 Edge n'a pas démarré dans les 20 s
écart-type du bruit divisé par deux relevés pris avant que le champ soit établi
deux barres confondues qui diffèrent relevés décalés dans le temps

Les trois premiers ont été corrigés à la source (#5). Le quatrième a suffi à
montrer qu'on courait après les symptômes.

La cause, enfin identifiée

node --test lance autant de fichiers en parallèle qu'il y a de cœurs, et
chaque fichier démarre de vrais serveurs Cascade — parfois un navigateur.

  • machine de développement : 16 cœurs → ça tient, et tout passe, toujours
  • runner GitHub : 2 à 4 cœurs → tout se dispute la machine, et les tests qui
    mesurent une grandeur qui évolue dérivent

D'où des échecs au hasard, impossibles à reproduire là où on les corrige.

Le changement

Le passage Windows tourne en --test-concurrency=1, et le délai du job passe de
10 à 30 minutes.

Mesuré ici : 310 s en séquentiel contre ~100 s en parallèle. Un runner étant
plus lent, la marge est nécessaire — et ce passage a pour rôle d'attraper ce qui
est spécifique à Windows, pas d'aller vite.

Vérifications

Check Résultat
npm test (parallèle) ✅ 346 tests, 0 échec, 0 annulé, 0 ignoré
npm test -- --test-concurrency=1 ✅ 346 tests, idem, en 310 s

Ce que ça ne fait PAS

C'est un contournement honnête, pas une correction. Il donne aux tests des
conditions saines, il ne les rend pas robustes. Le passage Ubuntu tourne
toujours en parallèle
et reste exposé.

Ce qu'il faudrait vraiment faire est écrit et daté dans docs/reste-a-faire.md :
que ces tests relèvent leurs valeurs au même instant logique, au lieu de deux
moments successifs. C'est ce décalage, et lui seul, qui produit les écarts.

Publier la 2.1.1 a demandé quatre passages de CI Windows, avec quatre échecs sur
quatre tests DIFFÉRENTS de champ3d.test.js — et pas un seul défaut dans Cascade :

  - l'ordre 3D relevait 3 barres sur 4      (fenêtre à 80 ms de marge)
  - 46 tests « cancelled », fail 0          (Edge pas démarré en 20 s)
  - écart-type du bruit divisé par deux     (mesure avant l'établissement du champ)
  - deux barres confondues qui diffèrent    (relevés décalés dans le temps)

Les trois premiers sont corrigés à la source. Le quatrième a suffi à montrer
qu'on courait après les symptômes : jamais le même test, jamais une seule fois
en local, et il y en aurait toujours eu un cinquième.

La cause est commune. `node --test` lance autant de fichiers en parallèle qu'il y
a de cœurs, et chaque fichier démarre de VRAIS serveurs Cascade — parfois un
navigateur. Sur cette machine de développement, 16 cœurs : ça tient. Sur un
runner GitHub, 2 ou 4 : tout se dispute la machine, et des tests qui mesurent une
grandeur qui évolue dérivent. D'où des échecs au hasard, impossibles à reproduire
là où on les corrige.

Le passage Windows tourne donc en `--test-concurrency=1`. Plus rien ne se
dispute la machine. Mesuré ici : 310 s en séquentiel contre ~100 s en parallèle,
d'où le délai du job porté de 10 à 30 minutes — un runner est plus lent, et ce
passage a pour rôle d'attraper ce qui est spécifique à Windows, pas d'aller vite.

⚠ C'est un contournement honnête, pas une correction : il donne aux tests des
conditions saines, il ne les rend pas robustes. Le passage Ubuntu, lui, tourne
toujours en parallèle et reste exposé. Ce qu'il faudrait vraiment faire est
écrit dans docs/reste-a-faire.md : que ces tests relèvent leurs valeurs au même
instant logique, au lieu de deux moments successifs.

346 tests, 0 échec, 0 annulé, 0 ignoré — vérifié en séquentiel ET en parallèle.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant