From 11f10967bd93713cd01be7aef5476e55293b613e Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Mon, 3 Aug 2026 19:44:38 +0100 Subject: [PATCH] ci: restore inline SHA pins over the lockfile (estate doctrine fixpoint) Rebuilt on current main (post-#570). Restores all inline SHA pins, re-keys actions.lock to SHA form via scripts/relock-sha-keys.py (digest-matched, subpath-aware; run after every gh actions-lock regeneration), aligns two mislabeled erlef/setup-beam pins to the real v1.24.1 SHA, and keeps the $/ local-action migration and managed-by markers. gh actions-lock --no-fix: valid, zero errors. Co-Authored-By: Claude Fable 5 --- .github/workflows/actions.lock | 152 +++++++++--------- .github/workflows/affinescript-verify.yml | 6 +- .github/workflows/boj-build.yml | 4 +- .github/workflows/casket-pages.yml | 14 +- .github/workflows/changelog-reusable.yml | 4 +- .github/workflows/codeql-reusable.yml | 6 +- .github/workflows/deno-ci-reusable.yml | 4 +- .github/workflows/doc-format.yml | 2 +- .github/workflows/dyadt-verify.yml | 2 +- .github/workflows/echidna-verify.yml | 16 +- .github/workflows/elixir-ci-reusable.yml | 10 +- .github/workflows/governance-reusable.yml | 46 +++--- .github/workflows/hypatia-scan-reusable.yml | 10 +- .github/workflows/instant-sync.yml | 2 +- .../workflows/launcher-standard-lockstep.yml | 2 +- .github/workflows/makefile-blocker.yml | 2 +- .github/workflows/mirror-reusable.yml | 28 ++-- .github/workflows/no-js-scan.yml | 2 +- .github/workflows/pages.yml | 8 +- .github/workflows/readme-derive-reusable.yml | 2 +- .github/workflows/registry-verify.yml | 2 +- .github/workflows/rust-ci-reusable.yml | 22 +-- .github/workflows/scorecard-enforcer.yml | 10 +- .github/workflows/scorecard-reusable.yml | 6 +- .github/workflows/secret-scanner-reusable.yml | 6 +- .github/workflows/self-test.yml | 2 +- .github/workflows/signed-push-smoke.yml | 2 +- .github/workflows/spark-theatre-gate.yml | 2 +- .machine_readable/REGISTRY.a2ml | 2 +- scripts/relock-sha-keys.py | 58 +++++++ 30 files changed, 246 insertions(+), 188 deletions(-) create mode 100644 scripts/relock-sha-keys.py diff --git a/.github/workflows/actions.lock b/.github/workflows/actions.lock index e461e1cb..f74064c3 100644 --- a/.github/workflows/actions.lock +++ b/.github/workflows/actions.lock @@ -4,104 +4,104 @@ version: 'v0.0.2' workflows: '.github/workflows/affinescript-verify.yml': - - 'actions/checkout@v7.0.1' - - 'ocaml/setup-ocaml@v3.7.0' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'ocaml/setup-ocaml@15d660006c1d3110d77c34b7faa3bddefe8b82f0' '.github/workflows/boj-build.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/casket-pages.yml': - - 'actions/cache@v6.1.0' - - 'actions/checkout@v7.0.1' - - 'actions/configure-pages@v6.0.0' - - 'actions/deploy-pages@v5.0.0' - - 'actions/upload-pages-artifact@v5.0.0' - - 'haskell-actions/setup@v2.11.0' + - 'actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d' + - 'actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128' + - 'actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9' + - 'haskell-actions/setup@cd0d9bdd65b20557f41bea4dbe43d0b5fbbfe553' '.github/workflows/changelog-reusable.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/codeql-reusable.yml': - - 'actions/checkout@v7.0.1' - - 'github/codeql-action@v4.37.4' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'github/codeql-action@f205ea1c3313d32999d8d6a48b4f6530d4437b38' '.github/workflows/deno-ci-reusable.yml': - - 'actions/checkout@v7.0.1' - - 'denoland/setup-deno@v2.0.5' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'denoland/setup-deno@22d081ff2d3a40755e97629de92e3bcbfa7cf2ed' '.github/workflows/doc-format.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/dyadt-verify.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/echidna-verify.yml': - - 'actions/cache@v6.1.0' - - 'actions/checkout@v7.0.1' - - 'actions/upload-artifact@v7.0.1' + - 'actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' '.github/workflows/elixir-ci-reusable.yml': - - 'actions/cache@v6.1.0' - - 'actions/checkout@v7.0.1' - - 'erlef/setup-beam@v1.24.1' + - 'actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124' '.github/workflows/governance-reusable.yml': - - 'actions/cache@v6.1.0' - - 'actions/checkout@v7.0.1' - - 'denoland/setup-deno@v2.0.5' - - 'editorconfig-checker/action-editorconfig-checker@v2.2.0' - - 'erlef/setup-beam@v1.24.1' + - 'actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'denoland/setup-deno@22d081ff2d3a40755e97629de92e3bcbfa7cf2ed' + - 'editorconfig-checker/action-editorconfig-checker@840e866d93b8e032123c23bac69dece044d4d84c' + - 'erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124' '.github/workflows/hypatia-scan-reusable.yml': - - 'actions/cache@v6.1.0' - - 'actions/checkout@v7.0.1' - - 'actions/upload-artifact@v7.0.1' - - 'erlef/setup-beam@v1.24.1' - - 'github/codeql-action@v4.37.4' + - 'actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' + - 'erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124' + - 'github/codeql-action@f205ea1c3313d32999d8d6a48b4f6530d4437b38' '.github/workflows/instant-sync.yml': - - 'peter-evans/repository-dispatch@v4.0.1' + - 'peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697' '.github/workflows/launcher-standard-lockstep.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/makefile-blocker.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/mirror-reusable.yml': - - 'actions/checkout@v7.0.1' - - 'dtolnay/rust-toolchain@master' - - 'webfactory/ssh-agent@v0.10.0' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c' + - 'webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555' '.github/workflows/no-js-scan.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/pages.yml': - - 'actions/checkout@v7.0.1' - - 'actions/deploy-pages@v5.0.0' - - 'actions/upload-pages-artifact@v5.0.0' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128' + - 'actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9' '.github/workflows/readme-derive-reusable.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/registry-verify.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/rust-ci-reusable.yml': - - 'actions/checkout@v7.0.1' - - 'dtolnay/rust-toolchain@master' - - 'swatinem/rust-cache@v2.9.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c' + - 'swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4' '.github/workflows/scorecard-enforcer.yml': - - 'actions/checkout@v7.0.1' - - 'actions/download-artifact@v8.0.1' - - 'actions/upload-artifact@v7.0.1' - - 'ossf/scorecard-action@v2.4.4' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c' + - 'actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' + - 'ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc' '.github/workflows/scorecard-reusable.yml': - - 'actions/checkout@v7.0.1' - - 'actions/upload-artifact@v7.0.1' - - 'ossf/scorecard-action@v2.4.4' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' + - 'actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' + - 'ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc' '.github/workflows/secret-scanner-reusable.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/self-test.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' '.github/workflows/signed-push-smoke.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' - 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' - 'asana/push-signed-commits@d615ca88d8e1a946734c24970d1e7a6c56f34897' '.github/workflows/spark-theatre-gate.yml': - - 'actions/checkout@v7.0.1' + - 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' dependencies: - 'actions/cache@v6.1.0': + 'actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9': ref: 'v6.1.0' commit: 'sha1-55cc8345863c7cc4c66a329aec7e433d2d1c52a9' owner_id: 44036562 repo_id: 215566462 - 'actions/checkout@v7.0.1': + 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1': ref: 'v7.0.1' commit: 'sha1-3d3c42e5aac5ba805825da76410c181273ba90b1' owner_id: 44036562 repo_id: 197814629 - 'actions/configure-pages@v6.0.0': + 'actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d': ref: 'v6.0.0' commit: 'sha1-45bfe0192ca1faeb007ade9deae92b16b8254a0d' owner_id: 44036562 @@ -111,12 +111,12 @@ dependencies: commit: 'sha1-bcd2ba49218906704ab6c1aa796996da409d3eb1' owner_id: 44036562 repo_id: 642580244 - 'actions/deploy-pages@v5.0.0': + 'actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128': ref: 'v5.0.0' commit: 'sha1-cd2ce8fcbc39b97be8ca5fce6e763baed58fa128' owner_id: 44036562 repo_id: 438112499 - 'actions/download-artifact@v8.0.1': + 'actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c': ref: 'v8.0.1' commit: 'sha1-3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c' owner_id: 44036562 @@ -131,12 +131,12 @@ dependencies: commit: 'sha1-bbbca2ddaa5d8feaa63e36b76fdaad77386f024f' owner_id: 44036562 repo_id: 192625955 - 'actions/upload-artifact@v7.0.1': + 'actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a': ref: 'v7.0.1' commit: 'sha1-043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' owner_id: 44036562 repo_id: 192625955 - 'actions/upload-pages-artifact@v5.0.0': + 'actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9': ref: 'v5.0.0' commit: 'sha1-fc324d3547104276b827a68afc52ff2a11cc49c9' owner_id: 44036562 @@ -150,57 +150,57 @@ dependencies: repo_id: 772313726 uses: - 'actions/setup-python@v2' - 'denoland/setup-deno@v2.0.5': + 'denoland/setup-deno@22d081ff2d3a40755e97629de92e3bcbfa7cf2ed': ref: 'v2.0.5' commit: 'sha1-22d081ff2d3a40755e97629de92e3bcbfa7cf2ed' owner_id: 42048915 repo_id: 356423100 - 'dtolnay/rust-toolchain@master': + 'dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c': ref: 'master' commit: 'sha1-2c7215f132e9ebf062739d9130488b56d53c060c' owner_id: 1940490 repo_id: 260749683 - 'editorconfig-checker/action-editorconfig-checker@v2.2.0': + 'editorconfig-checker/action-editorconfig-checker@840e866d93b8e032123c23bac69dece044d4d84c': ref: 'v2.2.0' commit: 'sha1-840e866d93b8e032123c23bac69dece044d4d84c' owner_id: 26415196 repo_id: 297874902 - 'erlef/setup-beam@v1.24.1': + 'erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124': ref: 'v1.24.1' commit: 'sha1-54075bcc5e249e4758d363f27d099f55d843f124' owner_id: 47606891 repo_id: 331103973 - 'github/codeql-action@v4.37.4': + 'github/codeql-action@f205ea1c3313d32999d8d6a48b4f6530d4437b38': ref: 'v4.37.4' commit: 'sha1-f205ea1c3313d32999d8d6a48b4f6530d4437b38' owner_id: 9919 repo_id: 259445878 - 'haskell-actions/setup@v2.11.0': + 'haskell-actions/setup@cd0d9bdd65b20557f41bea4dbe43d0b5fbbfe553': ref: 'v2.11.0' commit: 'sha1-cd0d9bdd65b20557f41bea4dbe43d0b5fbbfe553' owner_id: 75048950 repo_id: 623796603 - 'ocaml/setup-ocaml@v3.7.0': + 'ocaml/setup-ocaml@15d660006c1d3110d77c34b7faa3bddefe8b82f0': ref: 'v3.7.0' commit: 'sha1-15d660006c1d3110d77c34b7faa3bddefe8b82f0' owner_id: 1841483 repo_id: 220799100 - 'ossf/scorecard-action@v2.4.4': + 'ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc': ref: 'v2.4.4' commit: 'sha1-2d1146689b8cda280b9bc96326124645441f03bc' owner_id: 67707773 repo_id: 421101922 - 'peter-evans/repository-dispatch@v4.0.1': + 'peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697': ref: 'v4.0.1' commit: 'sha1-28959ce8df70de7be546dd1250a005dd32156697' owner_id: 18365890 repo_id: 220359305 - 'swatinem/rust-cache@v2.9.1': + 'swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4': ref: 'v2.9.1' commit: 'sha1-c19371144df3bb44fab255c43d04cbc2ab54d1c4' owner_id: 580492 repo_id: 298565987 - 'webfactory/ssh-agent@v0.10.0': + 'webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555': ref: 'v0.10.0' commit: 'sha1-e83874834305fe9a4a2997156cb26c5de65a8555' owner_id: 135788 diff --git a/.github/workflows/affinescript-verify.yml b/.github/workflows/affinescript-verify.yml index 8346129b..e2b02960 100644 --- a/.github/workflows/affinescript-verify.yml +++ b/.github/workflows/affinescript-verify.yml @@ -53,7 +53,7 @@ jobs: contents: read steps: - name: Checkout standards - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 @@ -90,7 +90,7 @@ jobs: # advisory: compiler checkout is report-only until the port backlog # is cleared and BLOCKING flips to true. continue-on-error: true - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ env.COMPILER_REPO }} ref: ${{ env.COMPILER_REF }} @@ -101,7 +101,7 @@ jobs: # advisory: setup failures should surface as signal without blocking # unrelated standards changes while AffineScript verification matures. continue-on-error: true - uses: ocaml/setup-ocaml@v3.7.0 + uses: ocaml/setup-ocaml@15d660006c1d3110d77c34b7faa3bddefe8b82f0 # v3 with: ocaml-compiler: "5.1" diff --git a/.github/workflows/boj-build.yml b/.github/workflows/boj-build.yml index 5c928a24..d024b5e4 100644 --- a/.github/workflows/boj-build.yml +++ b/.github/workflows/boj-build.yml @@ -37,7 +37,7 @@ jobs: # when unconfigured. steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Trigger BoJ Server (Casket/ssg-mcp) env: @@ -72,7 +72,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: K9-SVC Validation run: | diff --git a/.github/workflows/casket-pages.yml b/.github/workflows/casket-pages.yml index 29526ed6..86725077 100644 --- a/.github/workflows/casket-pages.yml +++ b/.github/workflows/casket-pages.yml @@ -23,22 +23,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 - name: Checkout casket-ssg - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 with: repository: hyperpolymath/casket-ssg path: .casket-ssg - name: Setup GHCup - uses: haskell-actions/setup@v2.11.0 + uses: haskell-actions/setup@cd0d9bdd65b20557f41bea4dbe43d0b5fbbfe553 # v2.11.0 with: ghc-version: '9.8.2' cabal-version: '3.10' - name: Cache Cabal - uses: actions/cache@v6.1.0 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v4 with: path: | ~/.cabal/packages @@ -82,10 +82,10 @@ jobs: cd .casket-ssg && cabal run casket-ssg -- build ../site ../_site - name: Setup Pages - uses: actions/configure-pages@v6.0.0 + uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0 - name: Upload artifact - uses: actions/upload-pages-artifact@v5.0.0 + uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v3 with: path: '_site' @@ -99,4 +99,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v5.0.0 + uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0 diff --git a/.github/workflows/changelog-reusable.yml b/.github/workflows/changelog-reusable.yml index d4567a5b..047dc8ed 100644 --- a/.github/workflows/changelog-reusable.yml +++ b/.github/workflows/changelog-reusable.yml @@ -62,7 +62,7 @@ jobs: pull-requests: write steps: - name: Checkout caller repository (full history) - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.ref }} @@ -70,7 +70,7 @@ jobs: path: caller - name: Checkout standards (for canonical cliff.toml) - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/standards ref: main diff --git a/.github/workflows/codeql-reusable.yml b/.github/workflows/codeql-reusable.yml index 6fef1edb..c1a12fa8 100644 --- a/.github/workflows/codeql-reusable.yml +++ b/.github/workflows/codeql-reusable.yml @@ -88,15 +88,15 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Initialize CodeQL - uses: github/codeql-action/init@v4.37.4 + uses: github/codeql-action/init@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v3 with: languages: ${{ inputs.language }} build-mode: ${{ inputs.build-mode }} - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v4.37.4 + uses: github/codeql-action/analyze@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v3 with: category: "/language:${{ inputs.language }}" diff --git a/.github/workflows/deno-ci-reusable.yml b/.github/workflows/deno-ci-reusable.yml index f3514a54..1af572ef 100644 --- a/.github/workflows/deno-ci-reusable.yml +++ b/.github/workflows/deno-ci-reusable.yml @@ -59,12 +59,12 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.ref }} - - uses: denoland/setup-deno@v2.0.5 + - uses: denoland/setup-deno@22d081ff2d3a40755e97629de92e3bcbfa7cf2ed # v2.0.5 with: deno-version: ${{ inputs.deno-version }} diff --git a/.github/workflows/doc-format.yml b/.github/workflows/doc-format.yml index 024b6058..f85e7a06 100644 --- a/.github/workflows/doc-format.yml +++ b/.github/workflows/doc-format.yml @@ -27,7 +27,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 - name: Check for duplicate documentation formats run: | diff --git a/.github/workflows/dyadt-verify.yml b/.github/workflows/dyadt-verify.yml index ca7c5af2..9b7493ea 100644 --- a/.github/workflows/dyadt-verify.yml +++ b/.github/workflows/dyadt-verify.yml @@ -27,7 +27,7 @@ jobs: timeout-minutes: 10 steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 # need origin/main as the DYADT diff base diff --git a/.github/workflows/echidna-verify.yml b/.github/workflows/echidna-verify.yml index ddeffe12..eb6c6878 100644 --- a/.github/workflows/echidna-verify.yml +++ b/.github/workflows/echidna-verify.yml @@ -49,7 +49,7 @@ jobs: timeout-minutes: 20 steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: recursive @@ -78,7 +78,7 @@ jobs: - name: Upload log if: always() - uses: actions/upload-artifact@v7.0.1 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: agda-verify-log path: agda-verify.log @@ -90,12 +90,12 @@ jobs: timeout-minutes: 20 steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: recursive - name: Cache pack - uses: actions/cache@v6.1.0 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v4 with: path: | ~/.pack @@ -146,7 +146,7 @@ jobs: - name: Upload log if: always() - uses: actions/upload-artifact@v7.0.1 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: idris2-a2ml-log path: idris2-a2ml.log @@ -158,12 +158,12 @@ jobs: timeout-minutes: 20 steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: recursive - name: Cache pack - uses: actions/cache@v6.1.0 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v4 with: path: | ~/.pack @@ -213,7 +213,7 @@ jobs: - name: Upload log if: always() - uses: actions/upload-artifact@v7.0.1 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: idris2-avow-log path: idris2-avow.log diff --git a/.github/workflows/elixir-ci-reusable.yml b/.github/workflows/elixir-ci-reusable.yml index 03f2a558..037dd2c4 100644 --- a/.github/workflows/elixir-ci-reusable.yml +++ b/.github/workflows/elixir-ci-reusable.yml @@ -130,7 +130,7 @@ jobs: has_mix: ${{ steps.detect.outputs.has_mix }} steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.ref }} @@ -158,26 +158,26 @@ jobs: working-directory: ${{ inputs.working_directory }} steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.ref }} - name: Set up BEAM (OTP + Elixir) - uses: erlef/setup-beam@v1.24.1 + uses: erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124 # v1.24.1 with: otp-version: ${{ inputs.otp-version }} elixir-version: ${{ inputs.elixir-version }} rebar3-version: ${{ inputs.rebar3-version }} - name: Cache deps - uses: actions/cache@v6.1.0 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ${{ inputs.working_directory }}/deps key: deps-${{ inputs.elixir-version }}-${{ hashFiles(format('{0}/mix.lock', inputs.working_directory)) }} - name: Cache _build - uses: actions/cache@v6.1.0 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ${{ inputs.working_directory }}/_build key: build-${{ inputs.elixir-version }}-${{ hashFiles(format('{0}/mix.lock', inputs.working_directory)) }} diff --git a/.github/workflows/governance-reusable.yml b/.github/workflows/governance-reusable.yml index f3764cd2..9a405e76 100644 --- a/.github/workflows/governance-reusable.yml +++ b/.github/workflows/governance-reusable.yml @@ -25,7 +25,7 @@ jobs: has_baseline: ${{ steps.check.outputs.has_baseline }} steps: - name: Checkout caller repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Check baseline existence id: check @@ -67,13 +67,13 @@ jobs: contents: read steps: - name: Checkout caller repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.sha }} - name: Checkout standards for the allowlist gate - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/standards ref: main @@ -106,12 +106,12 @@ jobs: timeout-minutes: 15 steps: - name: Checkout caller repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - name: Setup Elixir for Hypatia scanner - uses: erlef/setup-beam@v1.24.1 + uses: erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124 # v1.24.1 with: elixir-version: '1.19.4' otp-version: '28.3' @@ -131,7 +131,7 @@ jobs: echo "Resolved hypatia HEAD: $sha" - name: Cache Hex/Mix and Scanner Build - uses: actions/cache@v6.1.0 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.mix @@ -164,7 +164,7 @@ jobs: # mirroring the language-policy job below. Pinned to main because # github.workflow_sha resolves to the *caller* repo's SHA (which would 404). - name: Check out standards for the baseline filter - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/standards ref: main @@ -230,7 +230,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} # Pin to the concrete event SHA (the PR merge commit on @@ -261,12 +261,12 @@ jobs: # version and the script version — acceptable since scripts here # are read-only governance checks. - name: Set up Deno - uses: denoland/setup-deno@v2.0.5 + uses: denoland/setup-deno@22d081ff2d3a40755e97629de92e3bcbfa7cf2ed # v2.0.5 with: deno-version: v2.x - name: Check out standards repo for shared scripts - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/standards ref: main @@ -575,7 +575,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} # Pin to the concrete event SHA (the PR merge commit on @@ -592,7 +592,7 @@ jobs: # scripts. Sparse-check-out standards' scripts/ to get # check-package-policy.sh, mirroring the baseline-filter job above. - name: Check out standards for the package-policy gate - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/standards ref: main @@ -618,7 +618,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} # Pin to the concrete event SHA (the PR merge commit on @@ -857,7 +857,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} # Pin to the concrete event SHA (the PR merge commit on @@ -886,14 +886,14 @@ jobs: continue-on-error: true # advisory: informational only; repos can opt into blocking locally - name: EditorConfig check - uses: editorconfig-checker/action-editorconfig-checker@v2.2.0 + uses: editorconfig-checker/action-editorconfig-checker@840e866d93b8e032123c23bac69dece044d4d84c # v2.2.0 # advisory: formatting hygiene is reported from the reusable estate # bundle; repos opt into blocking formatter checks locally when ready. continue-on-error: true # Sparse-check-out standards' scripts/ for the docs gate (a reusable # workflow only auto-checks-out its own YAML, not sibling scripts). - name: Check out standards for the docs gate - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/standards ref: main @@ -919,7 +919,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} # Pin to the concrete event SHA (the PR merge commit on @@ -985,7 +985,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} # Pin to the concrete event SHA (the PR merge commit on @@ -1028,7 +1028,7 @@ jobs: # files. An unresolvable `uses:` yields NO check run, so those repos look # green while the job never ran. This step closes that gap. - name: Checkout standards for the pin-existence gate - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/standards ref: main @@ -1062,7 +1062,7 @@ jobs: contents: read steps: - name: Checkout caller repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} # Pin to the concrete event SHA (the PR merge commit on @@ -1076,7 +1076,7 @@ jobs: ref: ${{ github.sha }} path: caller - name: Checkout standards (for the check script) - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/standards ref: main @@ -1093,7 +1093,7 @@ jobs: contents: read steps: - name: Checkout caller repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} # Pin to the concrete event SHA (the PR merge commit on @@ -1107,7 +1107,7 @@ jobs: ref: ${{ github.sha }} path: caller - name: Checkout standards (for the check script) - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/standards ref: main diff --git a/.github/workflows/hypatia-scan-reusable.yml b/.github/workflows/hypatia-scan-reusable.yml index 3311a8af..6a617c75 100644 --- a/.github/workflows/hypatia-scan-reusable.yml +++ b/.github/workflows/hypatia-scan-reusable.yml @@ -18,12 +18,12 @@ jobs: timeout-minutes: 20 steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - name: Setup Elixir for Hypatia scanner - uses: erlef/setup-beam@v1.24.1 + uses: erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124 # v1.24.1 with: elixir-version: '1.19.4' otp-version: '28.3' @@ -43,7 +43,7 @@ jobs: echo "Resolved hypatia HEAD: $sha" - name: Cache Hex/Mix and Scanner Build - uses: actions/cache@v6.1.0 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.mix @@ -133,7 +133,7 @@ jobs: # This flag only tolerates a genuine upload failure (e.g. Advanced # Security disabled on a private repo) once the job is actually running. continue-on-error: true - uses: github/codeql-action/upload-sarif@v4.37.4 + uses: github/codeql-action/upload-sarif@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v3 with: sarif_file: hypatia.sarif category: hypatia @@ -150,7 +150,7 @@ jobs: - name: Upload findings artifacts if: always() - uses: actions/upload-artifact@v7.0.1 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: hypatia-scan-findings path: | diff --git a/.github/workflows/instant-sync.yml b/.github/workflows/instant-sync.yml index 930c8296..98317961 100644 --- a/.github/workflows/instant-sync.yml +++ b/.github/workflows/instant-sync.yml @@ -41,7 +41,7 @@ jobs: # propagated, instead of red-ing main on every push. - name: Trigger Propagation if: ${{ env.FARM_DISPATCH_TOKEN != '' }} - uses: peter-evans/repository-dispatch@v4.0.1 + uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v3 with: token: ${{ secrets.FARM_DISPATCH_TOKEN }} repository: hyperpolymath/.git-private-farm diff --git a/.github/workflows/launcher-standard-lockstep.yml b/.github/workflows/launcher-standard-lockstep.yml index ebae77b2..964b944d 100644 --- a/.github/workflows/launcher-standard-lockstep.yml +++ b/.github/workflows/launcher-standard-lockstep.yml @@ -33,7 +33,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout (full history for base/head diff) - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 with: fetch-depth: 0 diff --git a/.github/workflows/makefile-blocker.yml b/.github/workflows/makefile-blocker.yml index 0faca0ce..0fa50704 100644 --- a/.github/workflows/makefile-blocker.yml +++ b/.github/workflows/makefile-blocker.yml @@ -33,7 +33,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 - name: Fail on Makefile presence run: | diff --git a/.github/workflows/mirror-reusable.yml b/.github/workflows/mirror-reusable.yml index f6103176..01ff2dcf 100644 --- a/.github/workflows/mirror-reusable.yml +++ b/.github/workflows/mirror-reusable.yml @@ -60,10 +60,10 @@ jobs: env: GITLAB_KEY: ${{ secrets.GITLAB_SSH_KEY }} steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@v0.10.0 + - uses: webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555 # v0.10.0 if: ${{ env.GITLAB_KEY != '' }} with: ssh-private-key: ${{ secrets.GITLAB_SSH_KEY }} @@ -93,10 +93,10 @@ jobs: env: BITBUCKET_KEY: ${{ secrets.BITBUCKET_SSH_KEY }} steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@v0.10.0 + - uses: webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555 # v0.10.0 if: ${{ env.BITBUCKET_KEY != '' }} with: ssh-private-key: ${{ secrets.BITBUCKET_SSH_KEY }} @@ -120,10 +120,10 @@ jobs: env: CODEBERG_KEY: ${{ secrets.CODEBERG_SSH_KEY }} steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@v0.10.0 + - uses: webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555 # v0.10.0 if: ${{ env.CODEBERG_KEY != '' }} with: ssh-private-key: ${{ secrets.CODEBERG_SSH_KEY }} @@ -147,10 +147,10 @@ jobs: env: SOURCEHUT_KEY: ${{ secrets.SOURCEHUT_SSH_KEY }} steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@v0.10.0 + - uses: webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555 # v0.10.0 if: ${{ env.SOURCEHUT_KEY != '' }} with: ssh-private-key: ${{ secrets.SOURCEHUT_SSH_KEY }} @@ -174,10 +174,10 @@ jobs: env: DISROOT_KEY: ${{ secrets.DISROOT_SSH_KEY }} steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@v0.10.0 + - uses: webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555 # v0.10.0 if: ${{ env.DISROOT_KEY != '' }} with: ssh-private-key: ${{ secrets.DISROOT_SSH_KEY }} @@ -201,10 +201,10 @@ jobs: env: GITEA_KEY: ${{ secrets.GITEA_SSH_KEY }} steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - - uses: webfactory/ssh-agent@v0.10.0 + - uses: webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555 # v0.10.0 if: ${{ env.GITEA_KEY != '' }} with: ssh-private-key: ${{ secrets.GITEA_SSH_KEY }} @@ -230,7 +230,7 @@ jobs: env: RADICLE_KEY: ${{ secrets.RADICLE_KEY }} steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 # All Radicle steps gate on secrets.RADICLE_KEY being set on the @@ -245,7 +245,7 @@ jobs: # answers "are we configured to actually do it?". - name: Setup Rust if: ${{ env.RADICLE_KEY != '' }} - uses: dtolnay/rust-toolchain@master + uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable with: toolchain: stable - name: Install Radicle diff --git a/.github/workflows/no-js-scan.yml b/.github/workflows/no-js-scan.yml index fcb59053..29dbefb2 100644 --- a/.github/workflows/no-js-scan.yml +++ b/.github/workflows/no-js-scan.yml @@ -42,7 +42,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 - name: Report authored JS/TS (warn-first, non-blocking) shell: bash diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index c97b9382..422373ca 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -21,9 +21,9 @@ jobs: image: ghcr.io/stefan-hoeck/idris2-pack@sha256:f0758996a931fb35d9ecb1de273c4d59dabe2a09b433afc7e357f65a08b7e1ff steps: - name: Checkout Site - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Checkout Ddraig SSG - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: hyperpolymath/ddraig-ssg path: .ddraig-ssg @@ -40,7 +40,7 @@ jobs: fi ./.ddraig-ssg/build/exec/ddraig build src _site https://hyperpolymath.github.io/${GITHUB_REPOSITORY#*/} - name: Upload artifact - uses: actions/upload-pages-artifact@v5.0.0 + uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0 with: path: '_site' deploy: @@ -53,4 +53,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v5.0.0 + uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0 diff --git a/.github/workflows/readme-derive-reusable.yml b/.github/workflows/readme-derive-reusable.yml index e9c7617b..6237a982 100644 --- a/.github/workflows/readme-derive-reusable.yml +++ b/.github/workflows/readme-derive-reusable.yml @@ -46,7 +46,7 @@ jobs: timeout-minutes: 10 steps: - name: Checkout caller repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 - name: Read publishing declaration id: decl diff --git a/.github/workflows/registry-verify.yml b/.github/workflows/registry-verify.yml index c1ed8c0d..84ad6af0 100644 --- a/.github/workflows/registry-verify.yml +++ b/.github/workflows/registry-verify.yml @@ -27,7 +27,7 @@ jobs: timeout-minutes: 10 steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 # full history so `git ls-files -s` hashes are stable diff --git a/.github/workflows/rust-ci-reusable.yml b/.github/workflows/rust-ci-reusable.yml index e8d5c5e2..46375ca5 100644 --- a/.github/workflows/rust-ci-reusable.yml +++ b/.github/workflows/rust-ci-reusable.yml @@ -129,7 +129,7 @@ jobs: has_cargo: ${{ steps.detect.outputs.has_cargo }} steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.ref }} @@ -155,7 +155,7 @@ jobs: working-directory: ${{ inputs.working_directory }} steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.ref }} @@ -166,13 +166,13 @@ jobs: # `@stable`), but a SHA ref carries no version, so the action's "parse # toolchain version" step fails with `'toolchain' is a required input`. # See standards estate-wide rust-ci red. - uses: dtolnay/rust-toolchain@master + uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable with: toolchain: stable components: clippy, rustfmt - name: Cache cargo registry and build - uses: Swatinem/rust-cache@v2.9.1 + uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2 with: workspaces: ${{ inputs.working_directory }} @@ -202,19 +202,19 @@ jobs: working-directory: ${{ inputs.working_directory }} steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.ref }} - name: Install Rust toolchain # `toolchain:` mandatory under SHA pin — see Cargo check job above. - uses: dtolnay/rust-toolchain@master + uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable with: toolchain: stable - name: Cache cargo registry and build - uses: Swatinem/rust-cache@v2.9.1 + uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2 with: workspaces: ${{ inputs.working_directory }} @@ -245,14 +245,14 @@ jobs: working-directory: ${{ inputs.working_directory }} steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.ref }} - name: Install Rust toolchain # `toolchain:` mandatory under SHA pin — see Cargo check job above. - uses: dtolnay/rust-toolchain@master + uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable with: toolchain: stable @@ -281,14 +281,14 @@ jobs: FLOOR: ${{ inputs.coverage_floor }} steps: - name: Checkout repository - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.ref }} - name: Install Rust toolchain # `toolchain:` mandatory under SHA pin — see Cargo check job above. - uses: dtolnay/rust-toolchain@master + uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable with: toolchain: stable components: llvm-tools-preview diff --git a/.github/workflows/scorecard-enforcer.yml b/.github/workflows/scorecard-enforcer.yml index 23230262..19e057a5 100644 --- a/.github/workflows/scorecard-enforcer.yml +++ b/.github/workflows/scorecard-enforcer.yml @@ -22,18 +22,18 @@ jobs: security-events: write id-token: write # For OIDC steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Run Scorecard - uses: ossf/scorecard-action@v2.4.4 + uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4 with: results_file: results.json results_format: json publish_results: true - - uses: actions/upload-artifact@v7.0.1 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: scorecard-results path: results.json @@ -44,7 +44,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/download-artifact@v8.0.1 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: scorecard-results @@ -67,7 +67,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Check SECURITY.md exists run: | diff --git a/.github/workflows/scorecard-reusable.yml b/.github/workflows/scorecard-reusable.yml index 5a367766..7422b4d3 100644 --- a/.github/workflows/scorecard-reusable.yml +++ b/.github/workflows/scorecard-reusable.yml @@ -19,19 +19,19 @@ jobs: id-token: write steps: - name: Checkout code - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Run Scorecard Analysis - uses: ossf/scorecard-action@v2.4.4 + uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4 with: results_file: results.json results_format: json publish_results: true - name: Upload results artifact - uses: actions/upload-artifact@v7.0.1 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: scorecard-results path: results.json diff --git a/.github/workflows/secret-scanner-reusable.yml b/.github/workflows/secret-scanner-reusable.yml index 9dc9b284..45d0978f 100644 --- a/.github/workflows/secret-scanner-reusable.yml +++ b/.github/workflows/secret-scanner-reusable.yml @@ -111,7 +111,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # Gitleaks runs as a pinned, checksum-verified binary rather than via # gitleaks/gitleaks-action. The action injects gitleaks into the runner @@ -292,7 +292,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Check for hardcoded secrets in Rust env: @@ -453,7 +453,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Check for hardcoded secrets in shell scripts run: | diff --git a/.github/workflows/self-test.yml b/.github/workflows/self-test.yml index b1d1dec9..1d9ea580 100644 --- a/.github/workflows/self-test.yml +++ b/.github/workflows/self-test.yml @@ -33,7 +33,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # PyYAML is required by the secret-scanner canary, which extracts the # shipping step body from the reusable rather than testing a copy. diff --git a/.github/workflows/signed-push-smoke.yml b/.github/workflows/signed-push-smoke.yml index e2b6303b..83330b21 100644 --- a/.github/workflows/signed-push-smoke.yml +++ b/.github/workflows/signed-push-smoke.yml @@ -25,7 +25,7 @@ jobs: timeout-minutes: 10 steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 diff --git a/.github/workflows/spark-theatre-gate.yml b/.github/workflows/spark-theatre-gate.yml index 6af70e16..445b5379 100644 --- a/.github/workflows/spark-theatre-gate.yml +++ b/.github/workflows/spark-theatre-gate.yml @@ -66,7 +66,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Scan for SPARK proof theatre env: diff --git a/.machine_readable/REGISTRY.a2ml b/.machine_readable/REGISTRY.a2ml index 5107c3aa..161a1abb 100644 --- a/.machine_readable/REGISTRY.a2ml +++ b/.machine_readable/REGISTRY.a2ml @@ -45,7 +45,7 @@ name = "A2ML — Attested Markup Language" stream = "foundation" home = "a2ml/" canonical_doc = "a2ml/README.adoc" -source_hash = "sha256:cedda748a39bbc6016c8548193b844fc028e8822883bc54ef01a905dfa63dc64" +source_hash = "sha256:e8e2a87130d347f60104e4bed0bec1fb01a65f2389b036e16917c54382d0f038" route = "the typed/verified machine-readable document format" [[spec]] diff --git a/scripts/relock-sha-keys.py b/scripts/relock-sha-keys.py new file mode 100644 index 00000000..5764a7cc --- /dev/null +++ b/scripts/relock-sha-keys.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +"""Rewrite gh-actions-lock's tag-form keys back to the inline SHA refs used in +workflow files. + +gh actions-lock prettifies `uses: owner/repo@ # vX` to `owner/repo@vX` +and keys the lockfile by that tag. This estate keeps inline SHA pins in +workflow files (Mustfile actions-sha-pinned, governance linter, hypatia rule, +GitHub sha_pinning_required all enforce them), so after generating the +lockfile we restore the original workflows and re-key the lockfile entries to +the SHA form. Key SHA == recorded commit digest, which the lockfile format +already supports (validator requires key-SHA == digest). + +Usage: relock-sha-keys.py +""" +import re +import sys +from pathlib import Path + +wf_dir = Path(sys.argv[1] if len(sys.argv) > 1 else ".github/workflows") +lock_path = wf_dir / "actions.lock" +text = lock_path.read_text() + +# Collect inline SHA refs from workflow files: action -> set of SHAs used. +uses_re = re.compile(r"uses:\s*([A-Za-z0-9_.-]+/[A-Za-z0-9_./-]+)@([0-9a-f]{40})") +inline: dict[str, set] = {} +for f in sorted(wf_dir.glob("*.yml")) + sorted(wf_dir.glob("*.yaml")): + for m in uses_re.finditer(f.read_text()): + # Lockfile entries key the repo root; inline refs may use a subpath + # (github/codeql-action/init@sha) — index by owner/repo only. + root = "/".join(m.group(1).split("/")[:2]) + inline.setdefault(root.lower(), set()).add(m.group(2)) + +# Parse lockfile dependency entries: key 'action@ref' with commit 'sha1-'. +entry_re = re.compile( + r"^ '([^'@]+)@([^']+)':\n((?:^ {8}.*\n?)*)", re.MULTILINE +) +mapping = {} # 'action@tagref' -> 'action@sha' +for m in entry_re.finditer(text): + action, ref, body = m.group(1), m.group(2), m.group(3) + if re.fullmatch(r"[0-9a-f]{40}", ref): + continue # already SHA-keyed + cm = re.search(r"commit:\s*'sha1-([0-9a-f]{40})'", body) + if not cm: + continue + sha = cm.group(1) + # Only re-key entries whose digest matches a SHA actually written inline + # in a workflow file (transitive deps inside external composites keep the + # ref form their composite wrote). + if sha in inline.get(action.lower(), set()): + mapping[f"{action}@{ref}"] = f"{action}@{sha}" + +for old, new in mapping.items(): + text = text.replace(f"'{old}'", f"'{new}'") + +lock_path.write_text(text) +print(f"re-keyed {len(mapping)} entries:") +for old, new in sorted(mapping.items()): + print(f" {old} -> @{new.rsplit('@', 1)[1][:12]}")