Skip to content

ci: pin third-party actions to SHAs, persist-credentials: false, seed zizmor.yml; use the shell variable in the cask sed - #30

Merged
twistedmelonman merged 1 commit into
mainfrom
claude/ci-zizmor-019HDRKL
Sep 9, 2026
Merged

twistedmelonman merged 1 commit into
mainfrom
claude/ci-zizmor-019HDRKL

Conversation

@twistedmelonman

Copy link
Copy Markdown
Member

Wave 2 (zizmor) remediation.

Corrected a wrong pin comment. release.yml's checkout read # v6, but 3d3c42e5… is actually v7.0.1 — a mislabel, not just a major-only comment, and it fails the online ref-version-mismatch audit. Also corrected softprops/action-gh-release from # v3 to the exact # v3.0.3.

persist-credentials: false on release.yml's checkout (artipacked). The job does push, but never with this checkout's token: action-gh-release authenticates through the GITHUB_TOKEN env var, and the Homebrew tap push clones a different repo with HOMEBREW_TAP_TOKEN embedded in the URL. Nothing reads the persisted credential, so dropping it removes exposure without removing capability.

Template injection (help[template-injection]). release.yml:68 interpolated ${{ env.SHA256 }} straight into the sed in a run: block. SHA256 is already exported through $GITHUB_ENV by the preceding step, so it is visible to the shell — the fix is just "${SHA256}", and the expansion never reaches the script body. Line 67 already used ${VERSION} this way, so this makes the two lines consistent.

One suppression added. superfluous-actions (informational) fires on action-gh-release, advising gh release in a script step instead. That swap would have to reimplement the asset upload and templated release body, which is a behavior change and out of scope for wave 2, so the step carries an inline # zizmor: ignore[superfluous-actions] with that reasoning. Worth revisiting separately. Note this repo is the first in the fleet to use action-gh-release, so there was no existing precedent to follow.

Seeded the fleet-standard root zizmor.yml, byte-identical to the canonical copy. .github/dependabot.yml already exists and is left alone.

zizmor and actionlint are clean locally, offline and online. shellcheck debt remains (an untracked .claude/hooks/extensions/example.sh.disabled) and is wave 3.

https://claude.ai/code/session_019HDRKLQNv82SEBd4zGpcXf

… zizmor.yml; use the shell variable in the cask sed

Wave 2 (zizmor) remediation.

The checkout pin's "# v6" comment was wrong -- that SHA is v7.0.1 -- which
fails the online ref-version-mismatch audit. Corrected, along with the
gh-release pin's major-only comment.

The Homebrew cask sed interpolated ${{ env.SHA256 }} directly into the run
block (template-injection). SHA256 already reaches the step through
GITHUB_ENV, so the shell variable does the same job without the expansion.

Claude-Session: https://claude.ai/code/session_019HDRKLQNv82SEBd4zGpcXf
@twistedmelonman
twistedmelonman merged commit 36ce9c5 into main Sep 9, 2026
3 checks passed
@twistedmelonman
twistedmelonman deleted the claude/ci-zizmor-019HDRKL branch September 9, 2026 01:35
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