Aller au contenu principal

Pipeline CI/CD

Ce fichier documente comment le code va de la machine du développeur à la production.

État Actuel

CI/CD Configuré

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

ServiceTechnologieMéthodeDéclencheur
DiscoverNext.js 16.1.6VercelPush sur main
CareerNext.js 16.0.7VercelPush sur main
BackendFastAPIDokploy/DockerPush sur branche configurée

Déploiement des Frontends (Vercel)

  • Chaque push sur la branche main dé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
Risque sur les migrations Alembic

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émentStatut
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 :

  1. Lint : black --check, isort --check-only, flake8
  2. Test : pytest avec variables d'environnement de test (DATABASE_URL, SUPABASE_URL, etc.)
  3. 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 :

  1. Type-check : npx tsc --noEmit
  2. Tests : npm test (Jest)
  3. 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/

TypeFrameworkCouverture
UnitairesPython pytestServices, auth, security
IntégrationPython pytestAPI endpoints

Les tests backend utilisent pytest et peuvent être lancés avec :

cd backend
pip install -r requirements-dev.txt
pytest -v

Tests Frontend

TypeFrameworkStatut
UnitairesJest (76 tests)✅ Configuré
E2E❌ Aucun❌ Aucun
LintingESLint✅ 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

RisqueGravité
Migrations DBMoyenne
Tests E2EMoyenne

Plan d'Amélioration

CI/CD Opérationnel

Les éléments suivants ont été implémentés :

ÉlémentStatut
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-checkingnpx 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 lint passe sans erreur (frontend)
  • npm test passe sans erreur (frontend)
  • npm run build réussit (frontend)
  • pytest -v passe sans erreur (backend)
  • black --check . passe sans erreur (backend)