From 71a85220289e9343ce6b253d4a2390801fb8aed3 Mon Sep 17 00:00:00 2001 From: ptaylor Date: Fri, 3 Apr 2026 11:37:39 -0700 Subject: [PATCH 1/6] update github action versions to node24 --- .github/actions/install-devcontainers-cli/action.yml | 4 ++-- .github/actions/setup-runner-env/action.yml | 10 +++++----- .github/workflows/build-and-test-feature.yml | 4 ++-- .github/workflows/build-test-and-push-linux-image.yml | 6 +++--- .../workflows/build-test-and-push-windows-image.yml | 4 ++-- .github/workflows/docs.yml | 2 +- .github/workflows/release-features.yml | 2 +- .github/workflows/release-linux.yml | 4 ++-- .github/workflows/release-windows.yml | 2 +- .github/workflows/release.yml | 4 ++-- .github/workflows/test.yml | 6 +++--- 11 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.github/actions/install-devcontainers-cli/action.yml b/.github/actions/install-devcontainers-cli/action.yml index 2a14ffaf6..d2332818f 100644 --- a/.github/actions/install-devcontainers-cli/action.yml +++ b/.github/actions/install-devcontainers-cli/action.yml @@ -6,9 +6,9 @@ runs: using: composite steps: - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: '20' + node-version: '24' - name: Install devcontainers CLI shell: bash run: | diff --git a/.github/actions/setup-runner-env/action.yml b/.github/actions/setup-runner-env/action.yml index a6ede0d22..dbfdb5acc 100644 --- a/.github/actions/setup-runner-env/action.yml +++ b/.github/actions/setup-runner-env/action.yml @@ -26,13 +26,13 @@ runs: - if: runner.environment == 'self-hosted' name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: '20' + node-version: '24' - if: runner.environment != 'self-hosted' name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Create docker context shell: bash @@ -40,14 +40,14 @@ runs: - if: runner.environment != 'self-hosted' name: Setup docker buildx on github-hosted runners - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 with: buildkitd-flags: --debug endpoint: builder - if: runner.environment == 'self-hosted' name: Setup docker buildx on self-hosted runners - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 with: buildkitd-flags: --debug --config /etc/buildkit/buildkitd.toml endpoint: builder diff --git a/.github/workflows/build-and-test-feature.yml b/.github/workflows/build-and-test-feature.yml index 390637a86..c2e162918 100644 --- a/.github/workflows/build-and-test-feature.yml +++ b/.github/workflows/build-and-test-feature.yml @@ -22,12 +22,12 @@ jobs: arch: [amd64, arm64] steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: persist-credentials: false - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.GPUCIBOT_DOCKERHUB_USER || vars.DOCKERHUB_USER }} password: ${{ secrets.GPUCIBOT_DOCKERHUB_TOKEN || secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/build-test-and-push-linux-image.yml b/.github/workflows/build-test-and-push-linux-image.yml index 86246f87c..0aa7e4e99 100644 --- a/.github/workflows/build-test-and-push-linux-image.yml +++ b/.github/workflows/build-test-and-push-linux-image.yml @@ -41,7 +41,7 @@ jobs: version: ${{ steps.json.outputs.version }} steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false @@ -58,7 +58,7 @@ jobs: container_env: "${{ inputs.container_env }}" - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.GPUCIBOT_DOCKERHUB_USER || vars.DOCKERHUB_USER }} password: ${{ secrets.GPUCIBOT_DOCKERHUB_TOKEN || secrets.DOCKERHUB_TOKEN }} @@ -80,7 +80,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.GPUCIBOT_DOCKERHUB_USER || vars.DOCKERHUB_USER }} password: ${{ secrets.GPUCIBOT_DOCKERHUB_TOKEN || secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/build-test-and-push-windows-image.yml b/.github/workflows/build-test-and-push-windows-image.yml index 88ce0710d..55f8c1a5e 100644 --- a/.github/workflows/build-test-and-push-windows-image.yml +++ b/.github/workflows/build-test-and-push-windows-image.yml @@ -37,7 +37,7 @@ jobs: - { edition: "2022", runner: "${{ github.repository != 'rapidsai/devcontainers' && 'windows-2022' || 'windows-amd64-cpu4' }}" } steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false @@ -63,7 +63,7 @@ jobs: EOF - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.GPUCIBOT_DOCKERHUB_USER || vars.DOCKERHUB_USER }} password: ${{ secrets.GPUCIBOT_DOCKERHUB_TOKEN || secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d935a3eee..588cb0339 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -20,7 +20,7 @@ jobs: pull-requests: write steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Copy common scripts into features uses: ./.github/actions/copy-common-scripts diff --git a/.github/workflows/release-features.yml b/.github/workflows/release-features.yml index 53b2e788a..883e19406 100644 --- a/.github/workflows/release-features.yml +++ b/.github/workflows/release-features.yml @@ -13,7 +13,7 @@ jobs: packages: write steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Copy common scripts into features uses: ./.github/actions/copy-common-scripts diff --git a/.github/workflows/release-linux.yml b/.github/workflows/release-linux.yml index a8daee82e..40553ebd2 100644 --- a/.github/workflows/release-linux.yml +++ b/.github/workflows/release-linux.yml @@ -17,7 +17,7 @@ jobs: scenarios: "${{ steps.matrix.outputs.scenarios }}" steps: - name: "Checkout ${{ github.repository }}" - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false @@ -39,7 +39,7 @@ jobs: linux: ${{ steps.matrix.outputs.linux }} steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/release-windows.yml b/.github/workflows/release-windows.yml index 3c29f7561..046562bb0 100644 --- a/.github/workflows/release-windows.yml +++ b/.github/workflows/release-windows.yml @@ -16,7 +16,7 @@ jobs: windows: ${{ steps.matrix.outputs.windows }} steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5211d3bfc..ae621979a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,7 +41,7 @@ jobs: scenarios: "${{ steps.matrix.outputs.scenarios }}" steps: - name: "Checkout ${{ github.repository }}" - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false @@ -64,7 +64,7 @@ jobs: windows: ${{ steps.matrix.outputs.windows }} steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 99af3309f..96d542967 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -40,7 +40,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: persist-credentials: false @@ -62,7 +62,7 @@ jobs: scenarios: ${{ steps.matrix.outputs.scenarios }} steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false @@ -134,7 +134,7 @@ jobs: windows: ${{ steps.matrix.outputs.windows }} steps: - name: Checkout ${{ github.repository }} - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false From f2638c33c456729acd9cf494e05ae925db22feed Mon Sep 17 00:00:00 2001 From: ptaylor Date: Fri, 3 Apr 2026 11:37:47 -0700 Subject: [PATCH 2/6] update devcontainer CLI version to v0.85.0 --- .github/actions/build-linux-image/action.yml | 2 +- .github/actions/install-devcontainers-cli/action.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/build-linux-image/action.yml b/.github/actions/build-linux-image/action.yml index 5ed505286..865ba8e2e 100644 --- a/.github/actions/build-linux-image/action.yml +++ b/.github/actions/build-linux-image/action.yml @@ -44,7 +44,7 @@ runs: if test "${push}" = true; then outputs+=(--output "type=image,compression=zstd,force-compression=true,oci-mediatypes=true,push=true,push-by-digest=true,name=${repo}"); # HACK: remove the `-t` arg from the `docker buildx build` command generated by `devcontainer build` - sed -i 's/,t.map(v=>l.push("-t",v))//g' "$(npm list -g | head -n1)"/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js; + sed -i 's/,t.map(G=>l.push("-t",G))//g' "$(npm list -g | head -n1)"/node_modules/@devcontainers/cli/dist/spec-node/devContainersSpecCLI.js; fi until devcontainer build \ diff --git a/.github/actions/install-devcontainers-cli/action.yml b/.github/actions/install-devcontainers-cli/action.yml index d2332818f..7c94f1c32 100644 --- a/.github/actions/install-devcontainers-cli/action.yml +++ b/.github/actions/install-devcontainers-cli/action.yml @@ -14,4 +14,4 @@ runs: run: | sudo apt update; sudo apt install -y --no-install-recommends build-essential; - npm install -g @devcontainers/cli@v0.80.2; + npm install -g @devcontainers/cli@v0.85.0; From f2c820c34b4675518a07b204a2a03a876c44d249 Mon Sep 17 00:00:00 2001 From: ptaylor Date: Fri, 3 Apr 2026 12:02:10 -0700 Subject: [PATCH 3/6] add cacheFrom to devcontainer.json files --- .devcontainer/cuda12.9-conda/devcontainer.json | 5 ++++- .devcontainer/cuda12.9-pip/devcontainer.json | 5 ++++- .devcontainer/cuda13.0-conda/devcontainer.json | 5 ++++- .devcontainer/cuda13.0-pip/devcontainer.json | 5 ++++- .devcontainer/cuda13.1-conda/devcontainer.json | 5 ++++- .devcontainer/cuda13.1-pip/devcontainer.json | 5 ++++- 6 files changed, 24 insertions(+), 6 deletions(-) diff --git a/.devcontainer/cuda12.9-conda/devcontainer.json b/.devcontainer/cuda12.9-conda/devcontainer.json index 1dbfc7695..14ca2736e 100644 --- a/.devcontainer/cuda12.9-conda/devcontainer.json +++ b/.devcontainer/cuda12.9-conda/devcontainer.json @@ -6,7 +6,10 @@ "CUDA": "12.9", "PYTHON_PACKAGE_MANAGER": "conda", "BASE": "rapidsai/devcontainers:26.06-cpp-mambaforge" - } + }, + "cacheFrom": [ + "ghcr.io/rapidsai/devcontainers/devcontainer:26.06-cuda12.9-conda" + ] }, "runArgs": [ "--rm", diff --git a/.devcontainer/cuda12.9-pip/devcontainer.json b/.devcontainer/cuda12.9-pip/devcontainer.json index 89797b630..11ae65eda 100644 --- a/.devcontainer/cuda12.9-pip/devcontainer.json +++ b/.devcontainer/cuda12.9-pip/devcontainer.json @@ -6,7 +6,10 @@ "CUDA": "12.9", "PYTHON_PACKAGE_MANAGER": "pip", "BASE": "rapidsai/devcontainers:26.06-cpp-cuda12.9-ucx1.19.0-openmpi5.0.10" - } + }, + "cacheFrom": [ + "ghcr.io/rapidsai/devcontainers/devcontainer:26.06-cuda12.9-pip" + ] }, "runArgs": [ "--rm", diff --git a/.devcontainer/cuda13.0-conda/devcontainer.json b/.devcontainer/cuda13.0-conda/devcontainer.json index e3723b08a..3dd393c69 100644 --- a/.devcontainer/cuda13.0-conda/devcontainer.json +++ b/.devcontainer/cuda13.0-conda/devcontainer.json @@ -6,7 +6,10 @@ "CUDA": "13.0", "PYTHON_PACKAGE_MANAGER": "conda", "BASE": "rapidsai/devcontainers:26.06-cpp-mambaforge" - } + }, + "cacheFrom": [ + "ghcr.io/rapidsai/devcontainers/devcontainer:26.06-cuda13.0-conda" + ] }, "runArgs": [ "--rm", diff --git a/.devcontainer/cuda13.0-pip/devcontainer.json b/.devcontainer/cuda13.0-pip/devcontainer.json index 94bf3f489..40916a517 100644 --- a/.devcontainer/cuda13.0-pip/devcontainer.json +++ b/.devcontainer/cuda13.0-pip/devcontainer.json @@ -6,7 +6,10 @@ "CUDA": "13.0", "PYTHON_PACKAGE_MANAGER": "pip", "BASE": "rapidsai/devcontainers:26.06-cpp-cuda13.0-ucx1.19.0-openmpi5.0.10" - } + }, + "cacheFrom": [ + "ghcr.io/rapidsai/devcontainers/devcontainer:26.06-cuda13.0-pip" + ] }, "runArgs": [ "--rm", diff --git a/.devcontainer/cuda13.1-conda/devcontainer.json b/.devcontainer/cuda13.1-conda/devcontainer.json index 4bccee23c..a77c4f0d9 100644 --- a/.devcontainer/cuda13.1-conda/devcontainer.json +++ b/.devcontainer/cuda13.1-conda/devcontainer.json @@ -6,7 +6,10 @@ "CUDA": "13.1", "PYTHON_PACKAGE_MANAGER": "conda", "BASE": "rapidsai/devcontainers:26.06-cpp-mambaforge" - } + }, + "cacheFrom": [ + "ghcr.io/rapidsai/devcontainers/devcontainer:26.06-cuda13.1-conda" + ] }, "runArgs": [ "--rm", diff --git a/.devcontainer/cuda13.1-pip/devcontainer.json b/.devcontainer/cuda13.1-pip/devcontainer.json index 414c9e001..a37c38cdc 100644 --- a/.devcontainer/cuda13.1-pip/devcontainer.json +++ b/.devcontainer/cuda13.1-pip/devcontainer.json @@ -6,7 +6,10 @@ "CUDA": "13.1", "PYTHON_PACKAGE_MANAGER": "pip", "BASE": "rapidsai/devcontainers:26.06-cpp-cuda13.1-ucx1.19.0-openmpi5.0.10" - } + }, + "cacheFrom": [ + "ghcr.io/rapidsai/devcontainers/devcontainer:26.06-cuda13.1-pip" + ] }, "runArgs": [ "--rm", From c675ff30e284ec69e8b51506eba8d3e9509290ad Mon Sep 17 00:00:00 2001 From: ptaylor Date: Fri, 3 Apr 2026 12:02:21 -0700 Subject: [PATCH 4/6] add build-devcontainers.yaml workflow --- .github/workflows/build-devcontainers.yml | 58 +++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 .github/workflows/build-devcontainers.yml diff --git a/.github/workflows/build-devcontainers.yml b/.github/workflows/build-devcontainers.yml new file mode 100644 index 000000000..b9528c00c --- /dev/null +++ b/.github/workflows/build-devcontainers.yml @@ -0,0 +1,58 @@ +name: Build devcontainers + +concurrency: + group: build-from-${{ github.ref_name }} + cancel-in-progress: true + +on: + workflow_call: + inputs: + cuda: + description: | + Stringified JSON array of CUDA versions to run this workflow for. + This is used to select .devcontainer/ directories local to wherever this workflow is invoked from. + For example, if a repository has directories '.devcontainer/cuda12.9-pip/' and '.devcontainer/cuda13.1-pip/', + '["12.9", "13.1"]' could be passed here to build both of those devcontainers in CI. + type: string + default: '["12.9", "13.1"]' + python_package_manager: + description: | + Stringified JSON array of Python package managers to run devcontainer builds for. + One of: '["conda"]', '["pip"]', '["conda", "pip"]'. + type: string + default: '["conda", "pip"]' + push: + type: string + default: true + workflow_dispatch: + inputs: + cuda: + description: | + Stringified JSON array of CUDA versions to run this workflow for. + This is used to select .devcontainer/ directories local to wherever this workflow is invoked from. + For example, if a repository has directories '.devcontainer/cuda12.9-pip/' and '.devcontainer/cuda13.1-pip/', + '["12.9", "13.1"]' could be passed here to build both of those devcontainers in CI. + type: string + default: '["12.9", "13.1"]' + python_package_manager: + description: | + Stringified JSON array of Python package managers to run devcontainer builds for. + One of: '["conda"]', '["pip"]', '["conda", "pip"]'. + type: string + default: '["conda", "pip"]' + push: + type: string + default: true + +jobs: + build: + name: Build devcontainers + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/build-devcontainers.yaml@fea/build-devcontainer + permissions: + packages: write + with: + retries: 1 + cuda: "${{ inputs.cuda }}" + python_package_manager: "${{ inputs.python_package_manager }}" + push: "${{ inputs.push }}" From 0eb976e4f22bc6e9adc2ef10c86031cd4015c527 Mon Sep 17 00:00:00 2001 From: ptaylor Date: Fri, 3 Apr 2026 17:18:13 -0700 Subject: [PATCH 5/6] build devcontainers in release workflow --- .github/workflows/build-devcontainers.yml | 1 - .github/workflows/release.yml | 24 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-devcontainers.yml b/.github/workflows/build-devcontainers.yml index b9528c00c..f569b7dcf 100644 --- a/.github/workflows/build-devcontainers.yml +++ b/.github/workflows/build-devcontainers.yml @@ -52,7 +52,6 @@ jobs: permissions: packages: write with: - retries: 1 cuda: "${{ inputs.cuda }}" python_package_manager: "${{ inputs.python_package_manager }}" push: "${{ inputs.push }}" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae621979a..e73c28d6b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -115,3 +115,27 @@ jobs: needs: features-matrix secrets: inherit uses: ./.github/workflows/release-features.yml + + build-devcontainers-after-images-released: + if: needs.image-matrix.outputs.linux != '{"include":[]}' + needs: [image-matrix, release-linux] + name: Build devcontainers + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/build-devcontainers.yaml@fea/build-devcontainer + permissions: + packages: write + with: + push: true + cuda: '["12.9", "13.0", "13.1"]' + + build-devcontainers-after-features-released: + if: needs.image-matrix.outputs.linux == '{"include":[]}' && (needs.features-matrix.outputs.features != '[]' || needs.features-matrix.outputs.scenarios != '[]') + needs: [features-matrix, release-features] + name: Build devcontainers + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/build-devcontainers.yaml@fea/build-devcontainer + permissions: + packages: write + with: + push: true + cuda: '["12.9", "13.0", "13.1"]' From 60c9761fd4eabb21ed0302de6f830360c0d50562 Mon Sep 17 00:00:00 2001 From: Paul Taylor <178183+trxcllnt@users.noreply.github.com> Date: Thu, 30 Apr 2026 10:51:18 -0700 Subject: [PATCH 6/6] Update .github/actions/setup-runner-env/action.yml Co-authored-by: Bradley Dice --- .github/actions/setup-runner-env/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/setup-runner-env/action.yml b/.github/actions/setup-runner-env/action.yml index 6b7ae15df..4cdc28919 100644 --- a/.github/actions/setup-runner-env/action.yml +++ b/.github/actions/setup-runner-env/action.yml @@ -26,7 +26,7 @@ runs: - if: runner.environment == 'self-hosted' name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: '24'