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.
Analiza statyczna
Dział zatytułowany „Analiza statyczna”Przy każdym pushu i pull requeście działają trzy bramki PHPStan:
| Bramka | Zakres | Blokująca |
|---|---|---|
| Level 10 | src/ | Tak |
| Level max (profil strict) | src/ | Tak |
| Adnotacje SARIF | src/ | 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.
Pokrycie
Dział zatytułowany „Pokrycie”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
Dział zatytułowany „Testy mutacyjne”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źnik | Egzekwowane minimum |
|---|---|
raw_msi | 88.9% |
effective_msi | 89.0% |
covered_msi | 88.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.
Walidacja wyjścia
Dział zatytułowany „Walidacja wyjścia”CI uruchamia veraPDF 1.30.1 z profilem pdfua.strict jako blokującą build bramkę
na korpusie tagowanych dokumentów wyjściowych.