Skip to content

ci(notebook-validation): || true sur check_c2_compliance masque l'erreur réelle et fait crasher le step sur un JSON vide #14799

Description

@jsboige

Symptôme

Le check validate-notebooks échoue sur certaines PRs avec un crash sans diagnostic :

File "<string>", line 3, in <module>
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Datapoints : #14777 (run 33979473831, job 101341975582, 05/09 16:59Z), #14790 (run 33981239304, job 101346713713). PRs voisines de la même période passent (#14781, #14772) → intermittent ou corrélé au contenu.

Cause racine (workflow, pas les PRs)

.github/workflows/notebook-validation.yml ligne 80 :

python scripts/notebook_tools/check_c2_compliance.py --json > /tmp/c2_results.json || true

Le || true avale l'erreur réelle du script C.2 (crash, timeout, ou OOM pendant le scan du corpus). Le fichier /tmp/c2_results.json reste alors vide, et le parseur inline de la ligne suivante (json.load) crashe sur Expecting value: line 1 column 1. Résultat : le job fail avec un message qui désigne le mauvais coup (on croit à un notebook JSON invalide alors que tous les notebooks de la PR sont valides — vérifié firsthand sur #14777).

L'erreur réelle du script C.2 est invisible : elle part dans le log avant le || true, sans set -o pipefail ni capture du code retour.

Fix proposé

Dans le step « Check C.2 compliance (execution outputs) » :

python scripts/notebook_tools/check_c2_compliance.py --json > /tmp/c2_results.json
C2_EXIT=$?
if [ $C2_EXIT -ne 0 ] && [ ! -s /tmp/c2_results.json ]; then
  echo "::error::check_c2_compliance.py a échoué (exit $C2_EXIT) sans produire de JSON — voir stderr ci-dessus"
  exit 1
fi

Fails loud avec la vraie cause si le script crashe ; le caractère advisory du check C.2 sur les PRs (ligne 89) est préservé quand le JSON est produit.

Question ouverte

Pourquoi check_c2_compliance.py échoue-t-il sur ces runs-là ? Les deux jobs fautifs durent 12m+ (vs ~1m pour les verts) — piste : timeout/OOM du scan corpus sur les PRs à gros diff (#14790 = 63 fichiers). À reproduire localement : python scripts/notebook_tools/check_c2_compliance.py --json sur un checkout de #14790.

Note : le même échec bloque aussi PR gate (agrégat) sur #14777 (avec Gitleaks à 10m00s pile = second timeout suspect, même run) et #14790.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions