Pular para o conteúdo
getnextpdf.com

Qualidade de engenharia

Todo push e pull request no NextPDF executa gates de CI que bloqueiam o build para análise estática, cobertura de linhas alteradas, pontuação de mutação e validação da saída com tags.

Três gates do PHPStan rodam em todo push e pull request:

GateEscopoBloqueante
Level 10src/Sim
Level max (perfil strict)src/Sim
Anotação SARIFsrc/Informativo

A CI trata os apontamentos do PHPStan Level 10 em src/ como bloqueantes do build. Duas configurações elevam a régua acima de uma execução padrão no Level 10:

  • treatPhpDocTypesAsCertain — o PHPStan trata a anotação PHPDoc como fonte de verdade, em vez de ampliá-la de volta ao tipo nativo; assim, uma anotação que estreita o tipo e contradiz o que a análise estática consegue derivar é reportada como apontamento.
  • reportUnmatchedIgnoredErrors — toda supressão precisa corresponder a um erro atualmente reportado; caso contrário, o build falha.

Cada entrada ignoreErrors para src/ é fixada a um identificador do PHPStan, a um caminho de arquivo exato e, quando aplicável, a uma contagem exata de ocorrências — uma nova ocorrência do mesmo identificador em qualquer outro lugar, ou uma segunda ocorrência no mesmo arquivo, faz o build falhar.

A CI aplica um limite de 90% de cobertura sobre as linhas que cada pull request altera, medido com PCOV em relação ao branch de base. Um pull request abaixo do limite faz o build falhar.

O teste de mutação verifica se os testes fazem asserções sobre o comportamento: a CI muta o código e exige que algum teste falhe. Três indicadores de pontuação de mutação carregam pisos monotonicamente não decrescentes:

MétricaMínimo aplicado
raw_msi88,9%
effective_msi89,0%
covered_msi88,9%

Um pull request que faria qualquer métrica cair abaixo do seu piso é rejeitado. A CI aplica uma tolerância de variação documentada antes de comparar uma execução com os pisos.

A CI executa o veraPDF 1.30.1 com o perfil pdfua.strict como gate bloqueante do build sobre o corpus de saída com tags.