diff --git a/.github/workflows/scripts-tests.yml b/.github/workflows/scripts-tests.yml index 0ddff03c8e..9c338048ec 100644 --- a/.github/workflows/scripts-tests.yml +++ b/.github/workflows/scripts-tests.yml @@ -125,7 +125,38 @@ jobs: # fork n'atteint le runner. Retour arriere = revert de la PR. runs-on: [self-hosted, coursia-ephemeral, coursia-linux] if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository - timeout-minutes: 20 + # Plafond 20 -> 30 (#15853). Grandeur mesuree : le mur du JOB + # (started_at -> completed_at du job nomme exactement "Scripts Tests + # (CPU)"), celle sur laquelle timeout-minutes agit -- jamais la duree + # du run (file d'attente comprise, et pour un rerun les deux + # tentatives : c'etait la faute de grandeur de la v1). + # + # Requete a rejouer telle quelle avant de citer ou de retirer ce + # tableau (photographie datee, pas une verite) : runs du workflow + # 296034456, branch=main, status=completed, run_started_at > + # 2026-09-13T23:08:18Z (merge de xdist #15833) ; dans chaque run, job + # de nom EXACT "Scripts Tests (CPU)". + # + # Mesure du 2026-09-15T07:00Z, rejouee a 07:22Z sans derive : + # 70 runs conclus + # - 25 sans job : jobs: [], jamais demarres (supplantation de + # file) -- hors de toute discussion de plafond ; + # - 45 porteurs d'un job, max par conclusion : + # success 30 max 17,4 min + # failure 11 max 14,3 min + # cancelled 4 20,32-20,43 min + # Les 4 cancelled ont bien ete termines au mur de 20 min, mais les + # logs montrent des workers xdist morts puis 14-15 min de silence : ce + # sont des hangs que relever le plafond ne repare pas (suivi #16288), + # pas quatre cas de queue lente. Le relevement repose sur la marge + # preventive : le succes max a 17,4 min ne laisse que 2,6 min sous 20; + # 30 laisse ~12,6 min tout en restant sous les bornes 45/52 ci-dessous. + # (Retraction de la v1 run-level -- 26 runs, mediane 17,5 min, max + # 19,8 min, 16 annulations -- ecrite en tete du body de #16087.) + # 30 reste sous les deux plafonds qui l'englobent : l'agregateur + # pr_gate.py (--timeout-min 45) et le job pr-gate.yml + # (timeout-minutes: 52). + timeout-minutes: 30 steps: # ------------------------------------------------------------------ diff --git a/scripts/tests/test_pr_gate.py b/scripts/tests/test_pr_gate.py index 8cff95586e..e75ee987da 100644 --- a/scripts/tests/test_pr_gate.py +++ b/scripts/tests/test_pr_gate.py @@ -1991,7 +1991,7 @@ def _decide_with_walls(checks, walls): def test_declared_wall_is_read_from_the_real_workflows(): """Le cas fondateur, lu sur le depot et non sur une fixture.""" walls = pr_gate.derive_declared_timeouts() - assert walls.get("Scripts Tests (CPU)") == 20 + assert walls.get("Scripts Tests (CPU)") == 30 def test_declared_timeouts_tolerate_an_unreadable_state(tmp_path):