Pular para o conteúdo

Regras de Linting Spectral

O projeto utiliza o Spectral para linting OAS3 com uma arquitetura de duas configurações que separa o CI/ferramentas externas da lógica customizada do pipeline.

Utilizada pelo GitHub Super-Linter e qualquer ferramenta de CI externa. Estende spectral:oas (o conjunto de regras OAS integrado). Não contém funções customizadas — isso mantém a compatibilidade com ferramentas que executam o Spectral sem acesso ao diretório spectral/functions/.

extends:
- "spectral:oas"
rules:
path-params: "off"
operation-tags: warn
oas3-api-servers: warn
info-contact: warn
oas3-unused-component: warn
operation-operationId-unique: error
oas3-valid-schema-example: error
no-script-tags-in-markdown: warn
operation-description: info
info-description: info

spectral-pipeline.yaml — Configuração do Pipeline

Seção intitulada “spectral-pipeline.yaml — Configuração do Pipeline”

Utilizada por scripts/spectral_lint.py (nos modos discover e gate). Estende a configuração base e adiciona a função customizada f5-path-params:

extends:
- "./.spectral.yaml"
functionsDir: "./spectral/functions"
functions:
- f5-path-params
rules:
f5-path-params:
description: "Path parameters must be declared and used"
message: "{{error}}"
severity: error
given: "$.paths[*]"
then:
function: f5-path-params

A regra integrada path-params do Spectral sinaliza incorretamente APIs F5 XC que utilizam nomes de parâmetros com pontos, como {metadata.namespace} e {metadata.name}. A regra integrada não analisa pontos em nomes de parâmetros, então os reporta como não declarados.

A função customizada f5-path-params (spectral/functions/f5-path-params.js) lida corretamente com nomes pontilhados ao comparar o conteúdo completo do {placeholder} com os nomes de parâmetros declarados. Ela verifica parâmetros tanto no nível do path quanto no nível da operação, e reporta erros em ambas as direções:

  • Um placeholder no caminho da URL que não possui declaração de parâmetro correspondente
  • Um parâmetro de path declarado que não aparece no caminho da URL

Estas regras são corrigidas automaticamente pelo reconciliador quando violações são detectadas. Consulte Correções Aplicadas para detalhes sobre cada correção.

RegraSeveridadeMétodo de CorreçãoDescrição
oas3-api-serverswarn_add_serversA especificação deve ter um bloco servers
info-contactwarn_add_contactinfo deve incluir contact
operation-tagswarn_add_tagsToda operação deve ter pelo menos uma tag
oas3-unused-componentwarn_remove_unused_componentNenhum esquema de componente sem referência
operation-operationId-uniqueerror_deduplicate_operation_idTodos os operationIds devem ser únicos
oas3-valid-schema-exampleerror_fix_schema_exampleExemplos/valores padrão devem corresponder ao seu esquema
no-script-tags-in-markdownwarn_strip_script_tagsSem tags <script> nas descrições
f5-path-paramserrorParâmetros de path devem ser declarados e utilizados

Estas regras são rebaixadas para severidade info porque não podem ser corrigidas automaticamente de forma significativa:

RegraSeveridadeDescrição
operation-descriptioninfoOperações devem ter uma descrição
info-descriptioninfoAs informações da API devem ter uma descrição

O adaptador Spectral (scripts/spectral_lint.py) executa em dois modos:

Terminal window
make spectral-lint
# Equivalente a: python -m scripts.spectral_lint --mode discover

Analisa specs/original/ e grava reports/spectral_report.json. O reconciliador consome este relatório junto com o relatório de validação.

Terminal window
make spectral-gate
# Equivalente a: python -m scripts.spectral_lint --mode gate

Analisa release/specs/ e grava reports/spectral_gate_report.json. Retorna código de saída 1 se as violações excederem os limites configurados.

As violações do Spectral são convertidas em objetos Discrepancy com três subtipos:

Categoria de Regra SpectralDiscrepancyTypeRegras de Exemplo
Elemento obrigatório ausenteSPECTRAL_MISSINGoas3-api-servers, info-contact, operation-tags
Elemento existente inválidoSPECTRAL_INVALIDoas3-valid-schema-example, no-script-tags-in-markdown
Código mortoSPECTRAL_UNUSEDoas3-unused-component