chore(ci): pin every action reference to a published release tag - #217
chore(ci): pin every action reference to a published release tag#217memosr wants to merge 2 commits into
Conversation
|
Worth noting this aligns with StepSecurity, which the repo already runs: pinning actions to full-length commit SHAs is one of its core recommendations. ci.yml was the only workflow not yet following it. |
|
Independently verified all three SHAs against each tag ref via the GitHub API — all match:
On the toolchain version gap: I'd lean toward resolving it in this PR rather than a follow-up. Aligning both files to v1.17.0 is two characters changed in |
|
Good call, folded it in rather than deferring. While in that file I also repinned Audited the remaining pins in that file as well, all resolve cleanly to published tags. Nothing else was stale. |
|
Verified the updated branch end-to-end. Every New / changed pins (this PR)
Pre-existing pins in
On the old No unpinned |
Summary
Every
uses:reference in the repo now pins to a full-length commit SHA that resolves to a published release tag.Two parts:
ci.ymlwas the only workflow with unpinned references. 11uses:lines across 3 actions are now SHA-pinned.release-binaries.yamlhad two stale pins, refreshed here rather than deferred, per review feedback.ci.yml
11
uses:lines across 3 actions:actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659(v1.17.0)foundry-rs/foundry-toolchain@b00af27efadbc7b4ca8b82abbd903b17cc874d2a(v1.9.0)taiki-e/install-action@7572810d7dd469b651bb7793945692cf78da5dd7(v2.85.0)release-binaries.yaml
actions-rust-lang/setup-rust-toolchain: v1.15.4 (150fca88) to v1.17.0 (166cdcfd), now byte-identical to the pin inci.yml. This closes the gap where the release job installed its toolchain through a different action version than the one CI validated against.taiki-e/install-action:a661f9d0to v2.85.0 (7572810d). The old SHA carries no tag, is not an ancestor of the action's default branch, and dates to 2025-07-01, so the sccache install step was pinned to a point that could not be traced back to any release.Verification
gh api repos/<owner>/<repo>/git/ref/tags/<tag>, dereferencing annotated tags where present, then independently re-fetched withgh api repos/<owner>/<repo>/commits/<sha>, which echoed back the same SHA. Nothing was hand-written.grep -E 'uses: .*@(v[0-9]|main|master)' .github/workflows/*.ymlreturns no matches.release-binaries.yaml:actions/checkoutv6.0.3,actions/github-scriptv9.0.0,actions/upload-artifactv7.0.1,actions/download-artifactv8.0.1 andcrazy-max/ghaction-import-gpgv7.0.0 all resolve cleanly to published tags. No other stale pin.actionlinton both files reports no new findings.Scope
uses:lines only, across two files. No indentation, ordering, orwith:block changes.Worth watching after merge:
install-actionmoves roughly 13 months. The release job will not exercise it until the next tag build.