Aller au contenu principal

CI/CD & Automatisation

Ce document détaille les systèmes d'automatisation mis en œuvre pour garantir la fiabilité du déploiement et la disponibilité de la solution.

Vue d'ensemble

Pipelines CI par dépôt

Control-Hub-Back

ÉtapeCommandeOutil
TypeCheckpnpm typecheckTypeScript
Lintpnpm lintESLint
Formatpnpm format --checkPrettier
Security Auditpnpm audit --prodnpm audit
Testspnpm test (Japa)Japa + MySQL + Redis
Coveragenpx c8 --reporter=lcovc8
Buildpnpm buildAdonisJS
SonarQubeScan + Quality GateSonarQube

Services CI : MySQL 8 et Redis démarrés comme services GitHub Actions pour les tests d'intégration.

Control-Hub Frontend (my-app)

ÉtapeCommandeOutil
TypeChecktsc --noEmitTypeScript
Lintpnpm run lintESLint
Formatpnpm run format --checkPrettier
Security Auditpnpm auditnpm audit
Tests unitairespnpm testVitest
Tests E2Epnpm test:e2ePlaywright (headless)
Storybook Buildpnpm build-storybookStorybook
A11y TestsStorybook test runner@storybook/addon-a11y
Buildpnpm buildNext.js
SonarQubeScan + Quality GateSonarQube

Firstbreath Showcase

ÉtapeCommandeOutil
TypeChecktsc --noEmitTypeScript
Lintnext lintESLint
Formatpnpm run format --checkPrettier
Security Auditpnpm auditnpm audit
Prismaprisma generate + validation schémaPrisma
Buildnext buildNext.js
StorybookBuild + tests A11yStorybook
Tests unitairespnpm testVitest
SonarQubeScan + Quality GateSonarQube

Firstbreath Vision

ÉtapeCommandeOutil
Formatblack --checkBlack
Lintflake8 --select=E9,F63,F7,F82Flake8
Securitysafety check -r requirements.txtSafety
Testspytest --cov (par service)pytest + pytest-cov
SonarQubeScan + Quality GateSonarQube
Docker BuildBuild + push imagesDocker / GHCR

Tests CPU-only : les tests utilisent des versions CPU de PyTorch pour éviter la dépendance GPU en CI.

App Mobile

ÉtapeCommandeOutil
LintESLintESLint
TestsjestJest (jest-expo)
SonarQubeScan + Quality GateSonarQube

SonarQube — Quality Gates

Notre instance SonarQube auto-hébergée (sonar.firstbreath.fr) applique les règles suivantes :

RègleSeuil
Bugs critiques0
Duplication< 3%
MaintenabilitéRating A
Coverage minimumVariable par module
Security HotspotsRevue obligatoire

Configuration par dépôt

Chaque dépôt contient un sonar-project.properties définissant :

  • sonar.sources — répertoires source à analyser
  • sonar.exclusions — fichiers exclus (node_modules, build, tests, config)
  • sonar.coverage.exclusions — code non-testable (contrôleurs, validateurs)
  • sonar.javascript.lcov.reportPaths — rapport de couverture

Déploiement continu (CD)

Mécanisme de déploiement

ComposantMécanisme CDDétails
Control-Hub-BackDokploy webhookPush sur main → build Docker → rolling restart
Firstbreath VisionDokploy webhookPush sur main → build Docker → restart (GPU)
ShowcaseDokploy webhookPush sur main → build Docker (Prisma migrate) → restart
DocumentationDokploy webhookPush sur main → build Docusaurus → restart Nginx

Watchtower (ancienne infrastructure)

L'ancienne infrastructure utilisait Watchtower pour le CD :

  • Poll toutes les 5 minutes (WATCHTOWER_POLL_INTERVAL=300)
  • Pull automatique des nouvelles images Docker depuis GHCR
  • Nettoyage des anciennes images (WATCHTOWER_CLEANUP=true)
  • Filtrage par label (WATCHTOWER_LABEL_ENABLE=true)

Cette approche a été remplacée par Dokploy pour un meilleur contrôle des déploiements.

Interactions entre systèmes

Performances attendues

MétriqueObjectifMonitoring
Temps de build CI< 5 minGitHub Actions
Temps de déploiement< 3 minDokploy logs
Disponibilité API> 99% (uptime)Grafana + healthchecks
Latence inférence< 200ms/framePrometheus (batch-inference)
Temps de restart< 30sDocker healthcheck start_period