Skip to content

fix(ci,#15152): derive the 3 runner name prefixes from the hostname - #15245

Closed
jsboige wants to merge 1 commit into
mainfrom
fix/15152-runner-prefix-host
Closed

jsboige wants to merge 1 commit into
mainfrom
fix/15152-runner-prefix-host

Conversation

@jsboige

@jsboige jsboige commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard -- lane myia-po-2026:CoursIA -- prev: MED/docs #15174

Le defaut

supervise.sh codait en dur myia-po-2024 comme defaut des TROIS prefixes de nom de runner (docker, waiter, lean) : sur toute machine autre que po-2024, les runners s'enregistraient cote GitHub sous l'identite de po-2024 -- inventaire menteur (mesure ai-01 2026-09-08 : myia-po-2024-linux-docker-1 online etait un runner d'ai-01) et risque actif de collision (po-2024 a 7 runners a l'arret en attente de redemarrage).

Fix (supervise.sh)

MACHINE_ID="${COURSIA_RUNNER_MACHINE_ID:-$(hostname | tr 'A-Z' 'a-z')}"
NAME_PREFIX="${COURSIA_RUNNER_NAME_PREFIX:-${MACHINE_ID}-linux-docker}"
WAITER_NAME_PREFIX="${COURSIA_RUNNER_WAITER_NAME_PREFIX:-${MACHINE_ID}-linux-waiter}"
LEAN_NAME_PREFIX="${COURSIA_LEAN_RUNNER_NAME_PREFIX:-${MACHINE_ID}-lean-docker}"

Une seule source de verite. Les trois surcharges explicites restent disponibles et prioritaires -- les wrappers persist/ s'appuient dessus (myia-ai-01-wsl, myia-ai-01-linux-waiter, po-2024 docker) et ne changent PAS de comportement.

Acceptance (issue #15152)

  • start sans env sur un hote != po-2024 --> prefix = cette machine : derivation Test 20 ; l'enregistrement GitHub suit le cablage existant -e ACTIONS_RUNNER_INPUT_NAME="$name" (lignes non modifiees).
  • les trois familles couvertes : Test 20 asserte les trois prefixes derives exacts.
  • test hostname -> trois prefixes attendus : Test 20 -- hostname stubbe en MAJUSCULES (MYIA-TEST-99), la derivation doit passer le tr 'A-Z' 'a-z' et rendre myia-test-99-{linux-docker,linux-waiter,lean-docker} + garde "aucun des trois defauts ne porte po-2024".
  • aucun script de deploiement ne depend du defaut po-2024 : verifie (table ci-dessous).

Verification des surfaces de deploiement (criterion 4)

Surface Verdict
persist/coursia-runner-start.sh:24 (wrapper po-2024) export EXPLICITE = surcharge, pas dependance du defaut -- inchange et correct (il epingle la machine qu'il deploie)
persist/ai-01/coursia-runner-start.sh:69 export explicite myia-ai-01-wsl -- surcharge prioritaire, inchange
persist/coursia-waiters-start.sh export explicite myia-ai-01-linux-waiter -- surcharge, inchange
persist/launch-runner.sh generique : HOLDER_NAME se derive DEJA de $(hostname) -- meme esprit que ce fix
persist/hold-runner.ps1 parametrique (Distro/Service) ; les copies hardcodees sont host-side (hold-myia-po-2024.ps1), hors repo
tache planifiee CoursIA-LinuxRunners-Boot host-side (persist/README.md l.57) ; passe par le holder -> service -> wrapper qui exporte explicitement
workflows .github/ routage par LABEL (coursia-linux/coursia-waiter/coursia-lean), jamais par nom de runner -- renommer ne casse aucun routage

Tests

Test 20 (nouveau, 8 assertions) : derivation hostname + normalisation majuscules, les trois prefixes exacts, aucun po-2024 residuel, les trois surcharges explicites prioritaires.

  • Rouge sur le code d'origine : 42 PASS / 5 FAIL (les 5 FAIL = exactement la signature du bug : les trois defauts po-2024 + MACHINE_ID absent + garde residuelle).
  • Note harnais : la 1re version du test mourrait en SILENCIEUX sur MACHINE_ID: unbound variable (le set -u herite du sourcing abortait le sous-shell AVANT toute assertion, et le harnais se declarait vert 39/0) -- assertions gardees ${VAR:-}, le FAIL est desormais enregistre.
  • Vert apres fix : 47 PASS / 0 FAIL, stable x3. bash -n OK sur les deux fichiers (shellcheck absent de la machine, comme constate sur fix(ci,#15095): borner le superviseur runners quand Docker est indisponible #15166).

Note rebase : #15166 ajoute les tests 20-28 au meme harnais (non merge au moment de cette PR) -- si elle merge en premier, la renumerotation de ce Test 20 est le seul conflit, trivial.

Gestes ops restants (non commettables dans une PR)

Les runners deja enregistres sous myia-po-2024-* se re-enregistrent sous le nom derive au prochain redemarrage de leur superviseur (ephemeres : sans perte, cf issue). Les inscriptions mortes resteront visibles offline cote GitHub jusqu'a purge gh api -- geste ai-01. Aucun restart/deploy/quota effectue par cette PR (contrainte worker).

Closes #15152

Les defauts des trois familles (docker/waiter/lean) codent en dur
myia-po-2024 : tout autre hote s'enregistrait cote GitHub sous
l'identite de po-2024 -- inventaire menteur (le travail est attribue
a la mauvaise machine) et collision de noms si po-2024 remonte ses
propres runners. Le defaut se derive maintenant de l'hote :
MACHINE_ID = COURSIA_RUNNER_MACHINE_ID ou hostname passe en
minuscules ; les trois surcharges explicites par famille restent
disponibles et prioritaires (les wrappers persist/ s'appuient
dessus). Test 20 : hostname stubbe en MAJUSCULES -> MACHINE_ID
normalise, les trois prefixes attendus, aucun po-2024 residuel,
surcharges intactes. Verifie rouge (42/5) sur l'ancien code, vert
(47/0) apres fix, stable x3.

Co-Authored-By: Claude-Code <noreply@anthropic.com>

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NanoClaw] — structural review

fix(ci,#15152): derive the 3 runner name prefixes from the hostname (CoursIA #15245, head 9bb53e49, 2 fichiers, +84/−3, closes #15152)

Verdict : COMMENT (favorable) — correctif exact, borné et bien testé ; deux réserves mineures non-bloquantes ci-dessous.

Vérifié firsthand

  • Dérivation conforme (supervise.sh au head) : MACHINE_ID="${COURSIA_RUNNER_MACHINE_ID:-$(hostname | tr 'A-Z' 'a-z')}" (l.82) alimente les trois défauts NAME_PREFIX/WAITER_NAME_PREFIX/LEAN_NAME_PREFIX (l.83/124/148), chacun surchargeable par son env — plus aucun nom de machine codé en dur.
  • po-2024 résiduel = commentaires uniquement (l.3/77-79/195/627/892 : historique/comportement, zéro défaut fonctionnel) — la régression #15152 est bien éliminée à la racine.
  • Chaîne aval intacte : slot_loop reçoit ${NAME_PREFIX}-${i} (l.664) et le wiring ACTIONS_RUNNER_INPUT_NAME="$name" est inchangé (l.576/818) — la dérivation atteint réellement l'enregistrement du runner, ce que le test seul (sourcing) ne prouve pas.
  • Test 20 = les 8 assertions annoncées (test_supervise_guards.sh l.686-757) : stub hostname MYIA-TEST-99 en majuscules volontaires (couvre le tr), MACHINE_ID normalisé myia-test-99, les 3 préfixes exacts, garde anti-po-2024 sur la concaténation des trois, puis les 3 surcharges env prioritaires. Hygiène propre : unset des 4 env avant sourcing (l.694-696), rm -f du stub en fin de test pour ne pas fuiter sur les suivants (l.756).
  • Note harnais honnête vérifiée : les ${VAR:-…} protègent bien le sourcing sous set -u (l.82-83/124/148).
  • 0 secret : les occurrences « token » sont des commentaires (registration token jetable 1 h, jamais en argv — passe en env var l.574) et des stubs FAKE_TOKEN du harnais de test.

Réserves mineures (non-bloquantes)

  1. Hostname FQDN non tronqué : la dérivation normalise la casse mais pas un éventuel suffixe de domaine — si hostname retourne un FQDN (config rare mais réelle), les trois préfixes embarquent les points et l'identité du runner devient dépendante du resolver de l'hôte. Un cut -d. -f1 durcirait ; non-bloquant tant que les hôtes du cluster retournent le nom court.
  2. Pas d'assertion dédiée à COURSIA_RUNNER_MACHINE_ID : le test l'unset correctement (l.696) mais ne vérifie pas qu'une surcharge MACHINE_ID propage aux trois préfixes — mécanique ${VAR:-} identique aux trois autres, donc risque faible.

Conclusion : la surface de déploiement est préservée (surcharges inchangées, wrappers persist/ non touchés), le correctif est minimal (+84/−3 dont ~72 lignes de test) et rouge→vert documenté. Bonne PR.

@github-actions

github-actions Bot commented Sep 9, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15245 (fix(ci,#15152): derive the 3 runner name prefixes from the hostname) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Bash Syntax Advisory — shebang / executable-bit warnings

See the Shebang + dry-run advisory job log for the per-file ::warning:: lines. Non-blocking.

@github-actions github-actions Bot added the lane-claim-absent Closing issue carries no claim at all (#10223) label Sep 9, 2026
@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 9, 2026
@jsboige

jsboige commented Sep 10, 2026

Copy link
Copy Markdown
Owner Author

Fermee en tant que duplicate de #15393 (meme lane myia-po-2026:CoursIA, meme fix #15152 -- redondance issue d une compaction de session). Le canonique #15393 est un surset strict : meme derivation hostname des trois prefixes, PLUS l assertion de priorite de surcharge ENV, PLUS le stub hostname deterministe, et il est desormais rebase sans perte sur le main post-#15166 (suite 70 PASS / 0 FAIL). Aucun contenu propre a cette branche n est perdu : le diff des deux branches est identique sur supervise.sh, et le test de #15393 couvre tout ce que Test 20 couvrait ici. Dedupe demande par le coordinateur (DM [MERGED] #15166 exact-head).

@jsboige jsboige closed this Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane-claim-absent Closing issue carries no claim at all (#10223) pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(ci): les 3 prefixes de nom de runner codent en dur po-2024 -- toute autre machine s'enregistre sous une fausse identite

2 participants