Skip to content

fix(ci): pin third-party actions to full commit SHAs - #47

Merged
hyperpolymath merged 1 commit into
mainfrom
fix/sha-pin-actions
Sep 19, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
fix/sha-pin-actions

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

fix(ci): pin third-party actions to full commit SHAs

The account's Actions policy requires a full-length SHA ref. A tag or branch ref is refused at
startup — startup_failure, no jobs, "this workflow graph cannot be shown" — so these workflows
could not run at all. This resolves each ref to the commit it currently points at and records the
ref in a trailing comment, e.g. actions/checkout@<sha> # v4.

dtolnay/rust-toolchain takes its toolchain from the ref itself, so those steps also gained an
explicit with: toolchain: input; without it, a SHA ref would silently lose the channel.

No behaviour is intended to change beyond the pins.

The account's Actions policy requires a full-length SHA ref. A tag or branch ref is refused at
startup — `startup_failure`, no jobs, "this workflow graph cannot be shown" — so these workflows
could not run at all. This resolves each ref to the commit it currently points at and records the
ref in a trailing comment, e.g. `actions/checkout@<sha> # v4`.

`dtolnay/rust-toolchain` takes its toolchain from the ref itself, so those steps also gained an
explicit `with: toolchain:` input; without it, a SHA ref would silently lose the channel.

No behaviour is intended to change beyond the pins.
@coderabbitai

coderabbitai Bot commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 2f623413-491d-44c3-9e17-2c3a9cf37650

📥 Commits

Reviewing files that changed from the base of the PR and between c1a3488 and 163e8da.

📒 Files selected for processing (2)
  • .github/workflows/anchor-drift.yml
  • gleam/.github/workflows/test.yml

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: Analyze (rust)
  • GitHub Check: Analyze (ruby)
⚠️ CI failures not shown inline (8)

GitHub Actions: Anchor Drift / 0_membership-integrity.txt: fix(ci): pin third-party actions to full commit SHAs

Conclusion: failure

View job details

##[group]Run scripts/check-membership.sh
 �[36;1mscripts/check-membership.sh�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 membership error: .gitmodules members/implementations/k9-rs url is '', expected 'https://github.com/hyperpolymath/k9-rs.git'
 membership error: .gitmodules members/implementations/k9-rs branch is '', expected 'main'
 membership error: members/implementations/k9-rs is not a pinned submodule gitlink
 membership error: .gitmodules members/implementations/k9_ex url is '', expected 'https://github.com/hyperpolymath/k9_ex.git'
 membership error: .gitmodules members/implementations/k9_ex branch is '', expected 'main'
 membership error: members/implementations/k9_ex is not a pinned submodule gitlink
 membership error: .gitmodules members/implementations/k9_gleam url is '', expected 'https://github.com/hyperpolymath/k9_gleam.git'
 membership error: .gitmodules members/implementations/k9_gleam branch is '', expected 'main'
 membership error: members/implementations/k9_gleam is not a pinned submodule gitlink
 membership error: .gitmodules members/implementations/k9-deno url is '', expected 'https://github.com/hyperpolymath/k9-deno.git'
 membership error: .gitmodules members/implementations/k9-deno branch is '', expected 'main'
 membership error: members/implementations/k9-deno is not a pinned submodule gitlink
 membership error: .gitmodules members/implementations/k9-haskell url is '', expected 'https://github.com/hyperpolymath/k9-haskell.git'
 membership error: .gitmodules members/implementations/k9-haskell branch is '', expected 'main'
 membership error: members/implementations/k9-haskell is not a pinned submodule gitlink
 membership error: .gitmodules members/tooling/tree-sitter-k9 url is '', expected 'https://github.com/hyperpolymath/tree-sitter-k9.git'
 membership error: .gitmodules members/tooling/tree-sitter-k9 branch is '', expected 'main'
 membership error: members/tooling/tree-sitter-k9 is not a pinned submodule gitlink
 membership error: .g...

GitHub Actions: Anchor Drift / membership-integrity: fix(ci): pin third-party actions to full commit SHAs

Conclusion: failure

View job details

##[group]Run scripts/check-membership.sh
 �[36;1mscripts/check-membership.sh�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 membership error: .gitmodules members/implementations/k9-rs url is '', expected 'https://github.com/hyperpolymath/k9-rs.git'
 membership error: .gitmodules members/implementations/k9-rs branch is '', expected 'main'
 membership error: members/implementations/k9-rs is not a pinned submodule gitlink
 membership error: .gitmodules members/implementations/k9_ex url is '', expected 'https://github.com/hyperpolymath/k9_ex.git'
 membership error: .gitmodules members/implementations/k9_ex branch is '', expected 'main'
 membership error: members/implementations/k9_ex is not a pinned submodule gitlink
 membership error: .gitmodules members/implementations/k9_gleam url is '', expected 'https://github.com/hyperpolymath/k9_gleam.git'
 membership error: .gitmodules members/implementations/k9_gleam branch is '', expected 'main'
 membership error: members/implementations/k9_gleam is not a pinned submodule gitlink
 membership error: .gitmodules members/implementations/k9-deno url is '', expected 'https://github.com/hyperpolymath/k9-deno.git'
 membership error: .gitmodules members/implementations/k9-deno branch is '', expected 'main'
 membership error: members/implementations/k9-deno is not a pinned submodule gitlink
 membership error: .gitmodules members/implementations/k9-haskell url is '', expected 'https://github.com/hyperpolymath/k9-haskell.git'
 membership error: .gitmodules members/implementations/k9-haskell branch is '', expected 'main'
 membership error: members/implementations/k9-haskell is not a pinned submodule gitlink
 membership error: .gitmodules members/tooling/tree-sitter-k9 url is '', expected 'https://github.com/hyperpolymath/tree-sitter-k9.git'
 membership error: .gitmodules members/tooling/tree-sitter-k9 branch is '', expected 'main'
 membership error: members/tooling/tree-sitter-k9 is not a pinned submodule gitlink
 membership error: .g...

GitHub Actions: Anchor Drift / membership-integrity: fix(ci): pin third-party actions to full commit SHAs

Conclusion: failure

View job details

Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
 Post job cleanup.
 [command]/usr/bin/git version
 git version 2.55.0
 Temporarily overriding HOME='/home/runner/work/_temp/f16123f4-b4c9-46b7-bf57-fcd2119f5fc5' before making global git config changes
 Adding repository directory to the temporary git global config as a safe directory
 [command]/usr/bin/git config --global --add safe.directory /home/runner/work/k9-ecosystem/k9-ecosystem
 [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
 [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
 fatal: No url found for submodule path 'members/ci/k9-pre-commit' in .gitmodules
 ##[warning]The process '/usr/bin/git' failed with exit code 128

GitHub Actions: Anchor Drift / 1_governance-validation.txt: fix(ci): pin third-party actions to full commit SHAs

Conclusion: failure

View job details

##[group]A2ML Manifest Validation
 Scanning . for .a2ml files...
 ##[notice]Skipped 1 file(s) matching paths-ignore
 Found 754 .a2ml file(s)
   Validating: ./.machine_readable/anchors/ANCHOR.a2ml
   Validating: ./.machine_readable/descriptiles/AGENTIC.a2ml
   Validating: ./.machine_readable/descriptiles/ECOSYSTEM.a2ml
   Validating: ./.machine_readable/descriptiles/META.a2ml
   Validating: ./.machine_readable/descriptiles/NEUROSYM.a2ml
   Validating: ./.machine_readable/descriptiles/PLAYBOOK.a2ml
   Validating: ./.machine_readable/descriptiles/STATE.a2ml
   Validating: ./0-AI-MANIFEST.a2ml
   Validating: ./deno/.github/0.1-AI-MANIFEST.a2ml
 ##[error]Missing SPDX-License-Identifier in first 10 lines

GitHub Actions: Anchor Drift / governance-validation: fix(ci): pin third-party actions to full commit SHAs

Conclusion: failure

View job details

##[group]A2ML Manifest Validation
 Scanning . for .a2ml files...
 ##[notice]Skipped 1 file(s) matching paths-ignore
 Found 754 .a2ml file(s)
   Validating: ./.machine_readable/anchors/ANCHOR.a2ml
   Validating: ./.machine_readable/descriptiles/AGENTIC.a2ml
   Validating: ./.machine_readable/descriptiles/ECOSYSTEM.a2ml
   Validating: ./.machine_readable/descriptiles/META.a2ml
   Validating: ./.machine_readable/descriptiles/NEUROSYM.a2ml
   Validating: ./.machine_readable/descriptiles/PLAYBOOK.a2ml
   Validating: ./.machine_readable/descriptiles/STATE.a2ml
   Validating: ./0-AI-MANIFEST.a2ml
   Validating: ./deno/.github/0.1-AI-MANIFEST.a2ml
 ##[error]Missing SPDX-License-Identifier in first 10 lines

GitHub Actions: Anchor Drift / governance-validation: fix(ci): pin third-party actions to full commit SHAs

Conclusion: failure

View job details

Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
 Post job cleanup.
 [command]/usr/bin/git version
 git version 2.55.0
 Temporarily overriding HOME='/home/runner/work/_temp/d6044dd9-0dbf-4a78-a2df-c5376a7daff1' before making global git config changes
 Adding repository directory to the temporary git global config as a safe directory
 [command]/usr/bin/git config --global --add safe.directory /home/runner/work/k9-ecosystem/k9-ecosystem
 [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
 [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
 fatal: No url found for submodule path 'members/ci/k9-pre-commit' in .gitmodules
 ##[warning]The process '/usr/bin/git' failed with exit code 128

GitHub Actions: Anchor Drift / 2_upstream-pins.txt: fix(ci): pin third-party actions to full commit SHAs

Conclusion: failure

View job details

Current runner version: '2.337.0'
 ##[group]Runner Image Provisioner
 Hosted Compute Agent
 Version: 20260828.587
 Commit: abac92662cab4cc7352de4f9f9d2e2419aad9c29
 Build Date:
 Worker ID: {5390f901-91a7-4974-a9af-3430c0f19840}
 Azure Region: westcentralus
 ##[endgroup]
 ##[group]Operating System
 Ubuntu
 24.04.5
 LTS
 ##[endgroup]
 ##[group]Runner Image
 Image: ubuntu-24.04
 Version: 20260907.300.1
 Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260907.300/images/ubuntu/Ubuntu2404-Readme.md
 Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260907.300
 ##[endgroup]
 ##[group]GITHUB_TOKEN Permissions
 Contents: read
 Metadata: read
 ##[endgroup]
 Secret source: Actions
 Cache mode: write
 Prepare workflow directory
 Prepare all required actions
 Getting action download info
 Download action repository 'actions/checkout@11d5960a326750d5838078e36cf38b85af677262' (SHA:11d5960a326750d5838078e36cf38b85af677262)
 Complete job name: upstream-pins
 Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
 ##[group]Run actions/checkout@11d5960a326750d5838078e36cf38b85af677262
 with:
   repository: hyperpolymath/k9-ecosystem
   ***REDACTED_SECRET_ASSIGNMENT***
   ssh-strict: true
   ssh-user: git
   persist-credentials: true
   clean: true
   sparse-checkout-cone-mode: true
   fetch-depth: 1
   fetch-tags: false
   show-progress: true
   lfs: false
   submodules: false
   set-safe-directory: true
   allow-unsafe-pr-checkout: false
 ##[endgroup]
 Syncing repository: hyperpolymath/k9-ecosystem
 ##[group]Getting Git version info
 Working directory is '/home/runner/work/k9-ecosystem/k9-ecosystem'
 [command]/usr/bin/git version
 git version 2.55.0
 ##[endgroup]...

GitHub Actions: Anchor Drift / upstream-pins: fix(ci): pin third-party actions to full commit SHAs

Conclusion: failure

View job details

Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
 Post job cleanup.
 [command]/usr/bin/git version
 git version 2.55.0
 Temporarily overriding HOME='/home/runner/work/_temp/b8732763-403c-4d2c-a01a-43b0d089f637' before making global git config changes
 Adding repository directory to the temporary git global config as a safe directory
 [command]/usr/bin/git config --global --add safe.directory /home/runner/work/k9-ecosystem/k9-ecosystem
 [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
 [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
 fatal: No url found for submodule path 'members/ci/k9-pre-commit' in .gitmodules
 ##[warning]The process '/usr/bin/git' failed with exit code 128
🔇 Additional comments (2)
.github/workflows/anchor-drift.yml (1)

23-23: LGTM!

Also applies to: 53-53, 70-70

gleam/.github/workflows/test.yml (1)

16-16: LGTM!


📝 Summary

Summary by CodeRabbit

  • Chores
    • Updated automation workflows to use fixed, immutable versions of their supporting actions.
    • Improved the consistency and security of automated testing, validation, and integrity checks without changing their behaviour.

Walkthrough

The workflows now pin actions/checkout and erlef/setup-beam to immutable commit SHAs. Version comments identify the tracked action versions.

Changes

Workflow action pinning

Layer / File(s) Summary
Pin workflow actions
.github/workflows/anchor-drift.yml, gleam/.github/workflows/test.yml
The workflows replace mutable action tags with specific commit SHAs. Version comments retain the tracked v4 and v1 references.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Bug fix

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: pinning third-party CI actions to full commit SHAs.
Description check ✅ Passed The description directly explains the SHA pinning, the Actions policy requirement, the retained version comments, and the intended behaviour preservation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Commit to this branch
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks each workflow line
Immutable pins now hold the sign
Checkout stays on version four
Beam keeps version one secure
No drifting tags cross the door

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath merged commit 6dde9fb into main Sep 19, 2026
12 of 14 checks passed
@hyperpolymath
hyperpolymath deleted the fix/sha-pin-actions branch September 19, 2026 22:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant