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
ghCLI configuré (pour les runs manuels locaux)
Étapes
1. Configurer la Routine ci-guard
Option A — Via interface web :
- Aller sur
https://claude.ai/code/routines - Cliquer New routine
- Name :
CI Guard — <nom-du-repo> - Prompt : copier le prompt self-contained depuis
agents/routines/54-ci-guard.md(section “Prompt self-contained”) - Repository : sélectionner votre repo
- Trigger : GitHub event →
check_suite→completed→ filtreconclusion: failure - Connectors : aucun requis par défaut
- 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
- Ouvrir la PR créée par ci-guard
- Vérifier le fix proposé
- Relancer le CI sur la branche
- 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égorie | Exemples | Fix auto ? |
|---|---|---|
| Build | TS errors, import manquant, syntaxe | ✅ Souvent |
| Tests | Assertions échouées, snapshot outdated | ✅ Parfois |
| Lint | ESLint, Prettier, clippy | ✅ Souvent |
| Deps | cannot find module, lock file conflict | ✅ Parfois |
| Config | Secret manquant, env var absente | ❌ Issue |
| Infra | Timeout 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: mainpour ignorer les branches de dev - Avec Slack : Ajouter connector Slack pour notifier le canal
#cides 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 complexesci-guard(54) ouvre issue →task-runner(04) l’implémenteci-guard(54) ouvre PR →2b3(08) checkpoint après merge
Troubleshooting
| Symptôme | Cause probable | Résolution |
|---|---|---|
| Routine ne se déclenche pas | App Claude GitHub non installée | claude.ai/code/routines → Edit → GitHub trigger → Install App |
| Fix crée une régression | Cas limite non couvert | Vérifier la draft PR avant de merger — ci-guard ouvre toujours en draft |
| Trop de faux positifs | Échecs transitoires | Ajouter dans le prompt : “si catégorie = Infra → logger et terminer sans PR” |
| Rate limit GitHub webhooks | Beaucoup de check runs | Vé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 agents27-robocop-errorfix.md— Fix d’erreurs interactif (version manuelle)26-2b3-checkpoint.md— Checkpoint avant push pour prévenir les échecs CI