Salta ai contenuti
getnextpdf.com

Qualità ingegneristica

Ogni push e pull request su NextPDF esegue gate CI bloccanti per la build su analisi statica, copertura delle righe modificate, punteggio di mutazione e validazione dell’output taggato.

Su ogni push e pull request vengono eseguiti tre gate PHPStan:

GateAmbitoBloccante
Level 10src/
Level max (profilo strict)src/
Annotazione SARIFsrc/Informativo

La CI tratta come bloccanti per la build i rilievi di PHPStan Level 10 in src/. Due impostazioni alzano l’asticella rispetto a un’esecuzione Level 10 predefinita:

  • treatPhpDocTypesAsCertain — PHPStan considera l’annotazione PHPDoc come verità di riferimento anziché riallargarla al tipo nativo, quindi un’annotazione restrittiva che contraddice ciò che l’analisi statica può derivare è un rilievo segnalato.
  • reportUnmatchedIgnoredErrors — ogni soppressione deve corrispondere a un errore attualmente segnalato, altrimenti la build fallisce.

Ogni voce ignoreErrors per src/ è vincolata a un identificatore PHPStan, a un percorso di file esatto e, dove pertinente, a un conteggio esatto di occorrenze — una nuova occorrenza dello stesso identificatore in qualsiasi altro punto, o una seconda occorrenza nello stesso file, fa fallire la build.

La CI applica una soglia di copertura del 90% sulle righe modificate da ciascuna pull request, misurata con PCOV rispetto al branch di base. Una pull request sotto la soglia fa fallire la build.

Il mutation testing verifica che i test facciano asserzioni sul comportamento: la CI muta il codice e richiede che un test fallisca. Tre indicatori di punteggio di mutazione hanno soglie minime monotone non decrescenti:

MetricaMinimo applicato
raw_msi88.9%
effective_msi89.0%
covered_msi88.9%

Una pull request che farebbe scendere una qualsiasi metrica sotto la propria soglia minima viene respinta. Prima di confrontare un’esecuzione con le soglie, la CI applica una tolleranza di varianza documentata.

La CI esegue veraPDF 1.30.1 con il profilo pdfua.strict come gate bloccante per la build sul corpus di output taggato.