Aller au contenu

Codes de retour

Chaque processus gapline sort avec l’un des cinq codes. Les scripts CI devraient brancher sur le code de retour plutôt que de parser stdout — les codes sont stables entre releases.

CodeNomSignification
0SUCCESSL’opération s’est terminée normalement. Émis aussi quand l’utilisateur a refusé un prompt interactif (pas une erreur — un abort explicite).
1COMMAND_FAILEDÉchec générique : validation avec erreurs, requête --where invalide, champ inconnu dans --set, violation de clé primaire ou étrangère.
2CONFIG_ERRORgapline.toml malformé, clé inconnue, type incompatible sur un seuil. Problèmes de config, pas de runtime.
3INPUT_ERRORErreur I/O : fichier flux absent, archive illisible, sortie non-écrivable, permission refusée.
4NO_CHANGESL’opération n’a matché personne et rien n’a été écrit. Distinct de SUCCESS pour qu’un script puisse distinguer “update a tourné et changé zéro lignes” de “update a tourné et changé N lignes”.

Toutes les commandes n’émettent pas tous les codes. Le tableau suivant résume.

Commande01234
validate
read
create
update
delete
run
rules list
completion
Fenêtre de terminal
gapline validate -f gtfs.zip
case $? in
0) echo "Flux propre." ;;
1) echo "Flux avec erreurs ERROR." ; exit 1 ;;
2|3) echo "Problème de setup gapline, à investiguer." ; exit 1 ;;
esac

Distinguer “aucun match” d’un bulk update réussi

Section intitulée « Distinguer “aucun match” d’un bulk update réussi »
Fenêtre de terminal
gapline update routes -f gtfs.zip --where "route_type=700" --set route_type=3 --confirm
case $? in
0) echo "Lignes mises à jour." ;;
4) echo "Rien à mettre à jour — déjà migré." ;;
*) echo "Update échoué." ; exit 1 ;;
esac
- run: gapline validate -f gtfs.zip --min-severity error
# Le job échoue automatiquement sur code 1+ — pas de branching en plus.

Les cinq codes sont délibérément étroits. Ils sont choisis pour répondre à trois questions qu’un script wrapper se pose habituellement :

  1. gapline a-t-il tourné ? (distingue SUCCESS/COMMAND_FAILED/NO_CHANGES de CONFIG_ERROR/INPUT_ERROR)
  2. Est-ce le flux ou la config en cause ? (CONFIG_ERROR vs le reste)
  3. Quelque chose a-t-il réellement changé ? (NO_CHANGES vs SUCCESS sur les commandes d’écriture)

Tout ce qui est plus fin — “quelle règle a échoué”, “combien d’anomalies” — appartient au rapport structuré (--format json), pas au code de retour.