Skip to content

DOC

Auto-fix CI/CD avec ci-guard

Déclencher automatiquement un diagnostic et un fix des échecs CI via GitHub trigger - sans intervention humaine.

Auto-fix CI/CD avec ci-guard

Contexte

ci-guard (54) est une Routine Claude Code conçue pour réagir automatiquement aux échecs CI. Déclenché par le trigger GitHub check_suite.completed (avec conclusion: failure), il corrèle l’échec avec les commits récents, diagnostique la cause, applique un fix si possible, et ouvre un draft PR — ou une issue avec diagnostic complet si le fix est ambigu.

La routine tourne sur l’infra Anthropic : pas besoin de garder sa machine allumée ou de surveiller les logs CI manuellement.

Prérequis

  • Compte Claude Pro/Max/Team/Enterprise avec Claude Code web activé
  • Repository GitHub connecté à Claude Code
  • App Claude GitHub installée sur le repo cible
  • gh CLI configuré (pour les runs manuels locaux)

Étapes

1. Configurer la Routine ci-guard

Option A — Via interface web :

  1. Aller sur https://claude.ai/code/routines
  2. Cliquer New routine
  3. Name : CI Guard — <nom-du-repo>
  4. Prompt : copier le prompt self-contained depuis agents/routines/54-ci-guard.md (section “Prompt self-contained”)
  5. Repository : sélectionner votre repo
  6. Trigger : GitHub event → check_suitecompleted → filtre conclusion: failure
  7. Connectors : aucun requis par défaut
  8. Cliquer Create

Option B — Générer la config via routine (53) :

/ulk:routine
# Agent : ci-guard (54)
# Repo : votre-org/votre-repo
# Trigger : GitHub check_suite.completed (failure)

2. Installer l’App Claude GitHub

Si pas encore fait, le formulaire de création de trigger vous y invite automatiquement.

claude.ai/code/routines → Edit → Add trigger → GitHub event
→ "Install Claude GitHub App" si nécessaire

3. Vérifier le premier déclenchement

Dès que le prochain check suite échoue sur votre repo, ci-guard se déclenche automatiquement.

Pour forcer un déclenchement immédiat (test) :

# Via CLI — trigger manuel
/schedule run ci-guard-votre-repo

Ou sur l’interface web : Run now.

4. Observer le diagnostic

Chaque run est une session consultable sur claude.ai/code/sessions.

Exemple de session ci-guard :

Phase 0 — Lecture contexte check_suite...
  Workflow : CI — Node.js
  Commit   : abc1234 (feat: auth refactor)
  Branche  : feature/auth-v2

Phase 1 — Reconnaissance repo...
  Stack    : Next.js 15 + TypeScript
  CI file  : .github/workflows/ci.yml

Phase 2 — Logs d'échec...
  gh run view 8432156789 --log-failed
  → Erreur : TS2345 Type 'string | null' not assignable to 'string'
    File: src/lib/auth.ts:47

Phase 3 — Diagnostic...
  Catégorie : Build (TypeScript)
  Cause     : Commit abc1234 retire la vérification null sur getUser()
  Corrélation : git show abc1234 -- src/lib/auth.ts → ligne 47 modifiée

Phase 4 — Fix...
  Branche : claude/ci-guard-fix-abc1234-20260414
  Fix     : ajouter vérification null → user ?? ''

Phase 5 — Draft PR...
  PR #142 créé (draft) — "fix(ci): null check on getUser() auth.ts:47"

5. Traiter la draft PR

  1. Ouvrir la PR créée par ci-guard
  2. Vérifier le fix proposé
  3. Relancer le CI sur la branche
  4. Si OK → merger

Exemple de draft PR générée

## CI Guard — Auto-fix

**Workflow échoué** : `CI — Node.js`
**Commit déclencheur** : `abc1234`
**Branche** : `feature/auth-v2`

### Diagnostic

**Catégorie d'échec** : `Build`

**Cause identifiée** :
Le commit abc1234 (feat: auth refactor) modifie `getUser()` en `src/lib/auth.ts:47`
et retire la vérification null, causant TS2345. Le type de retour est `User | null`
mais le consommateur attend `User`.

**Fichiers modifiés dans les 24h avant l'échec** :
- `src/lib/auth.ts`
- `src/hooks/useAuth.ts`

### Fix appliqué

Ajout du null coalescing sur la ligne 47 : `user ?? ''` → type compatible.

**Fichiers modifiés** :
- `src/lib/auth.ts` — null check sur getUser() ligne 47

### Vérification recommandée

- [ ] Relancer le workflow CI sur cette branche
- [ ] Vérifier qu'aucun autre test n'est cassé
- [ ] Si fix correct → merger

---
*Auto-généré par ulk ci-guard (54)*

Cas où ci-guard ouvre une issue (fix non-automatisable)

## CI Guard — Diagnostic (intervention humaine requise)

**Workflow** : `integration-tests`
**Cause probable** : Timeout base de données — échec transitoire ou config absente
**Pourquoi pas de fix auto** : Impossible de diagnostiquer sans accès aux secrets DB

**Suggestions** :
1. Vérifier que `DATABASE_URL` est configuré dans les secrets GitHub Actions
2. Tester la connexion depuis le workflow avec `echo $DATABASE_URL | wc -c`

Catégories d’échec gérées

CatégorieExemplesFix auto ?
BuildTS errors, import manquant, syntaxe✅ Souvent
TestsAssertions échouées, snapshot outdated✅ Parfois
LintESLint, Prettier, clippy✅ Souvent
Depscannot find module, lock file conflict✅ Parfois
ConfigSecret manquant, env var absente❌ Issue
InfraTimeout réseau, rate limit❌ Log + ignore

Variantes

  • Multi-repo : Créer une routine ci-guard par repo (limite de rate sur les webhooks)
  • Filtré sur branche : Ajouter filtre base branch: main pour ignorer les branches de dev
  • Avec Slack : Ajouter connector Slack pour notifier le canal #ci des issues créées
  • API trigger : Déclencher ci-guard depuis votre pipeline CD post-deploy via POST /fire

Agents enchaînés

  • ci-guard (54) identifie → robocop (11) pour diagnostics plus complexes
  • ci-guard (54) ouvre issue → task-runner (04) l’implémente
  • ci-guard (54) ouvre PR → 2b3 (08) checkpoint après merge

Troubleshooting

SymptômeCause probableRésolution
Routine ne se déclenche pasApp Claude GitHub non installéeclaude.ai/code/routines → Edit → GitHub trigger → Install App
Fix crée une régressionCas limite non couvertVérifier la draft PR avant de merger — ci-guard ouvre toujours en draft
Trop de faux positifsÉchecs transitoiresAjouter dans le prompt : “si catégorie = Infra → logger et terminer sans PR”
Rate limit GitHub webhooksBeaucoup de check runsVérifier les limites dans claude.ai/code/routines → détail de la routine

Voir aussi

  • 36-routine-architect.md — Créer des routines pour d’autres agents
  • 27-robocop-errorfix.md — Fix d’erreurs interactif (version manuelle)
  • 26-2b3-checkpoint.md — Checkpoint avant push pour prévenir les échecs CI