Zum Inhalt springen
getnextpdf.com

Engineering-Qualität

Jeder Push und jeder Pull Request an NextPDF durchläuft build-blockierende CI-Gates für statische Analyse, Coverage geänderter Zeilen, Mutation-Score und die Validierung der getaggten Ausgabe.

Bei jedem Push und Pull Request laufen drei PHPStan-Gates:

GateBereichBlockierend
Level 10src/Ja
Level max (Strict-Profil)src/Ja
SARIF-Annotationsrc/Hinweisend

Die CI behandelt PHPStan-Level-10-Befunde in src/ als build-blockierend. Zwei Einstellungen legen die Messlatte über einen Standard-Level-10-Lauf:

  • treatPhpDocTypesAsCertain — PHPStan behandelt die PHPDoc-Annotation als verbindliche Wahrheit, statt auf den nativen Typ zurückzuweiten; eine einengende Annotation, die dem widerspricht, was die statische Analyse ableiten kann, wird als Befund gemeldet.
  • reportUnmatchedIgnoredErrors — jede Unterdrückung muss einem aktuell gemeldeten Fehler entsprechen, sonst schlägt der Build fehl.

Jeder ignoreErrors-Eintrag für src/ ist an einen PHPStan-Identifier, einen exakten Dateipfad und, wo relevant, eine exakte Vorkommensanzahl gebunden — ein neues Vorkommen desselben Identifiers an anderer Stelle oder ein zweites Vorkommen in derselben Datei lässt den Build fehlschlagen.

Die CI erzwingt eine 90-%-Coverage-Schwelle auf den Zeilen, die ein Pull Request ändert, gemessen mit PCOV gegen den Basis-Branch. Ein Pull Request unterhalb der Schwelle lässt den Build fehlschlagen.

Mutationstests prüfen, dass die Tests tatsächlich Verhalten absichern: Die CI mutiert den Code und verlangt, dass ein Test fehlschlägt. Drei Mutation-Score-Indikatoren tragen monoton nicht sinkende Untergrenzen:

MetrikErzwungenes Minimum
raw_msi88,9 %
effective_msi89,0 %
covered_msi88,9 %

Ein Pull Request, der eine Metrik unter ihre Untergrenze drücken würde, wird abgewiesen. Die CI wendet eine dokumentierte Varianztoleranz an, bevor ein Lauf gegen die Untergrenzen verglichen wird.

Die CI führt veraPDF 1.30.1 mit dem Profil pdfua.strict als build-blockierendes Gate auf dem Korpus der getaggten Ausgabe aus.