Playbook CI
| Statut | Actif — v1.1 — 2026-06-27 |
| Priorité | P0 |
| Obligatoire V1 | Oui |
| Responsable | Sylvain |
| Voir aussi | Playbook Git · Playbook Security · Templates |
Philosophie
La CI a un seul objectif : bloquer ce qui casse. Elle ne doit pas être un obstacle pour les bons changements.
- Rapide (< 5 min frontend, < 10 min backend)
- Déterministe (zéro flakiness acceptable)
- Minimale (pas de contrôle superflu)
Workflows disponibles
Les templates complets sont dans la section Templates.
| Fichier | Usage |
|---|---|
.github/workflows/ci.yml | Tous les projets (frontend et backend) |
playwright.yml | Tests E2E (optionnel) |
security.yml | Sécurité (optionnel) |
Frontend CI
Déclencheurs : toute PR + push sur main.
Steps :
- Checkout
- Détection du package manager depuis le lockfile (
pnpm-lock.yaml→ pnpm,yarn.lock→ yarn, sinon npm) - Setup Node.js 22 + cache adapté
- Activation Corepack si pnpm ou yarn
- Installation des dépendances (
npm ci/pnpm install --frozen-lockfile/yarn install --immutable) - Détection des scripts disponibles (
lint,typecheck) depuispackage.json - Lint (si script présent, skip propre sinon)
- Typecheck (si script présent, skip propre sinon)
- Build (toujours obligatoire)
Variables d'environnement :
NEXT_TELEMETRY_DISABLED: 1— toujours- Les
NEXT_PUBLIC_*nécessaires au build sont injectées via les secrets GitHub ou définies dansnext.config.ts
:::caution Cloudflare Pages
CF Pages ne propage pas les variables d'environnement lors du build. Les valeurs de build non sensibles doivent être dans next.config.ts. Les valeurs sensibles passent par les secrets GitHub dans le workflow CI.
:::
Status check GitHub : CI / Lint · Typecheck · Build
Backend CI
Déclencheurs : toute PR + push sur main.
Steps :
- Checkout
- Setup PHP 8.3 + extension
pdo_pgsql composer install --no-interaction --prefer-dist --optimize-autoloader- Copie
.env.example→.env+php artisan key:generate --force pint --test(vérifie le formatage, échoue si fichier mal formaté)- PHPStan (skip propre si pas de
phpstan.neon/phpstan.neon.dist) php artisan migrate --forceavec les credentials PostgreSQL CIphp artisan test(credentials DB forcés parphpunit.xml)
Service PostgreSQL CI : image postgres:16, credentials postgres/postgres/dmv_test — doit correspondre aux valeurs force="true" de phpunit.xml.
Status check GitHub : CI / Quality & Tests
Sécurité CI
Contrôles minimaux sur chaque PR :
- Gitleaks — secrets dans le code
- npm audit — vulnérabilités npm (niveau high+)
- composer audit — vulnérabilités PHP
Voir Playbook Security pour le détail.
Playwright
Déclenché uniquement sur les PRs qui modifient des fichiers frontend. Pas un required check par défaut — à promouvoir une fois la suite stabilisée.
Voir Playbook Playwright.
Secrets GitHub
| Secret | Usage |
|---|---|
SSH_HOST | IP/hostname VPS |
SSH_PRIVATE_KEY | Clé SSH de déploiement |
APP_KEY | Clé Laravel (production) |
Les secrets ne sont jamais construits par concaténation de strings dans les workflows.
Permissions minimales
permissions:
contents: read
Ajouter uniquement ce qui est nécessaire (ex: pull-requests: write pour les commentaires PR).
Ajouter la CI à un nouveau projet
- Copier le fichier
ci.ymld'un projet DMV existant (dmv-public pour Next.js, api pour Laravel) - Placer dans
.github/workflows/ci.ymldu nouveau projet - Adapter les variables si nécessaire (version PHP, credentials DB)
- Activer les Branch Protection Rules dans GitHub Settings → required check :
CI / Lint · Typecheck · BuildouCI / Quality & Tests - Vérifier que la CI passe sur la première PR