Files
Johan LEROY 18307e9be3 ci: rassemble la CI dans un orchestrateur unique et retire le doublon Sonar
Chaque workflow se déclenchait sur push (toutes branches) et sur pull_request : chaque commit
de PR jouait tout deux fois. sonarqube.yml reconstruisait et retestait front, back et ML en
parallèle des workflows qui le faisaient déjà, et son test backend tournait sans uv sync.

ci.yml devient le seul point d'entrée (pull_request, push sur dev et main) :
- paths-filter choisit les composants à jouer sur une PR, tout est rejoué sur dev et main ;
- backend, frontend, ml, airflow et infra passent en workflow_call ;
- le job sonar reprend les couvertures versées par ces jobs au lieu de tout rejouer ;
- « CI ok » agrège le résultat, seul check à exiger dans les règles de branche.

Au passage :
- npm run test:ci au lieu de npm test --watch=false, option que npm gardait pour lui ;
- uv sync --locked au lieu de --frozen, pour qu'un verrou périmé casse la CI ;
- setup-uv et sonarqube-scan-action épinglés sur un SHA (règle S7637), timeout sur chaque job ;
- frontend : un seul npm ci pour la construction et les tests ;
- infra : validation des fichiers Compose et actionlint sur les workflows ;
- exclusions Sonar en globs, doublon apps/frontend/sonar-project.properties supprimé.
2026-09-23 09:16:08 +02:00

71 lines
1.9 KiB
YAML

name: Frontend
# Pourquoi : aucun déclencheur propre. ci.yml appelle ce workflow quand le frontend change, et
# Sonar y reprend la couverture versée par le job `verification` (ADR 0014).
on:
workflow_call:
permissions:
contents: read
jobs:
# Un seul `npm ci` pour la construction et les tests : un job de plus ne ferait que le rejouer.
verification:
name: Construction et tests
runs-on: ubuntu-latest
timeout-minutes: 15
defaults:
run:
working-directory: apps/frontend
steps:
- name: Récupère le dépôt
uses: actions/checkout@v7
- name: Installe Node
uses: actions/setup-node@v7
with:
node-version: 26
cache: npm
cache-dependency-path: apps/frontend/package-lock.json
- name: Installe les dépendances
run: npm ci
- name: Construit l'application
run: npm run build
# Piège : `npm test --watch=false` garde l'option pour npm, `ng test` ne la reçoit jamais.
# La couverture lcov vient d'angular.json (`coverage: true`).
- name: Tests et couverture
run: npm run test:ci
- name: Verse la couverture pour Sonar
uses: actions/upload-artifact@v7
with:
name: frontend-coverage
path: apps/frontend/coverage/frontend/lcov.info
if-no-files-found: error
security-audit:
name: Audit des dépendances
runs-on: ubuntu-latest
timeout-minutes: 10
defaults:
run:
working-directory: apps/frontend
steps:
- name: Récupère le dépôt
uses: actions/checkout@v7
- name: Installe Node
uses: actions/setup-node@v7
with:
node-version: 26
# Seuil high : une vulnérabilité moderate de devDependency ne doit pas bloquer une livraison.
- name: Audite le verrou
run: npm audit --audit-level=high --package-lock-only