ci: rendre la validation import Godot réellement stricte (#30) #35

Merged
Reliodas merged 1 commit from ci/30-import-strict into develop 2026-06-20 10:53:07 +00:00
Owner

Closes #30

L'étape import de Woodpecker neutralisait le code retour de Godot avec || true, puis ne cherchait que SCRIPT ERROR et Parse Error. Une autre erreur fatale (ou un échec sans ces deux libellés) pouvait laisser le pipeline poursuivre en faux vert.

Changements

  • Code de sortie de godot --headless --import capturé explicitement (set +e; …; import_rc=$?; set -e) au lieu d'être neutralisé par || true.
  • Détection élargie mais prudente des erreurs fatales usuelles : script/parsing, Failed to load (script/ressource/scène), Cannot open file/Can't open, could not be loaded/Dependencies for resource, Cyclic. On évite délibérément les motifs trop larges (ERROR: générique, Condition ... is true), souvent non fatals en headless, pour ne pas rendre la CI instable.
  • Un import réussi exige le cache .godot ET l'absence d'erreur détectée.
  • Traitement explicite du code de sortie : seul cas bénin documenté et toléré — code non nul sur cache froid alors que l'import a réussi (cache présent, aucune erreur fatale) ; tout autre code non nul échoue.
  • Logique commentée dans le fichier CI. Suite GUT complète + rapport JUnit conservés ; étape version-coherence inchangée.

Critères d'acceptation

  • le code retour de l'import est traité explicitement et justifié pour les seuls cas bénins connus ;
  • les erreurs Godot fatales usuelles font échouer le pipeline, sans dépendre de deux chaînes seulement ;
  • un import réussi exige le cache attendu et l'absence d'erreurs détectées ;
  • le comportement est documenté dans le fichier CI ;
  • le pipeline reste vert avec la suite complète et le rapport JUnit.

Tests

  • Validation locale de la logique de détection : import réel accepté (rc=0, cache présent, aucune erreur fatale) ; quatre logs fatals synthétiques (script, Failed to load, Cannot open file, Dependencies … could not be loaded) tous détectés ; bruit non fatal (Condition … is true, WARNING, bannière de version) correctement ignoré (aucun faux positif).
  • YAML revalidé (yaml.safe_load).
  • La validité de bout en bout est attestée par le pipeline pull_request de cette MR (l'étape import durcie s'exécute sur le dépôt réel).
Closes #30 L'étape `import` de Woodpecker neutralisait le code retour de Godot avec `|| true`, puis ne cherchait que `SCRIPT ERROR` et `Parse Error`. Une autre erreur fatale (ou un échec sans ces deux libellés) pouvait laisser le pipeline poursuivre en faux vert. ## Changements - Code de sortie de `godot --headless --import` **capturé explicitement** (`set +e; …; import_rc=$?; set -e`) au lieu d'être neutralisé par `|| true`. - Détection élargie mais prudente des erreurs fatales usuelles : script/parsing, `Failed to load` (script/ressource/scène), `Cannot open file`/`Can't open`, `could not be loaded`/`Dependencies for resource`, `Cyclic`. On évite délibérément les motifs trop larges (`ERROR:` générique, `Condition ... is true`), souvent non fatals en headless, pour ne pas rendre la CI instable. - Un import réussi exige **le cache `.godot`** ET **l'absence d'erreur détectée**. - Traitement explicite du code de sortie : seul cas bénin **documenté** et toléré — code non nul sur cache froid alors que l'import a réussi (cache présent, aucune erreur fatale) ; tout autre code non nul échoue. - Logique commentée dans le fichier CI. Suite GUT complète + rapport JUnit conservés ; étape `version-coherence` inchangée. ## Critères d'acceptation - [x] le code retour de l'import est traité explicitement et justifié pour les seuls cas bénins connus ; - [x] les erreurs Godot fatales usuelles font échouer le pipeline, sans dépendre de deux chaînes seulement ; - [x] un import réussi exige le cache attendu et l'absence d'erreurs détectées ; - [x] le comportement est documenté dans le fichier CI ; - [x] le pipeline reste vert avec la suite complète et le rapport JUnit. ## Tests - Validation locale de la logique de détection : import réel accepté (`rc=0`, cache présent, aucune erreur fatale) ; quatre logs fatals synthétiques (script, `Failed to load`, `Cannot open file`, `Dependencies … could not be loaded`) tous détectés ; bruit non fatal (`Condition … is true`, `WARNING`, bannière de version) correctement ignoré (aucun faux positif). - YAML revalidé (`yaml.safe_load`). - La validité de bout en bout est attestée par le pipeline `pull_request` de cette MR (l'étape import durcie s'exécute sur le dépôt réel).
ci: rendre la validation import Godot réellement stricte (#30)
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
3b111f23d6
L'étape import neutralisait le code retour de Godot (|| true) et ne cherchait
que SCRIPT ERROR / Parse Error. Désormais le code de sortie est capturé
explicitement, la détection couvre les erreurs fatales usuelles (chargement de
script/ressource/scène, fichier introuvable, dépendances manquantes) sans
sur-filtrer, et un import réussi exige le cache .godot ET l'absence d'erreur
détectée. Seul cas bénin toléré et documenté : code non nul sur cache froid.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit 9de5a1d8d1 into develop 2026-06-20 10:53:07 +00:00
Sign in to join this conversation.
No reviewers
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: jeux/beaulieu-sur-brume#35
No description provided.