Background
The 2026-04-29 GitHub Actions security audit (against GitHub Actions Is The Weakest Link) ran a manual scan across 31 workflow files in 29 repos. Findings were addressed in Tier 1+2 (PRs landed 2026-04-29). Tier 3 is automating that scan so future drift is caught at commit/PR time, not at the next audit.
Proposal
Adopt zizmor — a rust static analyzer for GitHub Actions that catches:
dangerous-triggers (issue_comment, pull_request_target with checkout)
cache-poisoning (untrusted cache restoration)
unpinned-uses (tag-pinned third-party actions)
template-injection (\${{ github.event.* }} in run:)
excessive-permissions (broad permissions blocks)
The article specifically recommends zizmor as the detection tool for the 9 patterns it catalogs.
Integration paths
- Pre-commit hook in
~/.config/pre-commit/config.yaml — catches drift at commit time, free, runs locally. Recommended.
- Dedicated GitHub Action in
smartwatermelon/github-workflows (a new reusable zizmor.yml) — second-line catch on PRs. Each repo would add a one-line caller to wire it up.
- Both — pre-commit for fast feedback, CI as the enforcement gate.
Tasks
Audit context
- Source PR for the manual audit fixes: see PRs landed 2026-04-29 with
chore(ci): ...permissions... and chore(security): ...SHA-pin... titles.
- 8 PRs landed: ralph-burndown#130, homebrew-tap#8, yesteryear#62, juliet-cleaning#35, tensegrity#84, kebab-tax#1217, mac-server-setup#134, swift-progress-indicator#12, github-workflows#63.
🤖 Filed by Claude Code as Tier 3 follow-up to the manual audit.
Background
The 2026-04-29 GitHub Actions security audit (against GitHub Actions Is The Weakest Link) ran a manual scan across 31 workflow files in 29 repos. Findings were addressed in Tier 1+2 (PRs landed 2026-04-29). Tier 3 is automating that scan so future drift is caught at commit/PR time, not at the next audit.
Proposal
Adopt
zizmor— a rust static analyzer for GitHub Actions that catches:dangerous-triggers(issue_comment, pull_request_target with checkout)cache-poisoning(untrusted cache restoration)unpinned-uses(tag-pinned third-party actions)template-injection(\${{ github.event.* }}inrun:)excessive-permissions(broad permissions blocks)The article specifically recommends zizmor as the detection tool for the 9 patterns it catalogs.
Integration paths
~/.config/pre-commit/config.yaml— catches drift at commit time, free, runs locally. Recommended.smartwatermelon/github-workflows(a new reusablezizmor.yml) — second-line catch on PRs. Each repo would add a one-line caller to wire it up.Tasks
~/.config/pre-commit/config.yaml, document in dev-env READMEsmartwatermelon/github-workflows/.github/workflows/zizmor.yml, document caller patternAudit context
chore(ci): ...permissions...andchore(security): ...SHA-pin...titles.🤖 Filed by Claude Code as Tier 3 follow-up to the manual audit.