diff --git a/.github/workflows/always-on-guards-body.yml b/.github/workflows/always-on-guards-body.yml index 9e7ef86614d..f3728f16c01 100644 --- a/.github/workflows/always-on-guards-body.yml +++ b/.github/workflows/always-on-guards-body.yml @@ -70,7 +70,18 @@ jobs: name: "Always-on guards -- body" # Meme pool, meme garde anti-fork, meme routage que le job de contenu # (cf. always-on-guards.yml pour la mesure qui a fixe ce routage). - runs-on: [self-hosted, coursia-ephemeral, coursia-linux] + # + # 2026-10-27 (mesure ai-01) : retour sur `ubuntu-latest`, comme l'ecrit la + # note de rollback du job de contenu et comme le fait la politique + # « Q35 etape 2 » (#17397) portee par + # `scripts/ci/audit_self_hosted_needs.py` : cet organe certifie ce + # workflow comme n'ayant besoin de RIEN qui n'existe que sur le parc local + # (les cinq organes de body sont du bash + python stdlib). + # Motif du deplacement : le parc local est sature PAR SES CHECKOUTS + # (mesure 27/10 00:45Z : 11 des 12 slots occupes dans `actions/checkout`, + # 614 runs en file, 6 runs termines en 20 min). La garde anti-fork est + # CONSERVEE : aucun code de fork ne change de surface. + runs-on: ubuntu-latest if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository # Les cinq organes de body coutent quelques secondes : le plafond n'est # qu'un garde-fou contre un blocage de `gh`. diff --git a/.github/workflows/always-on-guards.yml b/.github/workflows/always-on-guards.yml index 0f7205ede21..a8808e253d4 100644 --- a/.github/workflows/always-on-guards.yml +++ b/.github/workflows/always-on-guards.yml @@ -124,7 +124,24 @@ jobs: # fait tourner `actions/setup-python@v5` sur CE pool -- run # 33691615314, runner myia-ai-01-linux-docker-6, success en 34 s. # Retour arriere = remettre `runs-on: ubuntu-latest` + retirer le `if:`. - runs-on: [self-hosted, coursia-ephemeral, coursia-linux] + # + # 2026-10-27 (mesure ai-01) : ce job revient sur `ubuntu-latest`, comme + # l'ecrit deja la note de rollback ci-dessus, et comme le fait la + # politique « Q35 etape 2 » du depot (#17397) que porte + # `scripts/ci/audit_self_hosted_needs.py` : cet organe classe + # 58 workflows declenches par `pull_request` comme n'ayant besoin de + # RIEN qui n'existe que sur le parc local. + # + # Pourquoi maintenant : le parc local est sature PAR SES CHECKOUTS. + # Mesure du 27/10 00:45Z : 11 des 12 slots occupes etaient dans une + # etape `actions/checkout` (~29 min pour recloner 220k objets), 614 + # runs en file, 6 runs termines en 20 min, et les 16 slots + # `coursia-waiter` (porteurs du PR gate) inoccupes. Ce job n'a aucun + # besoin local : il installe lui-meme ses dependances + # (`pip install pyyaml Pillow pytest`) et n'execute que des organes + # bash/python. La garde anti-fork est CONSERVEE : aucun code de fork + # ne change de surface. + runs-on: ubuntu-latest if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository timeout-minutes: 25 diff --git a/scripts/ci/check_self_hosted_runner_policy.py b/scripts/ci/check_self_hosted_runner_policy.py index 24956f8161e..e99692b14df 100644 --- a/scripts/ci/check_self_hosted_runner_policy.py +++ b/scripts/ci/check_self_hosted_runner_policy.py @@ -86,12 +86,14 @@ # tranche 3d (#14283) : premier consommateur GitHub-hosted du depot une # fois secret-scan bascule -- 2650 runs same-repo du 2026-08-28 au # 2026-09-02, timeout 25 min, aucun filtre `paths:`. - "always-on-guards.yml", - # #22331 : le job de body est la moitie extraite de always-on-guards.yml - # (memes organes, meme pool, meme garde anti-fork, meme routage). Le laisser - # sur GitHub-hosted rendrait la famine de file pire qu'avant, puisque son - # declencheur `edited` est justement celui qui produit les re-declenchements. - "always-on-guards-body.yml", + # + # 2026-10-27 (PR #22820, lane myia-ai-01:CoursIA) : always-on-guards.yml et + # always-on-guards-body.yml MIGRENT vers ubuntu-latest par Q35 etape 2 + # (#17397) -- l'organe `scripts/ci/audit_self_hosted_needs.py` les certifie + # sans aucun besoin local, et le parc local etait sature PAR SES CHECKOUTS + # (mesure 00:45Z : 11 des 12 slots occupes dans `actions/checkout`). Sortis + # de SELF_HOSTED_WORKFLOW_ALLOWLIST dans le meme commit. Precedent : + # repeated-prose-advisory.yml (#17443). "pr-gate-stale-sweep.yml", "windows-self-hosted-tests.yml", "linux-self-hosted-tests.yml", @@ -337,6 +339,22 @@ # (#17397, PR dediee myia-ai-01:CoursIA-2 c.206, 5 workflows # agregateurs, 2026-10-06). Sorti de SELF_HOSTED_WORKFLOW_ALLOWLIST # dans le meme commit. Precedent : #17443 (po-2023, 4 agregateurs). + # scripts-tests.yml : RESTE sur le parc local (PR #22820, lane + # myia-ai-01:CoursIA, 2026-10-27). La migration vers ubuntu-latest a ete + # tentee puis ANNULEE sur une MESURE, pas sur une preference : + # `Scripts Tests (CPU)` y echoue (run 40427418743 -- 4 echecs sur 20950 + # tests). Les deux causes sont couplees a la FORME du runner : + # (a) `scripts/lean/tests/test_lean_exec.py` -- `compute_granted` derive + # `jobs_cpu` de `os.cpu_count()` (2 sur ubuntu-latest, >= 4 sur le + # parc local) ; le test exige `granted == 4` ; + # (b) `scripts/tests/test_setup_shared_mathlib_scan.py` -- le script + # `scripts/lean/setup_shared_mathlib.ps1` convertit la racine du + # depot en chemins Windows (`$RepoRoot -replace '/', '\'`), ce qui + # invalide `Test-Path` sur un runner POSIX -> « Aucun projet Lake + # avec mathlib trouve. ». + # Un job dont la suite de tests est couplee a la forme de l'hote a un + # besoin local REEL : l'organe `audit_self_hosted_needs.py` ne le voit pas + # (il classifie le workflow, pas la suite qu'il execute). "scripts-tests.yml", "series-naming-gate.yml", # registre TRANCHE14 (issue #16762, owner myia-po-2023:CoursIA) : meme