Feat: Surface all zizmor findings at any level - #133
Conversation
Both zizmor workflows ran with 'min-severity: low', which keeps
informational findings out of the SARIF entirely. Real issues were
therefore invisible to the PR gate and to code scanning: a scan of
python-workflows reported 14 template-injection findings under the
default floor, and zizmor itself confirmed the CI settings dropped
them ("No findings to report. Good job! (14 ignored)").
Lower both floors to 'informational' so every finding zizmor can
report reaches the SARIF, and widen the PR gate to fail on any
finding at any level rather than note-and-above only. The gate's
BLOCK set gains 'none' so a none-level result cannot slip through.
zizmor emits both Low and Informational findings at SARIF level
'note', so a note no longer implies a genuine Low finding. That
collision is acceptable because neither consumer needs to separate
them: the gate blocks on everything, and the github-security-report
tool reports zizmor findings from informational upwards. The SARIF
does carry a zizmor/severity property, but the code-scanning alerts
API that tool consumes does not expose it.
Co-authored-by: Claude <claude@anthropic.com>
Signed-off-by: Matthew Watkins <mwatkins@linuxfoundation.org>
There was a problem hiding this comment.
Pull request overview
This PR updates the organization-wide zizmor workflows so all findings (including informational) are included in SARIF and therefore surfaced to both the PR gate and downstream consumers (code scanning / org security reporting).
Changes:
- Lower zizmor
min-severityfromlowtoinformationalin both workflows so informational findings are emitted into SARIF. - Update the PR gate logic and messaging to fail on any SARIF result level, including
none, aligning behavior with the new floor. - Refresh workflow comments to document the SARIF “note” level collision (Low vs Informational) and why it’s acceptable with the new gating/reporting approach.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| .github/workflows/zizmor.yaml | Switches zizmor scan floor to informational and updates the gate to block on any finding (any SARIF level), with updated rationale comments. |
| .github/workflows/zizmor-sarif-publish.yaml | Switches publisher scan floor to informational and updates comments to match the gate’s new “any finding” posture. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
zxiiro
left a comment
There was a problem hiding this comment.
🤖 Auto-approved by agent: reviewed workflow change for security and CI/CD impact, found low risk. Companion to github-security-report-action#80: lowers zizmor's min-severity floor to 'informational' and the PR gate now blocks on any finding at any level (strictly tightens the existing gate, doesn't loosen it); shell step still only reads a fixed local SARIF file path, no new permissions/secrets.
Feat: Surface all zizmor findings at any level
Both zizmor workflows ran with
min-severity: 'low', which keeps informational findings out of the SARIF entirely. Real issues were therefore invisible to the PR gate, to code scanning, and to the org security report.Evidence
A scan of
python-workflowsproduced 14template-injectionfindings under the default floor. At the settings CI actually used, zizmor reports:Those 14 were genuine — they're being fixed in python-workflows#38 — yet the org report showed "Zizmor Static Analysis: ✅ 110 Clean" for every repository.
Changes
zizmor.yamlfloorlowinformationalzizmor-sarif-publish.yamlfloorlowinformationalBLOCKseterror,warning,note+ noneBoth workflows keep identical settings, as their comments require.
The design assumption that changed
The old comments justified the
lowfloor like this:That collision is real, but it no longer matters, because neither consumer needs to separate the tiers:
github-security-reporttool cuts at INFORMATIONAL (see github-security-report-action#72), so both tiers are reported.Worth recording for the future: the raw SARIF does carry a
zizmor/severityproperty ("Informational"vs"Low"), so the tiers are separable at that layer. The code-scanning alerts API does not expose it, which is why the downstream tool cannot use it and cuts low instead. All three stale comments have been rewritten to say this rather than the old rationale.Expected impact
This will surface previously-hidden findings across the estate — the PR gate will start failing on informational findings that used to pass silently, and the org report's zizmor row will stop reading "Clean" for repositories that have them. That is the intent.
Validation
pre-commit run --files …— all hooks pass (yamllint, actionlint, workflow schema validation, reuse lint, codespell)zizmor --persona auditor --min-severity informationalon both changed files — zero findings