From workflow-skills
Pin GitHub Actions from mutable tags (e.g., @v4) to immutable commit SHAs to prevent supply chain attacks. Use when editing .github/workflows files, hardening CI security, looking up action SHAs, pinning actions to specific commits, or replacing "uses: owner/repo@tag" references with SHA-pinned equivalents.
npx claudepluginhub arosenkranz/claude-code-config --plugin workflow-skillsThis skill uses the workspace's default tool permissions.
GitHub Actions referenced by mutable tags (`@v4`) are vulnerable to supply chain attacks —
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Designs, implements, and audits WCAG 2.2 AA accessible UIs for Web (ARIA/HTML5), iOS (SwiftUI traits), and Android (Compose semantics). Audits code for compliance gaps.
GitHub Actions referenced by mutable tags (@v4) are vulnerable to supply chain attacks —
a compromised maintainer can silently move the tag to malicious code. Pinning to a commit
SHA makes the reference immutable and tamper-evident.
~/.claude/skills/pin-actions/scripts/resolve_action_sha.sh
Interface: ./resolve_action_sha.sh <owner/repo[/path]> <tag> → prints 40-char SHA to stdout
uses: linesuses: owner/repo@<40-char hex SHA>uses: docker://...uses: ./path/to/actionowner/repo[/subpath] and ref:
uses: {owner}/{repo}@{ref}uses: {owner}/{repo}/{path}@{ref} (sub-path actions)SHA=$(~/.claude/skills/pin-actions/scripts/resolve_action_sha.sh "owner/repo" "v4")
owner/repo@v4 → owner/repo@<SHA> # v4
Before:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: docker/build-push-action/push@v6
After:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: pnpm/action-setup@a3252b7a1b87b11f31ef2a5405c6fe64a35b06b8 # v4
- uses: docker/build-push-action/push@263435318d21b8e681c14492fe198d362a7d2c83 # v6
When asked to look up the SHA for a specific action:
~/.claude/skills/pin-actions/scripts/resolve_action_sha.sh "actions/checkout" "v4"
# → 11bd71901bbe5b1630ceea73d27597364c9af683
Report the SHA and the pinned form:
actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
The script handles both GitHub tag types transparently:
If the script exits with code 1, the tag likely doesn't exist for that repo. Verify:
gh api repos/{owner}/{repo}/git/ref/tags/{tag}