Salta ai contenuti

Regole di Linting Spectral

Il progetto utilizza Spectral per il linting OAS3 con un’architettura a due configurazioni che separa il CI/gli strumenti esterni dalla logica personalizzata della pipeline.

Utilizzata da GitHub Super-Linter e da qualsiasi strumento CI esterno. Estende spectral:oas (il set di regole OAS integrato). Non contiene funzioni personalizzate — questo la mantiene compatibile con gli strumenti che eseguono Spectral senza accesso alla directory 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 — Configurazione della Pipeline

Sezione intitolata “spectral-pipeline.yaml — Configurazione della Pipeline”

Utilizzata da scripts/spectral_lint.py (sia in modalità discover che gate). Estende la configurazione base e aggiunge la funzione personalizzata 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

La regola integrata path-params di Spectral segnala erroneamente le API F5 XC che utilizzano nomi di parametri con notazione a punti come {metadata.namespace} e {metadata.name}. La regola integrata non analizza i punti nei nomi dei parametri, quindi li segnala come non dichiarati.

La funzione personalizzata f5-path-params (spectral/functions/f5-path-params.js) gestisce correttamente i nomi con notazione a punti confrontando l’intero contenuto del {placeholder} con i nomi dei parametri dichiarati. Controlla sia i parametri a livello di percorso che a livello di operazione e segnala errori in entrambe le direzioni:

  • Un placeholder nel percorso URL che non ha una corrispondente dichiarazione di parametro
  • Un parametro di percorso dichiarato che non appare nel percorso URL

Queste regole vengono corrette automaticamente dal riconciliatore quando vengono rilevate violazioni. Consultare Correzioni Applicate per i dettagli su ciascuna correzione.

RegolaSeveritàMetodo di CorrezioneDescrizione
oas3-api-serverswarn_add_serversLa specifica deve avere un blocco servers
info-contactwarn_add_contactinfo deve includere contact
operation-tagswarn_add_tagsOgni operazione deve avere almeno un tag
oas3-unused-componentwarn_remove_unused_componentNessun schema di componente non referenziato
operation-operationId-uniqueerror_deduplicate_operation_idTutti gli operationId devono essere univoci
oas3-valid-schema-exampleerror_fix_schema_exampleEsempi/valori predefiniti devono corrispondere al loro schema
no-script-tags-in-markdownwarn_strip_script_tagsNessun tag <script> nelle descrizioni
f5-path-paramserrorI parametri di percorso devono essere dichiarati e utilizzati

Queste regole sono declassate a severità info perché non possono essere corrette automaticamente in modo significativo:

RegolaSeveritàDescrizione
operation-descriptioninfoLe operazioni dovrebbero avere una descrizione
info-descriptioninfoLe informazioni dell’API dovrebbero avere una descrizione

L’adattatore Spectral (scripts/spectral_lint.py) viene eseguito in due modalità:

Terminal window
make spectral-lint
# Equivalent to: python -m scripts.spectral_lint --mode discover

Analizza specs/original/ e scrive reports/spectral_report.json. Il riconciliatore consuma questo report insieme al report di validazione.

Terminal window
make spectral-gate
# Equivalent to: python -m scripts.spectral_lint --mode gate

Analizza release/specs/ e scrive reports/spectral_gate_report.json. Restituisce il codice di uscita 1 se le violazioni superano le soglie configurate.

Le violazioni Spectral vengono convertite in oggetti Discrepancy con tre sottotipi:

Categoria Regola SpectralDiscrepancyTypeRegole di Esempio
Elemento richiesto mancanteSPECTRAL_MISSINGoas3-api-servers, info-contact, operation-tags
Elemento esistente non validoSPECTRAL_INVALIDoas3-valid-schema-example, no-script-tags-in-markdown
Codice mortoSPECTRAL_UNUSEDoas3-unused-component