Skip to content

Commit bc9622c

Browse files
authored
Harden GitHub Actions workflows (#220)
* ci: add GitHub Actions audit job * ci: configure dependabot for batched github-actions updates * ci: pin GitHub Actions to SHA hashes * ci: suppress zizmor cache-poisoning warnings * ci: scope permissions to jobs and disable credential persistence
1 parent 3459ffd commit bc9622c

2 files changed

Lines changed: 51 additions & 6 deletions

File tree

.github/dependabot.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: github-actions
4+
directory: "/"
5+
groups:
6+
github-actions:
7+
patterns:
8+
- "*"
9+
schedule:
10+
interval: weekly
11+
cooldown:
12+
default-days: 7

.github/workflows/ci.yml

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,39 +15,72 @@ on:
1515
branches:
1616
- '*'
1717

18+
permissions: {}
19+
1820
jobs:
1921
rubocop:
2022
runs-on: ubuntu-latest
23+
permissions:
24+
contents: read
2125
steps:
22-
- uses: actions/checkout@v4
26+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
27+
with:
28+
persist-credentials: false
2329
- run: rm Gemfile.lock
24-
- uses: ruby/setup-ruby@v1
30+
- uses: ruby/setup-ruby@d45b1a4e94b71acab930e56e79c6aa188764e7f9 # zizmor: ignore[cache-poisoning] -- cached gems are used for testing, not release artifact generation # v1.316.0
2531
with:
2632
ruby-version: "4.0"
2733
bundler-cache: true
2834
- run: bundle exec rubocop
2935

36+
lint-actions:
37+
name: GitHub Actions audit
38+
runs-on: ubuntu-latest
39+
permissions:
40+
contents: read
41+
42+
steps:
43+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
44+
with:
45+
persist-credentials: false
46+
47+
- name: Run actionlint
48+
uses: rhysd/actionlint@393031adb9afb225ee52ae2ccd7a5af5525e03e8 # v1.7.11
49+
50+
- name: Run zizmor
51+
uses: zizmorcore/zizmor-action@71321a20a9ded102f6e9ce5718a2fcec2c4f70d8 # v0.5.2
52+
with:
53+
advanced-security: false
54+
3055
cruby:
3156
strategy:
3257
fail-fast: false
3358
matrix:
3459
ruby: ["2.7", "3.0", "3.1", "3.2", "3.3", "3.4", "4.0", "ruby-head", "truffleruby-head", "jruby-9.4", "jruby-10.0", "jruby-head"]
3560
runs-on: ubuntu-latest
61+
permissions:
62+
contents: read
3663
steps:
37-
- uses: actions/checkout@v4
64+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
65+
with:
66+
persist-credentials: false
3867
- run: rm Gemfile.lock
39-
- uses: ruby/setup-ruby@v1
68+
- uses: ruby/setup-ruby@d45b1a4e94b71acab930e56e79c6aa188764e7f9 # zizmor: ignore[cache-poisoning] -- cached gems are used for testing, not release artifact generation # v1.316.0
4069
with:
4170
ruby-version: ${{matrix.ruby}}
4271
bundler-cache: true
4372
- run: bundle exec rake
4473

4574
cruby-nokogiri-system-libraries:
4675
runs-on: ubuntu-latest
76+
permissions:
77+
contents: read
4778
steps:
48-
- uses: actions/checkout@v4
79+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
80+
with:
81+
persist-credentials: false
4982
- run: rm Gemfile.lock
50-
- uses: ruby/setup-ruby@v1
83+
- uses: ruby/setup-ruby@d45b1a4e94b71acab930e56e79c6aa188764e7f9 # v1.316.0
5184
with:
5285
ruby-version: "4.0"
5386
- name: Install nokogiri with system libraries

0 commit comments

Comments
 (0)