metalfrom.eu/.forgejo/workflows/ci.yml
Nicolas FRYDER b5e3ef91ab
Some checks are pending
CI / javascript (push) Waiting to run
CI / python (push) Waiting to run
CI / mutation (push) Waiting to run
test: couvrir adminAuth, réparer la CI Python et une couverture annoncée à tort
adminAuth.js était le fichier le moins couvert du dépôt — 52 % de score de
mutation, 22 mutants sans aucune couverture — alors qu'il porte JWT, bcrypt et
le verrouillage de compte. seedAdminUser, recordLoginAttempt, markLoginSuccess
et writeAuditLog n'avaient aucun test direct. writeAuditLog était le plus
gênant : il peut cesser d'enregistrer sans qu'aucune action admin n'échoue et
sans qu'aucun test ne rougisse, et un journal d'audit muet ne se remarque que
le jour où on en a besoin.

Mesuré après coup : adminAuth.js passe de 52,31 % à 84,29 %, les mutants sans
couverture de 22 à 1, et le score global de 82,20 % à 88,85 %.

Le job Python de la CI n'installait que ruff, pytest et pip-audit : psycopg2,
beautifulsoup4, lxml et hypothesis manquaient, et il aurait échoué dès la
collecte — ce que personne n'a jamais vu, faute de runner enregistré. Il part
désormais de requirements-dev.txt, et lance aussi la suite du crawler, qui
n'était pas exécutée du tout.

requirements-dev.txt épinglait psycopg2-binary==2.9.9, sans roue pour Python
>= 3.13 : la suite entière s'arrêtait dès la collecte sur un poste par ailleurs
sain. Épinglages assouplis en bornes basses.

Corrige enfin le commentaire de a11y.test.js, qui renvoyait à « l'audit
Lighthouse manuel du README de la CI » pour justifier deux règles désactivées.
Cet audit n'existe pas : README-CI.md documente le test e2e de l'admin, qui
couvre bien le contraste mais UNIQUEMENT pour le dashboard. Pour le site
public, ces règles ne sont vérifiées nulle part. La couverture n'a pas changé,
seule sa description était fausse.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 14:49:04 +02:00

83 lines
2.5 KiB
YAML

# CI informative.
#
# Le déploiement reste piloté par le webhook Coolify (push → redeploy), CE
# WORKFLOW NE BLOQUE RIEN : il marque simplement le commit vert ou rouge dans
# Forgejo. La vraie porte de qualité est le hook `.githooks/pre-push` côté
# poste de dev (voir README-CI.md).
#
# ⚠ Prérequis : un runner Forgejo Actions (act_runner) enregistré sur le VPS.
# Sans runner, ce fichier est inerte — aucun job ne démarre et aucun statut
# n'apparaît. C'est le cas aujourd'hui : ce workflow est là pour le jour où
# un runner sera ajouté.
name: CI
on:
push:
branches: [dev, main]
pull_request:
branches: [dev, main]
workflow_dispatch:
jobs:
javascript:
runs-on: docker
container:
image: node:22-alpine
steps:
- uses: actions/checkout@v4
- name: Installer les dépendances
run: npm ci
- name: ESLint
run: npm run lint
- name: Vérification de types (tsc --checkJs)
run: npm run typecheck
- name: Tests unitaires + a11y
run: npm run test
- name: Audit des dépendances
run: npm run audit:js
continue-on-error: true # informatif : ne doit pas masquer un échec de test
python:
runs-on: docker
container:
image: python:3.12-slim
steps:
- uses: actions/checkout@v4
# requirements-dev.txt, et non une liste recopiée : l'ancienne installait
# ruff/pytest/pip-audit seulement. psycopg2, beautifulsoup4, lxml et
# hypothesis manquaient, et le job aurait échoué dès la collecte — ce que
# personne n'a jamais vu, faute de runner enregistré.
- name: Installer l'outillage
run: pip install --no-cache-dir -r requirements-dev.txt
- name: Ruff (lint + règles de sécurité bandit)
run: ruff check .
- name: Tests du geocoder
run: cd apps/geocoder && python -m pytest tests -q
# La suite du crawler n'était pas lancée du tout.
- name: Tests du crawler
run: cd apps/crawler && python -m pytest tests -q
- name: Audit des dépendances
run: pip-audit -r apps/crawler/requirements.txt -r apps/geocoder/requirements.txt
continue-on-error: true
# Les tests de mutation prennent ~1 min : trop lents pour chaque push, mais
# utiles en revue. Déclenchement manuel uniquement.
mutation:
runs-on: docker
container:
image: node:22-alpine
if: github.event_name == 'workflow_dispatch'
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm run test:mutation