Skip to content

Commit a38a282

Browse files
authored
harden ci (#556)
* harden ci * fix * rmarks * remarks * fix
1 parent cb8e107 commit a38a282

File tree

4 files changed

+65
-14
lines changed

4 files changed

+65
-14
lines changed

.github/CODEOWNERS

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/.github @mensfeld
2+
/.github/workflows/ @mensfeld
3+
/.github/actions/ @mensfeld

.github/workflows/ci.yml

+36-14
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,22 @@ concurrency:
66

77
on:
88
pull_request:
9+
branches: [ main, master ]
910
push:
11+
branches: [ main, master ]
1012
schedule:
1113
- cron: '0 1 * * *'
1214

15+
permissions:
16+
contents: read
17+
1318
env:
1419
BUNDLE_RETRY: 6
1520
BUNDLE_JOBS: 4
1621

1722
jobs:
1823
specs:
24+
timeout-minutes: 15
1925
runs-on: ubuntu-latest
2026
needs: diffend
2127
strategy:
@@ -30,16 +36,19 @@ jobs:
3036
- ruby: '3.4'
3137
coverage: 'true'
3238
steps:
33-
- uses: actions/checkout@v4
39+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
40+
with:
41+
fetch-depth: 0
42+
3443
- name: Install package dependencies
3544
run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS"
3645

37-
- name: Start Kafka with docker compose
46+
- name: Start Kafka with Docker Compose
3847
run: |
3948
docker compose up -d || (sleep 5 && docker compose up -d)
4049
4150
- name: Set up Ruby
42-
uses: ruby/setup-ruby@v1
51+
uses: ruby/setup-ruby@bbda85882f33075a3727c01e3c8d0de0be6146ce
4352
with:
4453
ruby-version: ${{matrix.ruby}}
4554
bundler-cache: true
@@ -49,7 +58,6 @@ jobs:
4958
run: |
5059
gem install bundler --no-document
5160
gem update --system --no-document
52-
5361
bundle config set without 'tools benchmarks docs'
5462
5563
- name: Bundle install
@@ -58,8 +66,7 @@ jobs:
5866
bundle install --jobs 4 --retry 3
5967
6068
- name: Wait for Kafka
61-
run: |
62-
bundle exec bin/wait_for_kafka
69+
run: bundle exec bin/wait_for_kafka
6370

6471
- name: Run all tests
6572
env:
@@ -74,16 +81,17 @@ jobs:
7481
run: bin/verify_topics_naming
7582

7683
diffend:
84+
timeout-minutes: 5
7785
runs-on: ubuntu-latest
7886
strategy:
7987
fail-fast: false
8088
steps:
81-
- uses: actions/checkout@v4
89+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
8290
with:
8391
fetch-depth: 0
8492

8593
- name: Set up Ruby
86-
uses: ruby/setup-ruby@v1
94+
uses: ruby/setup-ruby@bbda85882f33075a3727c01e3c8d0de0be6146ce
8795
with:
8896
ruby-version: 3.4
8997
bundler-cache: true
@@ -95,33 +103,47 @@ jobs:
95103
run: bundle secure
96104

97105
coditsu:
106+
timeout-minutes: 5
98107
runs-on: ubuntu-latest
99108
strategy:
100109
fail-fast: false
101110
steps:
102-
- uses: actions/checkout@v4
111+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
103112
with:
104113
fetch-depth: 0
114+
- name: Download Coditsu script
115+
run: |
116+
curl -sSL https://api.coditsu.io/run/ci -o coditsu_script.sh
117+
chmod +x coditsu_script.sh
118+
- name: Verify Coditsu script checksum
119+
run: |
120+
EXPECTED_SHA256="0aecc5aa010f53fca264548a41467a2b0a1208d750ce1da3e98a217304cacbbc"
121+
ACTUAL_SHA256=$(sha256sum coditsu_script.sh | awk '{ print $1 }')
122+
if [ "$ACTUAL_SHA256" != "$EXPECTED_SHA256" ]; then
123+
echo "::error::Checksum verification failed. Expected $EXPECTED_SHA256 but got $ACTUAL_SHA256."
124+
exit 1
125+
fi
105126
- name: Run Coditsu
106127
env:
107128
CODITSU_API_KEY: ${{ secrets.CODITSU_API_KEY }}
108129
CODITSU_API_SECRET: ${{ secrets.CODITSU_API_SECRET }}
109-
run: \curl -sSL https://api.coditsu.io/run/ci | bash
110-
130+
run: ./coditsu_script.sh
111131

112132
assets:
133+
timeout-minutes: 10
113134
runs-on: ubuntu-latest
114135
steps:
115136
- name: Checkout code
116-
uses: actions/checkout@v4
137+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
117138

118139
- name: Set up Node.js
119-
uses: actions/setup-node@v4
140+
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a
120141
with:
121142
node-version: '17'
143+
cache: npm
122144

123145
- name: Cache node modules
124-
uses: actions/cache@v4
146+
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf
125147
with:
126148
path: ~/.npm
127149
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
name: Verify Action Pins
2+
on:
3+
pull_request:
4+
paths:
5+
- '.github/workflows/**'
6+
jobs:
7+
verify:
8+
runs-on: ubuntu-latest
9+
steps:
10+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
11+
- name: Check SHA pins
12+
run: |
13+
if grep -E -r "uses: .*/.*@(v[0-9]+|main|master)" .github/workflows/; then
14+
echo "::error::Actions should use SHA pins, not tags or branch names"
15+
exit 1
16+
fi

renovate.json

+10
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,15 @@
22
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
33
"extends": [
44
"config:base"
5+
],
6+
"github-actions": {
7+
"enabled": true,
8+
"pinDigests": true
9+
},
10+
"packageRules": [
11+
{
12+
"matchManagers": ["github-actions"],
13+
"minimumReleaseAge": "7 days"
14+
}
515
]
616
}

0 commit comments

Comments
 (0)