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 :
npm cinpx prisma generatenpx prisma migrate deploy— migrations appliquées sur la DB de testnpx tsc --noEmit— vérification TypeScriptnpm 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 :
npm ci+prisma generate+prisma migrate deploynpm 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 :
npx prisma migrate deploy+ seed DB de test :node scripts/seed-test-user.js- Install Playwright Chromium :
npx playwright install chromium --with-deps - Télécharge l'artefact
.next/du jobbuild - 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 :
npm cidansdocs-site/npm run typecheck— vérification TypeScript Docusaurusnpm run build— build complet FR + EN + vérification des liens cassés
Artefacts : build Docusaurus complet (7 jours)
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
e2eetdocsréussis - Ne s'exécute que si le secret
COOLIFY_DEPLOY_WEBHOOKest configuré dans le dépôt
Étapes :
- Appel du webhook Coolify via
curl -fsSL -X GET "$COOLIFY_DEPLOY_WEBHOOK"
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
| Secret | Usage |
|---|---|
COOLIFY_DEPLOY_WEBHOOK | URL 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.