Skip to content

Commit ee3e731

Browse files
committed
Update verify-devcontainers workflow to match CCCL.
This prevents us from spawning a ton of jobs unless the devcontainers actually change.
1 parent 2c2f40a commit ee3e731

File tree

1 file changed

+79
-15
lines changed

1 file changed

+79
-15
lines changed

.github/workflows/verify-devcontainers.yml

Lines changed: 79 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ name: Verify devcontainers
22

33
on:
44
workflow_call:
5+
inputs:
6+
base_sha:
7+
type: string
8+
description: 'For PRs, set the base SHA to conditionally run this workflow only when relevant files are modified.'
9+
required: false
10+
511

612
defaults:
713
run:
@@ -11,12 +17,17 @@ permissions:
1117
contents: read
1218

1319
jobs:
14-
verify-make-devcontainers:
20+
get-devcontainer-list:
1521
name: Verify devcontainer files are up-to-date
22+
outputs:
23+
skip: ${{ steps.inspect-changes.outputs.skip }}
24+
devcontainers: ${{ steps.get-list.outputs.devcontainers }}
1625
runs-on: ubuntu-latest
1726
steps:
1827
- name: Checkout repository
1928
uses: actions/checkout@v4
29+
with:
30+
persist-credentials: false
2031
- name: Setup jq and yq
2132
run: |
2233
sudo apt-get update
@@ -25,7 +36,7 @@ jobs:
2536
sudo chmod +x /usr/local/bin/yq
2637
- name: Run the script to generate devcontainer files
2738
run: |
28-
./.devcontainer/make_devcontainers.sh --verbose
39+
./.devcontainer/make_devcontainers.sh --verbose --clean
2940
- name: Check for changes
3041
run: |
3142
if [[ $(git diff --stat) != '' || $(git status --porcelain | grep '^??') != '' ]]; then
@@ -36,17 +47,45 @@ jobs:
3647
else
3748
echo "::note::Dev Container files are up-to-date."
3849
fi
50+
- name: Inspect changes
51+
if: ${{ inputs.base_sha != '' }}
52+
id: inspect-changes
53+
env:
54+
BASE_SHA: ${{ inputs.base_sha }}
55+
run: |
56+
echo "Fetch history and determine merge base..."
57+
git fetch origin --unshallow -q
58+
git fetch origin $BASE_SHA -q
59+
merge_base_sha=$(git merge-base $GITHUB_SHA $BASE_SHA)
3960
40-
get-devcontainer-list:
41-
needs: verify-make-devcontainers
42-
name: Get list of devcontainer.json files
43-
runs-on: ubuntu-latest
44-
outputs:
45-
devcontainers: ${{ steps.get-list.outputs.devcontainers }}
46-
steps:
47-
- name: Check out the code
48-
uses: actions/checkout@v4
61+
echo "Head SHA: $GITHUB_SHA"
62+
echo "PR Base SHA: $BASE_SHA"
63+
echo "Merge Base SHA: $merge_base_sha"
64+
65+
echo "Checking for changes to devcontainer/matrix files..."
66+
67+
all_dirty_files=$(git diff --name-only "${merge_base_sha}" "${GITHUB_SHA}")
68+
echo "::group::All dirty files"
69+
echo "${all_dirty_files}"
70+
echo "::endgroup::"
71+
72+
file_regex="^(.devcontainer|ci/matrix.yaml|.github/actions/workflow-build/build-workflow.py)"
73+
echo "Regex: ${file_regex}"
74+
75+
relevant_dirty_files=$(echo "${all_dirty_files}" | grep -E "${file_regex}" || true)
76+
echo "::group::Relevant dirty files"
77+
echo "${relevant_dirty_files}"
78+
echo "::endgroup::"
79+
80+
if [[ -z "${relevant_dirty_files}" ]]; then
81+
echo "No relevant changes detected. Skipping devcontainer testing."
82+
echo "skip=true" >> $GITHUB_OUTPUT
83+
else
84+
echo "Detected relevant changes. Continuing."
85+
echo "skip=false" >> $GITHUB_OUTPUT
86+
fi
4987
- name: Get list of devcontainer.json paths and names
88+
if: ${{ steps.inspect-changes.outputs.skip != 'true' }}
5089
id: get-list
5190
run: |
5291
devcontainers=$(find .devcontainer/ -name 'devcontainer.json' | while read -r devcontainer; do
@@ -55,9 +94,10 @@ jobs:
5594
echo "devcontainers=${devcontainers}" | tee --append "${GITHUB_OUTPUT}"
5695
5796
verify-devcontainers:
58-
needs: get-devcontainer-list
5997
name: ${{matrix.devcontainer.name}}
60-
runs-on: ubuntu-latest
98+
needs: get-devcontainer-list
99+
if: ${{ needs.get-devcontainer-list.outputs.skip != 'true' }}
100+
runs-on: linux-amd64-cpu4
61101
strategy:
62102
fail-fast: false
63103
matrix:
@@ -68,10 +108,34 @@ jobs:
68108
steps:
69109
- name: Check out the code
70110
uses: actions/checkout@v4
111+
with:
112+
persist-credentials: false
113+
114+
- name: Install dependencies
115+
run: |
116+
# Add PPA for nodejs, devcontainer CLI requires a newer version:
117+
curl -fsSL https://deb.nodesource.com/setup_20.x -o /tmp/nodesource_setup.sh
118+
sudo bash /tmp/nodesource_setup.sh
119+
sudo apt-get update
120+
sudo apt-get install -y nodejs
121+
sudo npm install -g @devcontainers/cli
122+
71123
# We don't really need sccache configured, but we need the AWS credentials envvars to be set
72124
# in order to avoid the devcontainer hanging waiting for GitHub authentication
73-
- name: Configure credentials and environment variables for sccache
74-
uses: ./.github/actions/configure_cccl_sccache
125+
- name: Get AWS credentials for sccache bucket
126+
uses: aws-actions/configure-aws-credentials@v4
127+
with:
128+
role-to-assume: arn:aws:iam::279114543810:role/gha-oidc-NVIDIA
129+
aws-region: us-east-2
130+
role-duration-seconds: 43200 # 12 hours
131+
- name: Set environment variables
132+
run: |
133+
echo "SCCACHE_BUCKET=rapids-sccache-devs" >> $GITHUB_ENV
134+
echo "SCCACHE_REGION=us-east-2" >> $GITHUB_ENV
135+
echo "SCCACHE_IDLE_TIMEOUT=32768" >> $GITHUB_ENV
136+
echo "SCCACHE_S3_USE_SSL=true" >> $GITHUB_ENV
137+
echo "SCCACHE_S3_NO_CREDENTIALS=false" >> $GITHUB_ENV
138+
75139
- name: Run in devcontainer
76140
uses: devcontainers/[email protected]
77141
with:

0 commit comments

Comments
 (0)