Pipeline CI/CD
Ce fichier documente comment le code va de la machine du développeur à la production.
État Actuel
Le pipeline CI/CD est maintenant opérationnel.
Ce document décrit ce qui est en place (lint, tests, build) et ce qui reste à améliorer.
Ce Qui Est en Place
Déploiement Automatique
| Service | Technologie | Méthode | Déclencheur |
|---|---|---|---|
| Discover | Next.js 16.1.6 | Vercel | Push sur main |
| Career | Next.js 16.0.7 | Vercel | Push sur main |
| Backend | FastAPI | Dokploy/Docker | Push sur branche configurée |
Déploiement des Frontends (Vercel)
- Chaque push sur la branche
maindéclenche un déploiement automatique - Les Pull Requests génèrent des URLs de preview automatiques
- Variables d'environnement configurées dans le dashboard Vercel
Déploiement du Backend (Dokploy)
- Déploiement automatique via Docker après push sur la branche de production
- Variables d'environnement configurées dans Dokploy
Les migrations Alembic sont actuellement appliquées au démarrage du conteneur.
Problème : Si une migration échoue à mi-chemin, le conteneur redémarre en boucle et la DB peut rester dans un état incohérent.
Solution recommandée : Appliquer les migrations manuellement avant le déploiement :
alembic upgrade head
Ce Qui Est en Place (Maintenant)
| Élément | Statut |
|---|---|
| GitHub Actions Backend | ✅ Configuré (lint + test + build) |
| GitHub Actions Frontend | ✅ Configuré (type-check + test + build) |
| Tests automatisés Backend | ✅ Pytest en CI |
| Tests automatisés Frontend | ✅ Jest (76 tests) |
| Linting automatisé Backend | ✅ Black + Flake8 + isort |
| Linting automatisé Frontend | ✅ ESLint |
| TypeScript type-checking | ✅ Configuré |
| Pre-commit hooks | ❌ Non configuré |
Pipeline GitHub Actions Backend
Le workflow .github/workflows/ci.yml dans backend/ inclut :
- Lint : black --check, isort --check-only, flake8
- Test : pytest avec variables d'environnement de test (DATABASE_URL, SUPABASE_URL, etc.)
- Build : docker build (sur branche main uniquement)
# Déclencheur
on:
push:
branches: [main, staging, develop]
pull_request:
branches: [main, staging, develop]
# Étapes
- Lint (black, isort, flake8)
- Tests (pytest) - nécessite lint réussi
- Build Docker - sur main uniquement
Pipeline GitHub Actions Frontend
Le workflow .github/workflows/ci.yml dans stage-connect/ inclut :
- Type-check :
npx tsc --noEmit - Tests :
npm test(Jest) - Build :
npm run build
# Déclencheur
on:
push:
branches: [main, staging, develop]
pull_request:
branches: [main, staging, develop]
# Étapes
- Checkout code
- Setup Node.js 20
- npm ci
- Type-check (tsc)
- Tests (Jest)
- Build Next.js
Tests Existants
Tests Backend
Emplacement : backend/tests/
| Type | Framework | Couverture |
|---|---|---|
| Unitaires | Python pytest | Services, auth, security |
| Intégration | Python pytest | API endpoints |
Les tests backend utilisent pytest et peuvent être lancés avec :
cd backend
pip install -r requirements-dev.txt
pytest -v
Tests Frontend
| Type | Framework | Statut |
|---|---|---|
| Unitaires | Jest (76 tests) | ✅ Configuré |
| E2E | ❌ Aucun | ❌ Aucun |
| Linting | ESLint | ✅ Configuré |
Les tests frontend utilisent Jest et peuvent être lancés avec :
cd stage-connect
npm test
Les tests couvrent :
utils/password-security.ts(22 tests)services/token.service.ts(26 tests)utils/error-handler.ts(28 tests)
Lacunes
Risques Restants
- Pas de pre-commit hooks : Les vérifications sont faites uniquement en CI
- Pas de tests E2E automatisés : Only manual testing for end-to-end flows
- Migrations Alembic : Risque de boucles de restart si une migration échoue
Impact
| Risque | Gravité |
|---|---|
| Migrations DB | Moyenne |
| Tests E2E | Moyenne |
Plan d'Amélioration
Les éléments suivants ont été implémentés :
| Élément | Statut |
|---|---|
| GitHub Actions Backend | ✅ Configuré (lint + test + build) |
| Tests automatisés Backend | ✅ Pytest en CI |
| Linting automatisé Backend | ✅ Black + Flake8 + isort |
| GitHub Actions Frontend | ✅ Configuré (type-check + test + build) |
| Tests automatisés Frontend | ✅ Jest (76 tests) |
| TypeScript type-checking | ✅ npx tsc --noEmit |
| Pre-commit hooks | ❌ Non configuré |
Tâches à faire
- Ajouter pre-commit hooks
- Automatiser les tests E2E dans CI
Commandes Utiles
Lancer les tests manuellement
# Backend
cd backend
pip install -r requirements.txt
pip install -r requirements-dev.txt
pytest -v
# Frontend
cd stage-connect
npm test # Jest tests
npm run lint # ESLint
Vérifier le build localement
# Backend
cd backend
docker build -t stageconnect-backend .
# Frontend
cd stage-connect
npm run build
Règle Absolue
Vérifier manuellement avant de pousser en production :
npm run lintpasse sans erreur (frontend)npm testpasse sans erreur (frontend)npm run buildréussit (frontend)pytest -vpasse sans erreur (backend)black --check .passe sans erreur (backend)