Skip to content

Tool hub: route Dependabot config and action manifests to zizmor - #2167

Merged
remigiusz-antczak merged 1 commit into
mainfrom
land/wave-15
Oct 31, 2026
Merged

remigiusz-antczak merged 1 commit into
mainfrom
land/wave-15

Conversation

@remigiusz-antczak

Copy link
Copy Markdown
Collaborator

Wave 15 routes Dependabot config and action manifests to zizmor, and stops the hub's JSON reader from starting at a bracket inside a scanner log line.

What changes

  1. The zizmor row also matches .github/dependabot.yml and action.yml (.yaml too) in any directory the hub does not exclude; actionlint stays workflows-only.
  2. A lone action.yml that is not an Actions manifest makes zizmor exit 3; the hub reports NOT RUN with a not-checked row, never clean.
  3. sjson decodes from the first line starting with [ or {, so a bracket in an audited path (x/[]/action.yml) no longer hides findings. Output without such a line still fails closed.
  4. references/tool-hub.md names the new routes and the exit 3 case; the fragment carries the size-budget-raise marker.
  5. New hermetic test scripts/test-review-checks-zizmor-routes.sh with a zizmor shim.

Verification

  • New test 7/7; 6 of its 7 cases fail on the routing-only commit before the sjson fix.
  • Affected suites: 42 of 42 sections passed, 21 of them review-checks-*.
  • Size ratchet, fragments, privacy and identity gates clean.
  • Four independent-review findings are fixed here.

This PR is the third of three perpr keep-bar checks for #2161.

🤖 Generated with Claude Code

zizmor audits more than workflows. Given the paths, it also reports on
.github/dependabot.yml and on GitHub Actions action manifests (action.yml or
action.yaml). The tool hub routed it only .github/workflows/*.yml, so those
files were never scanned. The zizmor row now also matches
.github/dependabot.yml and .yaml, and action.yml and .yaml in any directory the
hub does not exclude (node_modules, vendor, dist, build, ...); actionlint keeps
its workflows-only row. A changed action.yml that is not an Actions manifest
and is the only file given makes zizmor exit 3, which the hub reports as
NOT RUN: zizmor (exit 3) with a not-checked row, never as clean.

The hub merges each scanner's stderr into the file it parses, and zizmor logs
each audited path before its JSON. The JSON reader (sjson) started at the first
"[" or "{" anywhere in that output, so a bracket in a changed path could hide
findings: x/[]/action.yml read as an empty list (zizmor counted as run and
clean), and x/[id]/action.yml made the batch unparseable. sjson now starts at
the first line that begins with "[" or "{". Output with no such line still
fails closed as not run. The callers that read a report file (gitleaks, gosec)
are unaffected.

references/tool-hub.md: the zizmor row names the Dependabot config, action
manifests, the excluded directories and the exit 3 case. The file grows from
15368 to 15637 bytes; the fragment carries the size-budget-raise marker.

New test scripts/test-review-checks-zizmor-routes.sh, registered as
scripts/ci-tests.d/review-checks-zizmor-routes.sh, runs the hub with a zizmor
shim on a hermetic PATH. The shim logs each path to stderr as zizmor does and
reports one finding per file. The test checks that each routed file yields a
zizmor row; that zizmor receives exactly the workflows and the routed files (a
nested workflow, a Dependabot config outside the root .github/, and other YAML
are not routed); and that manifests under x/[]/ and x/[id]/ keep their
findings.

Tests: scripts/test-review-checks-zizmor-routes.sh 7/7 (6 of its 7 cases fail
on the routing-only commit before the sjson fix); run-ci-tests.sh --affected
4d6c926 passed all 42 sections (privacy, the trigger lint and 40 test or
check scripts, 21 of them review-checks-* suites including review-checks-tool-
hub and review-checks-zizmor-routes); size ratchet, fragments gate, privacy
and identity gates clean.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@remigiusz-antczak
remigiusz-antczak merged commit c6fac0c into main Oct 31, 2026
11 checks passed
@remigiusz-antczak
remigiusz-antczak deleted the land/wave-15 branch October 31, 2026 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant