Skip to content

Commit 9e676fb

Browse files
reberhardt7claude
andauthored
fix: harden GitHub Actions workflows (zizmor) (#44)
- Upgrade actions/checkout from v4 to v6.0.2 (SHA-pinned) across all workflows - Add persist-credentials: false to all checkout steps that don't need git credentials (all CI jobs, and release build/publish jobs) - Fix excessive-permissions in release.yml: replace workflow-level contents:write + id-token:write with permissions:{} at workflow level and minimal per-job permissions (contents:write only for sync-and-tag and github-release; contents:read + id-token:write for publish jobs) Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 9294068 commit 9e676fb

File tree

2 files changed

+28
-12
lines changed

2 files changed

+28
-12
lines changed

.github/workflows/ci.yml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ jobs:
1313
runs-on: ubuntu-latest
1414
steps:
1515
- name: Checkout
16-
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
16+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
17+
with:
18+
persist-credentials: false
1719

1820
- name: Install Rust
1921
uses: dtolnay/rust-toolchain@efa25f7f19611383d5b0ccf2d1c8914531636bf9 # stable
@@ -41,7 +43,9 @@ jobs:
4143
runs-on: ${{ matrix.os }}
4244
steps:
4345
- name: Checkout
44-
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
46+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
47+
with:
48+
persist-credentials: false
4549

4650
- name: Install Rust
4751
uses: dtolnay/rust-toolchain@efa25f7f19611383d5b0ccf2d1c8914531636bf9 # stable
@@ -65,7 +69,9 @@ jobs:
6569
runs-on: ubuntu-latest
6670
steps:
6771
- name: Checkout
68-
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
72+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
73+
with:
74+
persist-credentials: false
6975

7076
- name: Setup Node.js
7177
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
@@ -112,7 +118,9 @@ jobs:
112118
runs-on: ${{ matrix.os }}
113119
steps:
114120
- name: Checkout
115-
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
121+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
122+
with:
123+
persist-credentials: false
116124

117125
- name: Install Rust
118126
uses: dtolnay/rust-toolchain@efa25f7f19611383d5b0ccf2d1c8914531636bf9 # stable

.github/workflows/release.yml

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ on:
1313
- minor
1414
- major
1515

16-
permissions:
17-
contents: write
18-
id-token: write
16+
permissions: {}
1917

2018
jobs:
2119
sync-and-tag:
2220
runs-on: ubuntu-latest
21+
permissions:
22+
contents: write
2323
outputs:
2424
version: ${{ steps.sync.outputs.VERSION }}
2525
steps:
2626
- name: Checkout
27-
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
27+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2828

2929
- name: Configure Git
3030
run: |
@@ -117,11 +117,14 @@ jobs:
117117
archive: tar.gz
118118
build-tool: cross
119119
runs-on: ${{ matrix.runner }}
120+
permissions:
121+
contents: read
120122
steps:
121123
- name: Checkout
122-
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
124+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
123125
with:
124126
ref: v${{ needs.sync-and-tag.outputs.version }}
127+
persist-credentials: false
125128

126129
- name: Install Rust
127130
uses: dtolnay/rust-toolchain@efa25f7f19611383d5b0ccf2d1c8914531636bf9 # stable
@@ -171,6 +174,8 @@ jobs:
171174
github-release:
172175
needs: [sync-and-tag, build]
173176
runs-on: ubuntu-latest
177+
permissions:
178+
contents: write
174179
steps:
175180
- name: Download all artifacts
176181
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
@@ -196,9 +201,10 @@ jobs:
196201
id-token: write
197202
steps:
198203
- name: Checkout
199-
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
204+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
200205
with:
201206
ref: v${{ needs.sync-and-tag.outputs.version }}
207+
persist-credentials: false
202208

203209
- name: Install Rust
204210
uses: dtolnay/rust-toolchain@efa25f7f19611383d5b0ccf2d1c8914531636bf9 # stable
@@ -233,9 +239,10 @@ jobs:
233239
id-token: write
234240
steps:
235241
- name: Checkout
236-
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
242+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
237243
with:
238244
ref: v${{ needs.sync-and-tag.outputs.version }}
245+
persist-credentials: false
239246

240247
- name: Configure git for HTTPS
241248
run: git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
@@ -308,9 +315,10 @@ jobs:
308315
id-token: write
309316
steps:
310317
- name: Checkout
311-
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
318+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
312319
with:
313320
ref: v${{ needs.sync-and-tag.outputs.version }}
321+
persist-credentials: false
314322

315323
- name: Download all artifacts
316324
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4

0 commit comments

Comments
 (0)