Documentation / SARIF
Référence du format SARIF
Ce sujet existe en version animée : voir l’étage Rapport dans le synoptique →Perf Sentinel émet du SARIF v2.1.0 via --format sarif sur analyze et diff. Cette référence liste les champs renseignés par result. Pour le workflow d'acquittement commun aux formats, voir Acquittements.
Champs par result
| Champ | Source | Notes |
|---|---|---|
ruleId | Finding.finding_type | Identifiant de règle en snake-case (n_plus_one_sql, redundant_http, ...). |
level | Finding.severity | error pour critical, warning pour warning, note pour info. |
message.text | composé à partir des champs de Finding | Résumé lisible incluant occurrences et fenêtre. |
properties.service | Finding.service | Toujours présent. Caractères BiDi et de formatage invisibles retirés. |
properties.endpoint | Finding.source_endpoint | Toujours présent, même nettoyage. |
properties.confidence | Finding.confidence | Une valeur parmi local_batch, ci_batch, daemon_staging, daemon_production. Lue par perf-lint pour ajuster la sévérité IDE. |
properties.signature | Finding.signature | Signature canonique, également exposée dans fingerprints. Omise quand vide (anciennes baselines pré-0.5.17). |
properties.acknowledged | --show-acknowledged | true pour les entrées acquittées, omis pour les findings normaux. |
properties.acknowledgmentReason / acknowledgmentBy / acknowledgmentAt | métadonnées d'ack | Caractères BiDi et de formatage invisibles retirés avant émission (défense Trojan Source). |
rank | Finding.confidence.sarif_rank() | Entier de 0 à 100. local_batch=15, ci_batch=30, daemon_staging=60, daemon_production=90. |
locations[0].physicalLocation | Finding.code_location | Localisation source physique, renseignée quand l'instrumentation émet un chemin de fichier (code.file.path, ou le nom legacy code.filepath). region.startLine vient de code.line.number (legacy code.lineno) et est omis quand la ligne manque ou vaut 0. Les chemins de fichier hostiles (absolus, traversal, BiDi, percent-encodés) sont rejetés à l'émission. Le résultat n'a cette unique location que si le chemin de fichier est utilisable, avec des logicalLocations qui reprennent le service (kind: "module") et l'endpoint (kind: "function"). Sinon le résultat n'a pas de locations : une location sans physicalLocation est du SARIF valide, mais le parseur de Warnings NG (Jenkins) rejette alors tout le fichier. GitHub code scanning n'affiche que les résultats qui ont cette location. |
properties.suggestedFix | Finding.suggested_fix | Recommandation au niveau du framework, suivie de (see: <url>) quand une URL de référence existe. Omis quand absent. Pas émis en fixes[] SARIF, dont le schéma exige artifactChanges, un patch source que Perf Sentinel ne produit pas. |
fingerprints["perfsentinel/v1"] | Finding.signature | Fingerprint SARIF v2.1.0 section 3.27.17. Utilisé par GitHub Code Scanning et GitLab SAST pour la déduplication d'une exécution à l'autre. Omis quand la signature est vide. |
Outil
runs[].tool.driver est toujours { name: "perf-sentinel", version: <CARGO_PKG_VERSION>, informationUri: "https://github.com/Institut-du-Numerique-Responsable/perf-sentinel" }. Le tableau rules pré-déclare les 12 types de findings, quel que soit le nombre de results émis, pour que les consommateurs SARIF puissent afficher les descriptions de règles même sur une exécution propre.
Schéma
$schema pointe vers https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json.