@@ -2,6 +2,12 @@ name: Verify devcontainers
22
33on :
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
612defaults :
713 run :
@@ -11,12 +17,17 @@ permissions:
1117 contents : read
1218
1319jobs :
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
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
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