Pin setup-node, upload-artifact and download-artifact to commit SHAs - #178
Merged
Conversation
deploy-native.yml pinned actions/checkout and docker/setup-buildx-action
but let actions/{setup-node,upload-artifact,download-artifact} float on
their mutable v4 major tag — in the build job that produces the binary
the ship job installs on the deploy host (#85). Pin all three to the
commit their v4 tag resolves to today, so the change is
behavior-preserving, with the readable version recorded in a trailing
comment per the file's existing convention:
- actions/setup-node 49933ea5288caeca8642d1e84afbd3f7d6820020 (v4.4.0)
- actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 (v4.6.2)
- actions/download-artifact d3f86a106a0bac45b974a628896c90dbdf5c8093 (v4.3.0)
Each SHA was resolved from the upstream repository's tags (git
ls-remote) and cross-checked: the floating v4 tag and the versioned
release tag name the same commit, and all three are lightweight tags,
so the SHAs are commit ids, not tag objects.
health.yml postdates #85 and floated setup-node the same way; pin it to
the same commit so the convention holds repository-wide. The remaining
workflows were already pinned (imcp2-local-release.yml is
dist-generated and pins its own SHAs) or use only local reusable
workflows.
Also rewrite the comment above the build job's first step, which named
the three unpinned actions; that sentence is no longer true.
Closes #85.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TUbJLPK174H3NRkSouQizP
sea-snake
approved these changes
Sep 1, 2026
There was a problem hiding this comment.
Pull request overview
Pins remaining mutable GitHub Actions references to immutable commit SHAs for supply-chain hardening.
Changes:
- Pins setup-node, upload-artifact, and download-artifact.
- Updates the deployment workflow’s pinning comment.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
.github/workflows/deploy-native.yml |
Pins deployment actions to verified SHAs. |
.github/workflows/health.yml |
Pins setup-node to a verified SHA. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
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.
Summary
Executes #85: the three actions that still floated on their mutable
v4major tag indeploy-native.yml— all in thebuildjob that produces the binary theshipjob installs on the deploy host — are now pinned to full commit SHAs, with the readable version in a trailing comment per the file's existing convention.health.ymlpostdates the issue and floatedactions/setup-node@v4the same way, so it gets the same pin, making the convention hold repository-wide.The pins are behavior-preserving: each SHA is the commit the floating
v4tag resolves to today, so the workflows run exactly the code they ran on their last tick — just no longer subject to tag movement.Related issues
Closes #85.
Changes
.github/workflows/deploy-native.yml— pinactions/setup-node→49933ea5288caeca8642d1e84afbd3f7d6820020(v4.4.0),actions/upload-artifact→ea165f8d65b6e75b540449e92b4886f43607fa02(v4.6.2),actions/download-artifact→d3f86a106a0bac45b974a628896c90dbdf5c8093(v4.3.0); rewrite the comment above the build job's first step, which named these three as unpinned..github/workflows/health.yml— pinactions/setup-nodeto the same commit.Checked in the same pass, per the issue:
ci.ymlandpublish-crate.ymlwere already fully pinned;imcp2-local-release.ymlis dist-generated and already pins its own SHAs (left to its generator);deploy.yml/deploy-release.ymluse only the local reusable workflow. No floating third-party ref remains in.github/workflows/.How the SHAs were resolved and confirmed, per the issue's ask: each was read from the upstream repository's tags with
git ls-remoteand cross-checked two ways — the floatingv4tag and the versioned release tag name the same commit, and all three tags are lightweight (no peeled^{}entry), so each SHA is a commit id rather than an annotated-tag object (a tag-object SHA would fail atuses:resolution).The issue's "alternatives" section notes Dependabot for
github-actionsas a complementary follow-up to keep pins current; deliberately not included here to keep this the minimal pinning change.Testing
python3 -c "yaml.safe_load(...)"); diff is exactly the fouruses:lines plus the comment rewrite.uses:is a 40-hex-char SHA or a local./workflow reference.cargo build --locked --all-targets— not applicable (no Rust change).cargo test --locked --all-targets— not applicable (no Rust change).npm test --prefix monitoring/mcp-status— not applicable (dashboard unchanged).Checklist
🤖 Generated with Claude Code
https://claude.ai/code/session_01TUbJLPK174H3NRkSouQizP
Generated by Claude Code