Ga naar inhoud
getnextpdf.com

Engineeringkwaliteit

Elke push en pull request naar NextPDF draait build-blokkerende CI-gates voor statische analyse, dekking van gewijzigde regels, mutatiescore en validatie van getagde output.

Bij elke push en pull request draaien drie PHPStan-gates:

GateScopeBlokkerend
Level 10src/Ja
Level max (strict-profiel)src/Ja
SARIF-annotatiesrc/Adviserend

CI behandelt PHPStan Level 10-bevindingen in src/ als build-blokkerend. Twee instellingen leggen de lat hoger dan een standaard Level 10-run:

  • treatPhpDocTypesAsCertain — PHPStan vertrouwt de PHPDoc-annotatie als grondwaarheid in plaats van terug te verbreden naar het native type, zodat een vernauwende annotatie die tegenspreekt wat statische analyse kan afleiden, als bevinding wordt gerapporteerd.
  • reportUnmatchedIgnoredErrors — elke onderdrukking moet overeenkomen met een op dat moment gerapporteerde fout, anders faalt de build.

Elk ignoreErrors-item voor src/ is vastgepind op een PHPStan-identifier, een exact bestandspad en waar relevant een exact aantal voorkomens — een nieuw voorkomen van dezelfde identifier elders, of een tweede voorkomen in hetzelfde bestand, laat de build falen.

CI dwingt een dekkingsdrempel van 90% af op de regels die elke pull request wijzigt, gemeten met PCOV ten opzichte van de basisbranch. Een pull request onder de drempel laat de build falen.

Mutatietesten controleren of de tests op gedrag asserteren: CI muteert de code en vereist dat een test faalt. Drie mutatiescore-indicatoren dragen monotoon niet-dalende ondergrenzen:

MetriekAfgedwongen minimum
raw_msi88,9%
effective_msi89,0%
covered_msi88,9%

Een pull request die een metriek onder zijn ondergrens zou laten zakken, wordt geweigerd. CI past een gedocumenteerde variantietolerantie toe voordat een run met de ondergrenzen wordt vergeleken.

CI draait veraPDF 1.30.1 met het pdfua.strict-profiel als build-blokkerende gate op het corpus van getagde output.