Aller au contenu principal

CI / CD

Le pipeline CI est défini dans .github/workflows/ci.yml. Il s'exécute sur chaque push et pull request vers main et dev.

Vue d'ensemble

push/PR → main ou dev

├─ [unit] TypeScript + Jest ──────────────┐
│ │
├─ [build] Next.js build (needs: unit) ───┤──→ [e2e] ──┐
│ │ │
└─ [docs] Docusaurus build │ │
│ │
(push main uniquement) │
└────────────┘

[deploy]
webhook Coolify

Les 5 jobs s'exécutent avec Node 22 et PostgreSQL 16.

Job 1 — unit : TypeScript + Jest

Déclencheur : tout push/PR

Étapes :

  1. npm ci
  2. npx prisma generate
  3. npx prisma migrate deploy — migrations appliquées sur la DB de test
  4. npx tsc --noEmit — vérification TypeScript
  5. npm test -- --coverage — tests Jest avec couverture

Artefacts : rapport de couverture Jest (7 jours)

Job 2 — build : Next.js

Déclencheur : après unit réussi

Étapes :

  1. npm ci + prisma generate + prisma migrate deploy
  2. npm run build (NODE_ENV=production)

Artefacts : dossier .next/ (1 jour, utilisé par le job E2E)

Job 3 — e2e : Playwright

Déclencheur : après build réussi (timeout 20 min)

Étapes :

  1. npx prisma migrate deploy + seed DB de test : node scripts/seed-test-user.js
  2. Install Playwright Chromium : npx playwright install chromium --with-deps
  3. Télécharge l'artefact .next/ du job build
  4. Exécute npx playwright test

Variables E2E :

TEST_USER_EMAIL=admin@patrimo.local
TEST_USER_PASSWORD=admin
PLAYWRIGHT_BASE_URL=http://localhost:3000

Artefacts : rapport Playwright HTML (14 jours)

Job 4 — docs : Docusaurus

Déclencheur : tout push/PR (indépendant des autres jobs)

Étapes :

  1. npm ci dans docs-site/
  2. npm run typecheck — vérification TypeScript Docusaurus
  3. npm run build — build complet FR + EN + vérification des liens cassés

Artefacts : build Docusaurus complet (7 jours)

Gate sur main

Le job docs bloque le merge sur main si le build Docusaurus échoue (lien cassé, erreur TypeScript). Tout ajout de page doit passer ce gate.

Job 5 — deploy : déclenchement du déploiement

Déclencheur : push sur main uniquement — pas sur les PR ni sur dev

Conditions :

  • Nécessite e2e et docs réussis
  • Ne s'exécute que si le secret COOLIFY_DEPLOY_WEBHOOK est configuré dans le dépôt

Étapes :

  1. Appel du webhook Coolify via curl -fsSL -X GET "$COOLIFY_DEPLOY_WEBHOOK"
Pas de build Docker dans la CI

La CI ne construit ni ne publie d'image Docker. Elle se contente d'appeler le webhook Coolify. C'est Coolify qui clone le dépôt, exécute docker build depuis le code source et redéploie les services.

Secrets requis

SecretUsage
COOLIFY_DEPLOY_WEBHOOKURL du webhook Coolify — déclenche le rebuild et le redéploiement sur main

Voir Coolify pour la procédure de récupération de l'URL du webhook.

Concurrency

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

Un push rapide annule le pipeline précédent sur la même branche.

Déploiement continu

Le déploiement sur Coolify est déclenché par le job deploy via un appel HTTP au webhook Coolify, uniquement lors d'un push sur main. Coolify reçoit ce webhook, clone le dépôt depuis GitHub, build les images Docker directement depuis le code source (docker-compose.prod.yaml + Dockerfile), puis redéploie les services. La CI n'a pas besoin de registre d'images ni de credentials Docker.

Voir aussi