Versioning avec Git & GitHub · Étape 24

Déclenche une CI minimale et diagnostique un check en échec

Transforme les critères du dépôt en commandes reproductibles, exécute-les localement et dans GitHub Actions, puis localise l’étape et la preuve d’un échec.

Durée indicative · ~1 h 40Niveau intermédiairePrérequis conseillé · Leçon 23 — politique de fichiers et artefactsPratique · TP
L’idée reçue

« Le workflow est vert, donc le projet fonctionne. »

La CI prouve seulement les commandes exécutées dans l’environnement déclaré. Le périmètre non testé doit rester explicite.

01Commence par un contrat local

#!/usr/bin/env bash
set -eu

file="${1:-platform.conf}"
test -f "$file"
grep -Fxq 'environment=staging' "$file"
grep -Fxq 'backup_check=enabled' "$file"
printf 'validation passed\n'

Le script retourne zéro lorsque toutes les assertions passent et un code non nul dès qu’une assertion échoue. Il devient l’unique contrat appelé localement et par la CI.

02Exécute avant de pousser

bash -n ci/check.sh
bash ci/check.sh platform.conf
echo "$?"

Une commande reproductible raccourcit le diagnostic : le développeur peut observer le même échec sans attendre un runner distant.

03Déclare le workflow

name: repository-validation

on:
  push:
  pull_request:

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Validate platform configuration
        run: bash ci/check.sh platform.conf

Le nom du workflow, du job et des steps doit rester lisible. Une règle de branche dépend souvent du nom stable du check produit.

04Lis l’échec de l’extérieur vers l’intérieur

Workflow
└── Job validate
    └── Step Validate platform configuration
        └── bash ci/check.sh platform.conf
            ├── commande fautive
            ├── stdout / stderr
            └── exit code
gh pr checks
gh run list --branch feature/broken-backup-check
gh run view <run-id>
gh run view <run-id> --log-failed

05Reproduis le SHA exact

git fetch origin
git switch --detach <sha-du-check>
bash ci/check.sh platform.conf

Tester une branche qui a déjà reçu une correction ne reproduit pas l’échec observé sur un ancien SHA.

06Distingue les familles d’échec

Famille
Exemple
Premier contrôle
Contenu
valeur attendue absente
diff et fixture
Environnement
commande non installée
image et versions
Droits
secret ou permission absent
contexte et scopes
Réseau
registre indisponible
timeout et endpoint
Flaky
ordre ou timing variable
répétition et isolation

07Corrige la cause

printf 'environment=staging\nbackup_check=enabled\n' \
  > platform.conf
bash ci/check.sh platform.conf
git add platform.conf
git commit -m "fix: restore valid backup configuration"
git push

Ne remplace pas une assertion utile par || true pour obtenir du vert. Si le contrat est incorrect, modifie-le avec une justification et un test de remplacement.

08Conserve la preuve utile

- SHA testé ;
- runner et versions ;
- commande exacte ;
- code retour ;
- sortie pertinente ;
- cause ;
- commit correctif ;
- nouvelle exécution.

09Relie la CI aux règles de fusion

Un required status check empêche la fusion tant que le contexte attendu n’est pas réussi. Vérifie que le nom requis correspond bien au workflow actuel et qu’aucun check ambigu ne peut le remplacer.

Défi

Diagnostique l’échec volontaire

Exécute le scénario CI du lab. Remets le code retour non nul, l’assertion en échec, le commit correctif et la preuve du second passage réussi.

À retenir

Une CI utile exécute un contrat local clair, sur un SHA identifié. Le diagnostic relie étape, commande, sortie et code retour avant de produire une correction vérifiable.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.