Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions scripts/ci/docker/linux-runner/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Runtime gh CLI artifact spilled by the runner stack (device-id, regenerable) --
# written into this dir during container/job cycles; never commit.
.local/
12 changes: 9 additions & 3 deletions scripts/ci/docker/linux-runner/persist/coursia-runner.service
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,21 @@
# /etc/systemd/system/coursia-runner.service (systemctl enable --now).
#
# Parametres machine : NAME_PREFIX (po-2024 -> myia-po-2024-linux-docker) et
# N slots (po-2024 -> 4) vivent dans le wrapper coursia-runner-start.sh.
# N slots (po-2024 -> 8, dispatch capacite #14288 2026-09-02) vivent dans le
# wrapper coursia-runner-start.sh (N porte par l'argument ExecStart).
[Unit]
Description=CoursIA Linux runners supervisor (docker slots)
Requires=docker.service
# Wants= au lieu de Requires= (cf #14347 item 2, reserve Hermes sur #14341) :
# un docker.service en echec au boot DOIT retarder le service et le maintenir
# en retry (Restart=always), pas le faire sortir de la liste des unites.
# Le superviseur est resilient par conception : sa boucle de slots retente
# docker toutes les 15 s, et le holder reprend au prochain logon.
Wants=docker.service
After=docker.service

[Service]
Type=simple
ExecStart=/usr/local/bin/coursia-runner-start.sh start 4
ExecStart=/usr/local/bin/coursia-runner-start.sh start 8
ExecStop=/usr/local/bin/coursia-runner-start.sh stop
Restart=always
RestartSec=30
Expand Down
16 changes: 12 additions & 4 deletions scripts/ci/docker/linux-runner/persist/launch-runner.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#!/usr/bin/env bash
# Pont logon -> holder : action de la tache planifiee "CoursIA-LinuxRunners"
# (InteractiveToken, LeastPrivilege). Copie de reference genrique -- sur
# po-2024 l'original vit sous %USERPROFILE%\.coursia-runner\launch-myia-po-2024.sh
# et appelle le holder machine-local hold-myia-po-2024.ps1.
# (InteractiveToken, LeastPrivilege). Copie de reference genrique -- le pont
# appelle le holder via HOLDER_NAME, derive par defaut de la machine
# (hold-$(hostname).ps1) : la recette §Persistance est copy-paste sur une
# machine tierce, aucune edition de script (cf #14347 item 1, reserve Hermes
# sur #14341).
#
# schtasks action : C:\Program Files\Git\bin\bash.exe -lc "<ce script> 4"
#
Expand All @@ -16,7 +18,13 @@ exec >>"$LOG" 2>&1
echo "=== $(date -u +%Y-%m-%dT%H:%M:%SZ) pont logon->holder (args: $*) ==="

# cygpath : powershell.exe -File exige un chemin Windows, $HOME est posix.
WINPS1="$(cygpath -w "$HOME/.coursia-runner/hold-myia-po-2024.ps1")"
HOLDER_NAME="${HOLDER_NAME:-hold-$(hostname).ps1}"
WINPS1="$(cygpath -w "$HOME/.coursia-runner/$HOLDER_NAME")"
if [ ! -f "$WINPS1" ]; then
echo "FATAL: holder $WINPS1 introuvable -- deployer le ps1 ou surcharger HOLDER_NAME" >&2
exit 2
fi
echo "holder=$HOLDER_NAME"
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$WINPS1"
rc=$?
echo "holder spawn -> rc=$rc"
Expand Down
12 changes: 8 additions & 4 deletions scripts/ci/docker/linux-runner/supervise.sh
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,14 @@ die() { echo "ERREUR: $*" >&2; exit 1; }
# -- sans lui, un `start 4` rend 5 PIDs et le defense-positif echoue.
# Sortie : liste espacee de PIDs (vide si aucun superviseur).
supervisor_pids() {
ps -ef 2>/dev/null \
| grep '[s]upervise\.sh start' \
| awk '$3==1 {print $2}'
return 0
local me out
# #14347 : `$$` = PID du bash principal, stable dans les subshells.
# `$PPID` vaut 1 sous systemd (herite du lancement par PID 1 ; bash ne le
# recompute pas pour les subshells) -- mesure : self=PPID=1 avec out=mon
# propre PID, donc le garde s'auto-matchait et le service crash-loopait.
me="$$"
out="$(ps -ef 2>/dev/null | grep '[s]upervise\.sh start' | awk -v me="$me" '$2 != me && $3==1 {print $2}')"
printf '%s\n' "$out"
}

fetch_token() {
Expand Down
Loading