Przejdź do głównej zawartości
getnextpdf.com

Jakość inżynierska

Każdy push i pull request do NextPDF uruchamia blokujące build bramki CI dla analizy statycznej, pokrycia zmienionych linii, wskaźnika mutacji i walidacji tagowanego wyjścia.

Przy każdym pushu i pull requeście działają trzy bramki PHPStan:

BramkaZakresBlokująca
Level 10src/Tak
Level max (profil strict)src/Tak
Adnotacje SARIFsrc/Doradcza

CI traktuje ustalenia PHPStan Level 10 w src/ jako blokujące build. Dwa ustawienia podnoszą poprzeczkę powyżej domyślnego uruchomienia Level 10:

  • treatPhpDocTypesAsCertain — PHPStan traktuje adnotację PHPDoc jako źródło prawdy, zamiast ponownie rozszerzać typ do typu natywnego, więc zawężająca adnotacja sprzeczna z tym, co analiza statyczna potrafi wyprowadzić, jest raportowanym ustaleniem.
  • reportUnmatchedIgnoredErrors — każde wyciszenie musi odpowiadać aktualnie raportowanemu błędowi, w przeciwnym razie build kończy się niepowodzeniem.

Każdy wpis ignoreErrors dla src/ jest przypięty do identyfikatora PHPStan, dokładnej ścieżki pliku i — tam, gdzie to istotne — dokładnej liczby wystąpień; nowe wystąpienie tego samego identyfikatora w dowolnym innym miejscu albo drugie wystąpienie w tym samym pliku powoduje niepowodzenie builda.

CI egzekwuje próg 90% pokrycia dla linii zmienianych przez każdy pull request, mierzony narzędziem PCOV względem gałęzi bazowej. Pull request poniżej progu kończy build niepowodzeniem.

Testy mutacyjne sprawdzają, czy testy weryfikują zachowanie: CI mutuje kod i wymaga, aby jakiś test się nie powiódł. Trzy wskaźniki wyniku mutacji mają monotonicznie niemalejące progi minimalne:

WskaźnikEgzekwowane minimum
raw_msi88.9%
effective_msi89.0%
covered_msi88.9%

Pull request, który obniżyłby którykolwiek wskaźnik poniżej jego progu, jest odrzucany. Przed porównaniem przebiegu z progami CI stosuje udokumentowaną tolerancję wariancji.

CI uruchamia veraPDF 1.30.1 z profilem pdfua.strict jako blokującą build bramkę na korpusie tagowanych dokumentów wyjściowych.