ultraworkers / ultraworkers/claw-code

Pin all third-party GitHub Actions to immutable commit SHAs across CI workflows

Open
#3,287 6 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
195k
Forks
108k
PR merge metrics
No merged PRs in 30d

Description

Description

ultraworkers/claw-code has no explicit policy requiring SHA pinning for third-party GitHub Actions. The three workflows in .github/workflows/ (release.yml, rust-ci.yml, rust.yml) reference actions by floating tags:

  • actions/checkout@v4
  • actions/setup-python@v5
  • actions/upload-artifact@v4
  • softprops/action-gh-release@v2
  • Swatinem/rust-cache@v2

GitHub's security hardening guide for Actions recommends pinning third-party actions to a full-length commit SHA to defend against a compromised or malicious tag — a tag is mutable, a SHA is immutable. Sister projects in the same space (topgrade-rs/topgrade, devswha/gajae-code) already enforce this.

This repo is too small to need a separate hardening ticket for every workflow. Filing one issue to cover all three.

Risk

  • Tag-mutation attack: a compromised upstream maintainer (or someone who steals their npm token) re-points @v4 to a malicious commit. Consumers running @v4 get pwned on the next workflow run.
  • Audit trail: pinning to SHA means the workflow content reflects exactly what you reviewed at that moment — important for supply-chain attestations.

Proposed solution

Convert every floating tag to SHA + comment in the three workflows. Suggested SHA picks (latest v4/v5 release as of 2026-08-10):

  • actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 (or pin to v4.4.0)
  • actions/setup-python@... (full SHA for the v5 release)
  • actions/upload-artifact@... (full SHA for the v4 release)
  • softprops/action-gh-release@... (full SHA for the v2 release)
  • Swatinem/rust-cache@... (full SHA for the v2 release)

I'll file a separate PR with the SHA-pinned versions once this issue has a maintainer ack. PR will use the "anti-slop" resolution gate from .github/PULL_REQUEST_TEMPLATE.md: this issue is the linked evidence.

Alternatives considered

  • Renovate config to auto-pin: heavier change; not justified for 3 workflows. Re-evaluate if the project adds more workflows.
  • Dependabot monthly (as CatoTH/antragsgruen does): Dependabot does offer action-version PRs but doesn't pin to SHA by default — same gap.

Environment

  • claw-code current state: 3 workflow files using @vN refs
  • This is a triage-only report — no remote state was modified to write it.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing .github/workflows/release.yml, rust-ci.yml, and rust.yml, then check .github/PULL_REQUEST_TEMPLATE.md for the stated resolution gate. Replace each listed third-party action reference with a verified full commit SHA and version comment; done means all three workflows use immutable pins and remain valid.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions
Domain
ci-cd, security
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.