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.
Análise estática
Seção intitulada “Análise estática”Três gates do PHPStan rodam em todo push e pull request:
| Gate | Escopo | Bloqueante |
|---|---|---|
| Level 10 | src/ | Sim |
| Level max (perfil strict) | src/ | Sim |
| Anotação SARIF | src/ | 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.
Cobertura
Seção intitulada “Cobertura”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.
Teste de mutação
Seção intitulada “Teste de mutação”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étrica | Mínimo aplicado |
|---|---|
raw_msi | 88,9% |
effective_msi | 89,0% |
covered_msi | 88,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.
Validação de saída
Seção intitulada “Validação de saída”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.