Skip to content

Commit 08b0a39

Browse files
chore: pin GitHub Actions to SHAs, add dependabot
Tag refs are mutable; SHA pins are not. CodeQL flagged "unpinned 3rd-party action" findings 21 + 22 against the docs.yml workflow on PR #32; the same warning applied to every workflow but hadn't been triaged. Pin all sixteen action references across the four workflows to commit SHAs with the resolved version recorded as an inline comment. Action versions captured: - actions/checkout → v6.0.2 - astral-sh/setup-uv → v8.1.0 - cloudflare/wrangler-action → v4.0.0 (bumped from v3) - github/codeql-action → v3.35.4 - actions/upload-artifact → v7.0.1 - actions/download-artifact → v8.0.1 - pypa/gh-action-pypi-publish → release/v1 branch tip - softprops/action-gh-release → v2.6.2 The wrangler-action bump from v3 to v4 is the deliberate move: v4 uses node24, resolving the Node.js 20 deprecation warning that's been firing on every Docs workflow run. v4's only major change is bumping the bundled Wrangler CLI default from v3 to v4, which is transparent to our `pages deploy` invocation. The maintenance pair is .github/dependabot.yml — Dependabot watches the github-actions ecosystem and surfaces version bumps as PRs each month, so SHA-pinning's "no auto-updates" downside gets handled automatically. Monthly cadence keeps PR volume bounded; action releases cluster around new runner features and platform updates, so a month is long enough for batching without missing real security advisories. After merge, the open CodeQL findings 21 + 22 on PR #32 should be auto-dismissed once the next CodeQL scan re-runs against the pinned workflows.
1 parent fa58be6 commit 08b0a39

5 files changed

Lines changed: 44 additions & 20 deletions

File tree

.github/dependabot.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Dependabot configuration.
2+
#
3+
# All workflows pin third-party actions by commit SHA per CodeQL findings
4+
# 21 + 22 on PR #32 and the chore/pin-action-shas plan in
5+
# openarmature-coord/docs/future-work.md. SHA-pinning is a security
6+
# posture choice — tag refs are mutable, SHAs are not — and Dependabot is
7+
# the maintenance pair: it surfaces version bumps as PRs (with updated
8+
# SHA + version comment), so the security benefit doesn't trade off
9+
# against keeping actions current.
10+
#
11+
# Monthly cadence keeps the PR volume bounded. Action releases cluster
12+
# around new GitHub Actions runner features and GH platform updates; a
13+
# month is long enough for batched updates but short enough to catch
14+
# real security advisories in time.
15+
version: 2
16+
updates:
17+
- package-ecosystem: "github-actions"
18+
directory: "/"
19+
schedule:
20+
interval: "monthly"
21+
open-pull-requests-limit: 10
22+
commit-message:
23+
prefix: "chore"
24+
include: "scope"

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ jobs:
2121
runs-on: ubuntu-latest
2222
steps:
2323
- name: Checkout
24-
uses: actions/checkout@v6
24+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2525
with:
2626
# Conformance fixtures live in the openarmature-spec submodule.
2727
submodules: recursive
2828

2929
- name: Install uv
30-
uses: astral-sh/setup-uv@v8.1.0
30+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
3131
with:
3232
enable-cache: true
3333

.github/workflows/codeql.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ jobs:
4040
language: [actions, python]
4141
steps:
4242
- name: Checkout
43-
uses: actions/checkout@v6
43+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
4444

4545
- name: Initialize CodeQL
46-
uses: github/codeql-action/init@v3
46+
uses: github/codeql-action/init@7fd177fa680c9881b53cdab4d346d32574c9f7f4 # v3.35.4
4747
with:
4848
languages: ${{ matrix.language }}
4949
# Reference the in-tree config so the rule-suppressions land.
@@ -56,6 +56,6 @@ jobs:
5656
queries: security-and-quality
5757

5858
- name: Perform CodeQL Analysis
59-
uses: github/codeql-action/analyze@v3
59+
uses: github/codeql-action/analyze@7fd177fa680c9881b53cdab4d346d32574c9f7f4 # v3.35.4
6060
with:
6161
category: "/language:${{ matrix.language }}"

.github/workflows/docs.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ jobs:
3333
runs-on: ubuntu-latest
3434
steps:
3535
- name: Checkout
36-
uses: actions/checkout@v6
36+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3737
with:
3838
# mkdocstrings imports the package source; the spec submodule
3939
# is not referenced by docs but keep the conventional recursive
4040
# checkout consistent with ``ci.yml``.
4141
submodules: recursive
4242

4343
- name: Install uv
44-
uses: astral-sh/setup-uv@v8.1.0
44+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
4545
with:
4646
enable-cache: true
4747

@@ -62,7 +62,7 @@ jobs:
6262
# Only deploy on pushes to main. PR builds prove the site
6363
# builds but do not deploy.
6464
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
65-
uses: cloudflare/wrangler-action@v3
65+
uses: cloudflare/wrangler-action@ebbaa1584979971c8614a24965b4405ff95890e0 # v4.0.0
6666
with:
6767
apiToken: ${{ secrets.CF_API_TOKEN }}
6868
accountId: ${{ secrets.CF_ACCOUNT_ID }}

.github/workflows/release.yml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ jobs:
2323
runs-on: ubuntu-latest
2424
steps:
2525
- name: Checkout
26-
uses: actions/checkout@v6
26+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2727
with:
2828
# Conformance fixtures live in the openarmature-spec submodule.
2929
submodules: recursive
3030

3131
- name: Install uv
32-
uses: astral-sh/setup-uv@v8.1.0
32+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
3333
with:
3434
enable-cache: true
3535

@@ -86,12 +86,12 @@ jobs:
8686
runs-on: ubuntu-latest
8787
steps:
8888
- name: Checkout
89-
uses: actions/checkout@v6
89+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
9090
with:
9191
submodules: recursive
9292

9393
- name: Install uv
94-
uses: astral-sh/setup-uv@v8.1.0
94+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
9595
with:
9696
enable-cache: true
9797

@@ -102,7 +102,7 @@ jobs:
102102
run: uv build
103103

104104
- name: Upload dist artifact
105-
uses: actions/upload-artifact@v7
105+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
106106
with:
107107
name: dist
108108
path: dist/
@@ -119,13 +119,13 @@ jobs:
119119
id-token: write
120120
steps:
121121
- name: Download dist artifact
122-
uses: actions/download-artifact@v8
122+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
123123
with:
124124
name: dist
125125
path: dist/
126126

127127
- name: Publish to TestPyPI
128-
uses: pypa/gh-action-pypi-publish@release/v1
128+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1 branch tip
129129
with:
130130
repository-url: https://test.pypi.org/legacy/
131131

@@ -145,13 +145,13 @@ jobs:
145145
id-token: write
146146
steps:
147147
- name: Download dist artifact
148-
uses: actions/download-artifact@v8
148+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
149149
with:
150150
name: dist
151151
path: dist/
152152

153153
- name: Publish to PyPI
154-
uses: pypa/gh-action-pypi-publish@release/v1
154+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1 branch tip
155155

156156
# GitHub Release with auto-generated notes from commits since the last
157157
# tag. Only fires on real releases (no suffix); pre-release tags leave
@@ -164,16 +164,16 @@ jobs:
164164
contents: write
165165
steps:
166166
- name: Checkout
167-
uses: actions/checkout@v6
167+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
168168

169169
- name: Download dist artifact
170-
uses: actions/download-artifact@v8
170+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
171171
with:
172172
name: dist
173173
path: dist/
174174

175175
- name: Create GitHub Release
176-
uses: softprops/action-gh-release@v2
176+
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2.6.2
177177
with:
178178
files: dist/*
179179
generate_release_notes: true

0 commit comments

Comments
 (0)