fix(ci): runner-cleanup.sh — détection dynamique du service runner (nom d'unité réel) #9

Merged
nonobis merged 4 commits from fix/runner-cleanup-restart into main 2026-08-14 12:28:12 +02:00
Owner

Problème

La section 6 (redémarrage du service runner après purge du cache d'actions) ne détectait que l'unité systemd nommée exactement forgejo-runner (grep codé en dur) et exécutait systemctl stop forgejo-runner sur ce nom figé.

Sur les LXC runners (runner-murin/runner-odin/runner-hugin, vérifié 2026-08-14), l'unité peut s'appeler runner.service, act-runner.service, forgejo-actions-runner.service, runner-<ct>.service… → le test grep forgejo-runner ratait TOUS ces cas → message « ⚠️ service runner non détecté » → le process runner gardait son cache mémoire corrompu → CI toujours rouge (ci: command not found dans /var/run/act/workflow/2-composite-*.sh).

Symptôme constaté (run Heimdall #1925)

  • checkout@v4 passe (le cache disque ~/.cache/act a bien été purgé par le cron)
  • le step « Run .NET tests » exécute encore l'ancien format (→ Heimdall.Web.Tests, → Heimdall.E2E.Tests) et échoue sur /var/run/act/workflow/2-composite-16-composite-0.sh: ci: command not found → cache mémoire du process runner corrompu, jamais redémarré.

Fix

  • Détection dynamique du nom d'unité : systemctl list-unit-files | awk '{print $1}' | grep -m1 'runner' puis systemctl stop/start "$RUNNER_UNIT" (stop/start complet, pas restart).
  • Même logique côté Docker (docker ps -a | grep -m1 'runner').
  • Message d'alerte enrichi avec les commandes de diagnostic si aucun service/conteneur n'est trouvé.

Impact

Aucun impact applicatif. Bénéfice immédiat pour tous les projets nonobis/* dès le prochain passage du cron runner-cleanup (toutes les 6 h) : le service runner sera redémarré au nom réel, la mémoire du process sera purgée et les scripts composites seront régénérés au nouveau format.

## Problème La section 6 (redémarrage du service runner après purge du cache d'actions) ne détectait que l'unité systemd nommée exactement `forgejo-runner` (grep codé en dur) et exécutait `systemctl stop forgejo-runner` sur ce nom figé. Sur les LXC runners (runner-murin/runner-odin/runner-hugin, vérifié 2026-08-14), l'unité peut s'appeler `runner.service`, `act-runner.service`, `forgejo-actions-runner.service`, `runner-<ct>.service`… → le test `grep forgejo-runner` ratait TOUS ces cas → message « ⚠️ service runner non détecté » → le process runner gardait son cache mémoire corrompu → CI toujours rouge (`ci: command not found` dans `/var/run/act/workflow/2-composite-*.sh`). ## Symptôme constaté (run Heimdall #1925) - checkout@v4 **passe** (le cache disque `~/.cache/act` a bien été purgé par le cron) - le step « Run .NET tests » exécute encore **l'ancien format** (`→ Heimdall.Web.Tests`, `→ Heimdall.E2E.Tests`) et échoue sur `/var/run/act/workflow/2-composite-16-composite-0.sh: ci: command not found` → cache mémoire du process runner corrompu, jamais redémarré. ## Fix - Détection **dynamique** du nom d'unité : `systemctl list-unit-files | awk '{print $1}' | grep -m1 'runner'` puis `systemctl stop/start "$RUNNER_UNIT"` (stop/start complet, pas restart). - Même logique côté Docker (`docker ps -a | grep -m1 'runner'`). - Message d'alerte enrichi avec les commandes de diagnostic si aucun service/conteneur n'est trouvé. ## Impact Aucun impact applicatif. Bénéfice immédiat pour tous les projets nonobis/* dès le prochain passage du cron runner-cleanup (toutes les 6 h) : le service runner sera redémarré au nom réel, la mémoire du process sera purgée et les scripts composites seront régénérés au nouveau format.
Sans stop/start COMPLET du service, les workers gardent leur cache mémoire et
régénèrent des répertoires d'actions incomplets (clone bare sans working tree)
→ « Error: Cannot find module .../dist/index.js » (MODULE_NOT_FOUND) sur
checkout@v4 et toutes les actions par URL, même après --force-full.
Ajoute la section 6 : détection systemd forgejo-runner, sinon conteneur docker
(forgejo-runner/act-runner/runner), stop → sleep 2 → start. Jamais en mode
SÛR (job en cours) ni en --docker-only.
L'ancien test systemd `grep 'forgejo-runner'` + `systemctl stop forgejo-runner`
ratait toutes les unités nommées différemment (runner.service, act-runner.service,
forgejo-actions-runner.service, runner-<ct>.service) → « service runner non
détecté » → le process runner garde son cache mémoire corrompu → CI rouge.

Cause vérifiée 2026-08-14 : runners LXC runner-murin/runner-odin/runner-hugin,
checkout@v4 passe (cache disque purgé par cron) mais les scripts composites
anciens (/var/run/act/workflow/2-composite-*.sh → 'ci: command not found')
continuent d'être exécutés — le process n'a jamais été redémarré.

Fix : détection du nom d'unité réel (awk + grep 'runner'), stop/start sur ce
nom exact ; même logique côté docker (grep 'runner' au lieu de 3 patterns).
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/templates!9
No description provided.