コンテンツにスキップ
getnextpdf.com

エンジニアリング品質

NextPDF へのすべてのプッシュとプルリクエストでは、静的解析、変更行カバレッジ、 ミューテーションスコア、タグ付き出力検証について、ビルドをブロックする CI ゲートが実行されます。

すべてのプッシュとプルリクエストで、3 つの PHPStan ゲートが実行されます。

ゲート対象範囲ブロッキング
Level 10src/あり
Level max(strict プロファイル)src/あり
SARIF アノテーションsrc/アドバイザリ

CI は、src/ における PHPStan Level 10 の指摘をビルドブロッキングとして扱います。 次の 2 つの設定により、デフォルトの Level 10 実行より高い基準を課しています。

  • treatPhpDocTypesAsCertain — PHPStan は、ネイティブ型へ再拡大するのではなく PHPDoc アノテーションを正として信頼します。そのため、静的解析が導出できる型と矛盾する絞り込みアノテーションは、指摘として報告されます。
  • reportUnmatchedIgnoredErrors — すべての抑止は、現に報告されているエラーと一致しなければならず、一致しない場合はビルドが失敗します。

src/ に対する各 ignoreErrors エントリは、PHPStan の識別子、正確なファイルパス、 および該当する場合は正確な出現回数に固定されています。同じ識別子が他の場所で新たに出現した場合や、同一ファイル内で 2 回目の出現があった場合、ビルドは失敗します。

CI は、各プルリクエストが変更した行に対して 90% のカバレッジしきい値を強制します。 計測は、ベースブランチとの比較で PCOV により行います。しきい値を下回るプルリクエストはビルド失敗となります。

ミューテーションテストは、テストが挙動に対してアサーションしていることを確認する仕組みです。CI がコードに変異を加え、いずれかのテストが失敗することを要求します。 3 つのミューテーションスコア指標には、単調非減少の下限が設定されています。

指標強制される最小値
raw_msi88.9%
effective_msi89.0%
covered_msi88.9%

いずれかの指標をその下限未満に引き下げるプルリクエストは拒否されます。CI は、 実行結果を下限と比較する前に、文書化された許容ばらつきを適用します。

CI は、タグ付き出力コーパスに対するビルドブロッキングのゲートとして、 pdfua.strict プロファイルを指定した veraPDF 1.30.1 を実行します。