Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/develop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,48 @@ jobs:
- name: Lint check
run: npm run lint:check

# ----------------------------------------------------------------
# Job 1bis — Audit des dépendances
#
# `npm audit` figurait dans scripts/verify.sh mais dans aucun job : les
# vulnérabilités remontaient en local et passaient en CI. Cinq failles high
# (nanoid, postcss, socket.io-parser, undici, brace-expansion) ont ainsi
# vécu sur develop sans rien faire échouer.
#
# `npm audit` sort en code non nul dès qu'il trouve quelque chose au niveau
# demandé — c'est ce qui fait échouer le job, aucune commande de plus n'est
# nécessaire.
#
# Seuil `high` et non le défaut (`null` = échec sur n'importe quelle
# sévérité, jusqu'à `info`). `npm audit` interroge la base d'avis du registre
# à l'instant du run : le lockfile est gelé, la base ne l'est pas. Un avis
# publié entre deux commits rend donc rouge la PR suivante, quel qu'en soit
# l'auteur et le sujet. Au seuil par défaut, un simple `low` sur une
# transitive de build suffirait à bloquer un contributeur sur un problème
# qui n'est pas le sien. `high` cadre le job sur ce qui justifie une
# interruption. scripts/verify.sh applique le même seuil pour ne pas diverger ;
# pour la photo complète (low et moderate compris), lancer `npm audit` sans
# option. Les alertes Dependabot du dépôt couvrent la veille de fond.
# ----------------------------------------------------------------
audit:
name: Dependency audit — Node 24
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7

- name: Setup Node 24
uses: actions/setup-node@v6
with:
node-version: '24'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Audit dependencies (high and above)
run: npm audit --audit-level=high

# ----------------------------------------------------------------
# Job 2 — TypeScript strict
# ----------------------------------------------------------------
Expand Down
10 changes: 9 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,15 @@ Avant commit / PR — **validation complète, miroir de la CI** (`.github/workfl

soit : `tsc --noEmit`, `lint:check`, `NODE_ENV=test npm run coverage` (jsdom + browser + merge —
les suites tournent DANS coverage, ne pas les relancer à part : IMP-013), `test:e2e` (Playwright
démarre lui-même les 3 services), `build`, `npm audit` (0 vulnérabilité attendu), `docs:build`.
démarre lui-même les 3 services), `build`, `npm audit --audit-level=high` (0 vulnérabilité `high`
ou `critical` attendu — même seuil que le job CI `audit` ; `npm audit` sans option montre aussi
les `low`/`moderate`, qui ne bloquent pas), `docs:build`.

Le script couvre les mêmes contrôles que la CI, mais **il n'en est pas la copie exacte** : la
correspondance vaut job par job, pas ligne par ligne. Avant de conclure « la CI échoue déjà
là-dessus » à partir d'un échec local, vérifier que le contrôle en question a bien un job dans
`.github/workflows/develop.yml` — `npm audit` n'en avait aucun jusqu'à la mise en place du job
`audit`, et un échec local ne rendait donc pas la CI rouge.

## Contrat iso-fonctionnel

Expand Down
66 changes: 33 additions & 33 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion scripts/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ run "lint " npm run lint:check
run "coverage " env NODE_ENV=test npm run coverage
run "e2e " npm run test:e2e
run "build " npm run build
run "audit " npm audit
# Même seuil que le job `audit` de la CI : un écart ferait échouer ici ce qui passe
# là-bas (ou l'inverse), et ce script sert justement de garde avant PR.
# Pour la photo complète, low et moderate compris : `npm audit` sans option.
run "audit " npm audit --audit-level=high
run "docs " npm run docs:build

echo ""
Expand Down