ci: pin workflow dependencies to immutable refs - #156
Open
sweidinger wants to merge 1 commit into
Open
Conversation
Every third-party reference in .github/workflows resolved through a mutable pointer: `@v7` on the actions, `@latest` on the ThreatCrush install, and a bare `git+https://...` for vu1nz that takes whatever HEAD is at the moment the job runs. A tag is just a ref its owner can repoint, so all three mean the workflows can execute code nobody here reviewed, with no diff to show for it. That matters most on the two security workflows, which run with ANTHROPIC_API_KEY and a repo token in scope. Each reference now names a commit, with the human-readable version kept in a trailing comment so Dependabot rewrites both halves together. checkout in vu1nz-scan.yml moves v4 -> v7 to match the other two files; that step passes no inputs, so the bump is the version number and nothing else. The pins are not an endorsement of the pinned code -- they only guarantee that a change upstream arrives as a visible diff rather than a silent swap. ThreatCrush pins to 0.11.2, currently also its `latest`; the existing `--format` probe stays and now guards a bad bump instead of a surprise release. vu1nz-scan.yml loses its sh1pt fleet header for the same reason threatcrush-scan.yml already did: the file is no longer byte-identical to the pack, so the pack's content hash no longer describes it, and a stale hash that nothing verifies is worse than no hash at all. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
sweidinger
force-pushed
the
chore/pin-workflow-actions
branch
from
August 16, 2026 09:22
c564496 to
3c4c5fc
Compare
7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Every third-party reference in
.github/workflowsresolved through a mutable pointer:@v7on the actions,@lateston the ThreatCrush install, and a baregit+https://…for vu1nz that installs whateverHEADis at the moment the job runs. A tag is a ref its owner can repoint at any commit, so all three mean these workflows can execute code nobody here reviewed, with no diff to show for it. That matters most on the two security workflows, which run withANTHROPIC_API_KEYand a repo token in scope — the job that is supposed to catch a supply-chain problem was itself the softest way in.Each reference now names a commit, with the human-readable version in a trailing comment so Dependabot rewrites both halves together. The pins are not an endorsement of the pinned code — they only guarantee a change upstream arrives as a visible diff rather than a silent swap.
actions/checkout3d3c42e5…(v7)actions/setup-node82076278…(v7)actions/setup-pythona26af69b…(v5)actions/upload-artifactea165f8d…(v4)actions/github-scriptf28e40c7…(v7)github/codeql-actionf3712979…(v3)@profullstack/threatcrush0.11.2vu1nz-gh-actionsa6055f69…Each of the six action SHAs was checked against the major tag its comment claims, by dereferencing
refs/tags/<v>upstream. ThreatCrush pins to0.11.2, currently also itslatest; the existing--formatprobe stays and now guards a bad bump instead of a surprise release.Two things that are not pure mechanism, called out so they are not missed in the diff:
checkoutmovesv4→v7invu1nz-scan.yml, to matchci.ymlandthreatcrush-scan.yml. That step passes no inputs, so the bump is the version number and nothing else.vu1nz-scan.ymlloses its sh1pt fleet header, the same waythreatcrush-scan.ymlalready had. The file is no longer byte-identical to the pack, so the pack's content hash no longer describes it, and a stale hash that nothing verifies is worse than no hash at all.coinpay.ymlhas the same unpinned-action problem but raises a separate question — whether the workflow should exist at all — so it is split out into its own PR rather than decided here. This PR is independent of it and can merge on its own.Checklist
npm run typecheckis cleannpm testpasses (45 files, 311 tests)HELP_GROUPSandfooterHintsinsrc/ui/keymap.ts— n/aStorefield, I updatedmakeStoreinscripts/render-previews-impl.tsx— n/a