Aller au contenu principal

Playbook CI

StatutActif — v1.1 — 2026-06-27
PrioritéP0
Obligatoire V1Oui
ResponsableSylvain
Voir aussiPlaybook 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.

FichierUsage
.github/workflows/ci.ymlTous les projets (frontend et backend)
playwright.ymlTests E2E (optionnel)
security.ymlSécurité (optionnel)

Frontend CI

Déclencheurs : toute PR + push sur main.

Steps :

  1. Checkout
  2. Détection du package manager depuis le lockfile (pnpm-lock.yaml → pnpm, yarn.lock → yarn, sinon npm)
  3. Setup Node.js 22 + cache adapté
  4. Activation Corepack si pnpm ou yarn
  5. Installation des dépendances (npm ci / pnpm install --frozen-lockfile / yarn install --immutable)
  6. Détection des scripts disponibles (lint, typecheck) depuis package.json
  7. Lint (si script présent, skip propre sinon)
  8. Typecheck (si script présent, skip propre sinon)
  9. 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 dans next.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 :

  1. Checkout
  2. Setup PHP 8.3 + extension pdo_pgsql
  3. composer install --no-interaction --prefer-dist --optimize-autoloader
  4. Copie .env.example.env + php artisan key:generate --force
  5. pint --test (vérifie le formatage, échoue si fichier mal formaté)
  6. PHPStan (skip propre si pas de phpstan.neon / phpstan.neon.dist)
  7. php artisan migrate --force avec les credentials PostgreSQL CI
  8. php artisan test (credentials DB forcés par phpunit.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

SecretUsage
SSH_HOSTIP/hostname VPS
SSH_PRIVATE_KEYClé SSH de déploiement
APP_KEYClé 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

  1. Copier le fichier ci.yml d'un projet DMV existant (dmv-public pour Next.js, api pour Laravel)
  2. Placer dans .github/workflows/ci.yml du nouveau projet
  3. Adapter les variables si nécessaire (version PHP, credentials DB)
  4. Activer les Branch Protection Rules dans GitHub Settings → required check : CI / Lint · Typecheck · Build ou CI / Quality & Tests
  5. Vérifier que la CI passe sur la première PR