Skip to content

Commit 32c510d

Browse files
authored
Merge pull request #4471 from DataDog/tonycthsu/check-cache
Extract bundle cache action
2 parents 266c2e7 + a484ff0 commit 32c510d

File tree

4 files changed

+90
-50
lines changed

4 files changed

+90
-50
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: 'Prepare bundle cache'
2+
3+
description: 'Sets up bundle cache for GitHub Actions'
4+
5+
outputs:
6+
cache-key:
7+
description: 'Cache key for the bundle'
8+
value: ${{ steps.restore-cache.outputs.cache-primary-key }}
9+
lockfile:
10+
description: 'Lockfile name'
11+
value: ${{ steps.lockfile.outputs.lockfile }}
12+
13+
runs:
14+
using: "composite"
15+
steps:
16+
- id: ruby-alias
17+
shell: bash
18+
run: |
19+
engine=$(ruby -e "puts RUBY_ENGINE")
20+
alias=$(ruby -e "puts RUBY_ENGINE_VERSION.split('.').take(2).join")
21+
22+
echo "ruby-alias=$engine-$alias" >> "$GITHUB_OUTPUT"
23+
- name: Generate lockfile
24+
id: lockfile
25+
shell: bash
26+
env:
27+
LOCKFILE: lockfile-${{ steps.ruby-alias.outputs.ruby-alias }}
28+
run: |
29+
bundle lock
30+
echo "lockfile=$LOCKFILE" >> "$GITHUB_OUTPUT"
31+
- name: Upload lockfile
32+
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
33+
with:
34+
name: ${{ steps.lockfile.outputs.lockfile }}
35+
path: "*.lock"
36+
- name: Restore cache
37+
uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
38+
id: restore-cache
39+
with:
40+
key: bundle-${{ runner.os }}-${{ runner.arch }}-${{ steps.ruby-alias.outputs.ruby-alias }}-${{ hashFiles('*.lock') }}
41+
path: "/usr/local/bundle"
42+
- if: steps.restore-cache.outputs.cache-hit != 'true'
43+
shell: bash
44+
run: bundle install
45+
- if: steps.restore-cache.outputs.cache-hit != 'true'
46+
name: Save cache
47+
uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
48+
with:
49+
key: "${{ steps.restore-cache.outputs.cache-primary-key }}"
50+
path: "/usr/local/bundle"
51+
- run: bundle check
52+
shell: bash

.github/actions/bundle-restore/action.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
name: 'Restore Bundle from cache'
1+
name: 'Restore bundle cache'
22

33
# TODO: Improve description
4-
description: 'Restore the bundle from cache'
4+
description: 'Restores bundle cache for GitHub Actions'
55

66
inputs:
7-
lockfile-name:
7+
lockfile:
88
description: 'Name of the lockfile artifact to download'
99
required: true
1010
cache-key:
@@ -17,7 +17,7 @@ runs:
1717
- name: Download lockfile
1818
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
1919
with:
20-
name: ${{ inputs.lockfile-name }}
20+
name: ${{ inputs.lockfile }}
2121

2222
- name: Restore cache
2323
uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0

.github/workflows/_unit_test.yml

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -28,41 +28,19 @@ jobs:
2828
outputs:
2929
batches: "${{ steps.set-batches.outputs.batches }}"
3030
misc: "${{ steps.set-batches.outputs.misc }}"
31-
cache-key: "${{ steps.restore-cache.outputs.cache-primary-key }}"
32-
lockfile: "${{ steps.lockfile.outputs.lockfile }}"
31+
cache-key: "${{ steps.bundle-cache.outputs.cache-key }}"
32+
lockfile: "${{ steps.bundle-cache.outputs.lockfile }}"
3333
container:
3434
image: ghcr.io/datadog/images-rb/engines/${{ inputs.engine }}:${{ inputs.version }}
3535
steps:
3636
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
3737
with:
3838
persist-credentials: false
39-
- name: Generate lockfile
40-
id: lockfile
41-
env:
42-
LOCKFILE: lockfile-${{ inputs.alias }}-${{ github.run_id }}
43-
run: |
44-
bundle lock
45-
echo "lockfile=$LOCKFILE" >> "$GITHUB_OUTPUT"
4639

47-
- name: Upload lockfile
48-
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
49-
with:
50-
name: ${{ steps.lockfile.outputs.lockfile }}
51-
path: "*.lock"
52-
- name: Restore cache
53-
uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
54-
id: restore-cache
55-
with:
56-
key: bundle-${{ runner.os }}-${{ runner.arch }}-${{ inputs.alias }}-${{ hashFiles('*.lock') }}
57-
path: "/usr/local/bundle"
58-
- if: steps.restore-cache.outputs.cache-hit != 'true'
59-
run: bundle install
60-
- if: steps.restore-cache.outputs.cache-hit != 'true'
61-
name: Save cache
62-
uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
63-
with:
64-
key: "${{ steps.restore-cache.outputs.cache-primary-key }}"
65-
path: "/usr/local/bundle"
40+
- name: Prepare bundle cache
41+
id: bundle-cache
42+
uses: ./.github/actions/bundle-cache
43+
6644
- id: set-batches
6745
name: Distribute tasks into batches
6846
run: |
@@ -158,7 +136,7 @@ jobs:
158136
- name: Restore bundle cache
159137
uses: ./.github/actions/bundle-restore
160138
with:
161-
lockfile-name: ${{ needs.batch.outputs.lockfile }}
139+
lockfile: ${{ needs.batch.outputs.lockfile }}
162140
cache-key: ${{ needs.batch.outputs.cache-key }}
163141
- name: Build & Test
164142
uses: ./.github/actions/build-test
@@ -233,7 +211,7 @@ jobs:
233211
- name: Restore bundle cache
234212
uses: ./.github/actions/bundle-restore
235213
with:
236-
lockfile-name: ${{ needs.batch.outputs.lockfile }}
214+
lockfile: ${{ needs.batch.outputs.lockfile }}
237215
cache-key: ${{ needs.batch.outputs.cache-key }}
238216
- name: Build & Test
239217
uses: ./.github/actions/build-test

.github/workflows/check.yml

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,16 @@ jobs:
2020
name: build
2121
runs-on: ubuntu-24.04
2222
container: ghcr.io/datadog/images-rb/engines/ruby:3.3
23+
outputs:
24+
lockfile: ${{ steps.bundle-cache.outputs.lockfile }}
25+
cache-key: ${{ steps.bundle-cache.outputs.cache-key }}
2326
steps:
2427
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
2528
with:
2629
persist-credentials: false
27-
- run: bundle lock
28-
- uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
29-
id: lockfile
30-
with:
31-
name: 'check-lockfile-${{ github.sha }}-${{ github.run_id }}'
32-
path: '*.lock'
33-
if-no-files-found: error
30+
- name: Prepare bundle cache
31+
id: bundle-cache
32+
uses: ./.github/actions/bundle-cache
3433

3534
rubocop:
3635
name: rubocop/lint
@@ -41,8 +40,11 @@ jobs:
4140
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
4241
with:
4342
persist-credentials: false
44-
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
45-
- run: bundle install
43+
- name: Restore bundle cache
44+
uses: ./.github/actions/bundle-restore
45+
with:
46+
lockfile: ${{ needs.build.outputs.lockfile }}
47+
cache-key: ${{ needs.build.outputs.cache-key }}
4648
- run: bundle exec rake rubocop
4749

4850
standard:
@@ -54,9 +56,11 @@ jobs:
5456
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
5557
with:
5658
persist-credentials: false
57-
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
58-
- name: Install dependencies
59-
run: bundle install
59+
- name: Restore bundle cache
60+
uses: ./.github/actions/bundle-restore
61+
with:
62+
lockfile: ${{ needs.build.outputs.lockfile }}
63+
cache-key: ${{ needs.build.outputs.cache-key }}
6064
- run: bundle exec rake standard
6165

6266
steep:
@@ -68,9 +72,11 @@ jobs:
6872
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
6973
with:
7074
persist-credentials: false
71-
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
72-
- name: Install dependencies
73-
run: bundle install
75+
- name: Restore bundle cache
76+
uses: ./.github/actions/bundle-restore
77+
with:
78+
lockfile: ${{ needs.build.outputs.lockfile }}
79+
cache-key: ${{ needs.build.outputs.cache-key }}
7480
- name: Check for stale signature files
7581
run: bundle exec rake rbs:stale
7682
- name: Check for missing signature files
@@ -91,7 +97,11 @@ jobs:
9197
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
9298
with:
9399
persist-credentials: false
94-
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 # requires the lockfile
100+
- name: Restore bundle cache
101+
uses: ./.github/actions/bundle-restore
102+
with:
103+
lockfile: ${{ needs.build.outputs.lockfile }}
104+
cache-key: ${{ needs.build.outputs.cache-key }}
95105
- uses: DataDog/datadog-sca-github-action@main
96106
with:
97107
dd_api_key: ${{ secrets.DD_API_KEY }}

0 commit comments

Comments
 (0)