Qualité d'ingénierie
Chaque push et chaque pull request sur NextPDF exécutent des contrôles CI bloquants couvrant l’analyse statique, la couverture des lignes modifiées, le score de mutation et la validation des sorties balisées.
Analyse statique
Section intitulée « Analyse statique »Trois contrôles PHPStan s’exécutent sur chaque push et chaque pull request :
| Contrôle | Périmètre | Bloquant |
|---|---|---|
| Niveau 10 | src/ | Oui |
| Niveau max (profil strict) | src/ | Oui |
| Annotation SARIF | src/ | Indicatif |
La CI traite les signalements PHPStan de niveau 10 dans src/ comme bloquants
pour le build. Deux réglages relèvent la barre au-dessus d’une exécution
niveau 10 par défaut :
treatPhpDocTypesAsCertain— PHPStan considère l’annotation PHPDoc comme la vérité de référence plutôt que de ré-élargir vers le type natif ; une annotation restrictive qui contredit ce que l’analyse statique peut dériver constitue donc un signalement.reportUnmatchedIgnoredErrors— chaque suppression doit correspondre à une erreur effectivement signalée, faute de quoi le build échoue.
Chaque entrée ignoreErrors pour src/ est épinglée à un identifiant PHPStan,
à un chemin de fichier exact et, le cas échéant, à un nombre d’occurrences
exact — une nouvelle occurrence du même identifiant ailleurs, ou une seconde
occurrence dans le même fichier, fait échouer le build.
Couverture
Section intitulée « Couverture »La CI applique un seuil de couverture de 90 % sur les lignes que chaque pull request modifie, mesuré avec PCOV par rapport à la branche de base. Une pull request sous le seuil fait échouer le build.
Tests de mutation
Section intitulée « Tests de mutation »Les tests de mutation vérifient que les tests portent des assertions sur le comportement : la CI mute le code et exige qu’un test échoue. Trois indicateurs de score de mutation portent des planchers monotones non décroissants :
| Métrique | Minimum appliqué |
|---|---|
raw_msi | 88,9 % |
effective_msi | 89,0 % |
covered_msi | 88,9 % |
Une pull request qui ferait passer l’une de ces métriques sous son plancher est rejetée. La CI applique une tolérance de variance documentée avant de comparer une exécution aux planchers.
Validation des sorties
Section intitulée « Validation des sorties »La CI exécute veraPDF 1.30.1 avec le profil pdfua.strict comme contrôle
bloquant sur le corpus de sorties balisées.