Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
49d453f
use ubuntu26.04 for gcc-15 images
trxcllnt Jun 16, 2026
159a1f3
run windows builds on 8-core runners
trxcllnt Jun 20, 2026
b65a253
Merge branch 'main' into fea/ubuntu26.04-gcc15
trxcllnt Jun 23, 2026
b0d195c
Merge branch 'main' into fea/ubuntu26.04-gcc15
trxcllnt Jun 24, 2026
e653395
Merge branch 'main' of github.com:rapidsai/devcontainers into fea/ubu…
trxcllnt Jun 24, 2026
ba5fabf
Merge branch 'fea/ubuntu26.04-gcc15' of github.com:trxcllnt/devcontai…
trxcllnt Jun 24, 2026
28f99f8
Revert "run windows builds on 8-core runners"
trxcllnt Jun 24, 2026
25cf3b0
vendor git feature with fixes for ubuntu 26.04
trxcllnt Jun 25, 2026
05d1680
update github-cli feature version and automatically install gh-nv-gha…
trxcllnt Jun 25, 2026
1edb7a8
revert changes to utils/install.sh
trxcllnt Jun 25, 2026
4daa640
install gh CLI extension correctly
trxcllnt Jun 25, 2026
8133dbd
install gh-nv-gha-aws without using the GH API
trxcllnt Jun 25, 2026
3e0b59f
find git version from git tags without using the github API
trxcllnt Jun 25, 2026
a0e380b
Merge branch 'main' of github.com:rapidsai/devcontainers into fea/ubu…
trxcllnt Jun 25, 2026
8a56558
bump feature version
trxcllnt Jun 25, 2026
c2a11ed
bump actions/checkout version
trxcllnt Jun 25, 2026
343edf5
parallelize feature scenario tests
trxcllnt Jun 25, 2026
e8b3939
fixes for non-ubuntu
trxcllnt Jun 25, 2026
47c1ca8
only source find-version-from-git-tags.sh
trxcllnt Jun 25, 2026
8acfb47
remove unnecessary file
trxcllnt Jun 25, 2026
c1aa2bb
manually install ubuntu-toolchain-r sources instead of using apt-add-…
trxcllnt Jun 26, 2026
7b32e4e
Merge branch 'main' of github.com:rapidsai/devcontainers into fea/ubu…
trxcllnt Jun 26, 2026
45fd5ee
bump feature version
trxcllnt Jun 26, 2026
e8ca242
use uname -m instead of dpkg --print-architecture
trxcllnt Jun 26, 2026
69962c9
uname -p -> uname -m
trxcllnt Jun 26, 2026
639527b
install libcutensor2 in ubuntu26.04
trxcllnt Jun 26, 2026
5f06889
install clang-tools before CUDA
trxcllnt Jun 26, 2026
30e39ee
revert changes to common scripts
trxcllnt Jun 26, 2026
96d8ea1
revert version bumps for features that didn't change
trxcllnt Jun 26, 2026
d84bfed
Merge branch 'main' of github.com:rapidsai/devcontainers into fea/ubu…
trxcllnt Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/actions/build-and-test-feature/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ description: Test feature

inputs:
args: {type: string, required: true}
scenario: {type: string, required: false}
gh_token: {type: string, defaut: '', required: false}
aws_idp_url: {type: string, defaut: '', required: false}
aws_role_arn: {type: string, defaut: '', required: false}
Expand All @@ -26,11 +27,12 @@ runs:
- name: Test feature
shell: bash
run: |
devcontainer features test $ARGS ./features;
devcontainer features test --project-folder ./features $ARGS ${SCENARIO:+--filter "$SCENARIO"}
env:
NODE_NO_WARNINGS: 1
VAULT_S3_TTL: "900" # 15 minutes
ARGS: ${{ inputs.args }}
SCENARIO: "${{ inputs.scenario }}"
gh_token: "${{ inputs.gh_token }}"
aws_idp_url: "${{ inputs.aws_idp_url }}"
aws_role_arn: "${{ inputs.aws_role_arn }}"
Expand Down
41 changes: 23 additions & 18 deletions .github/actions/feature-matrix/action.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ join_with_delimiter() {
}

find_features_with_tests() {
find ${@:2} -mindepth 1 -type f -name "$1" ! -wholename '*/test/_global/*' \
-exec bash -c 'echo {} | sed -r s@features/test/\(.*\)/.*@\\1@' \; \
| sort | uniq ;
find "${@:2}" -mindepth 1 -type f -name "$1" ! -wholename '*/test/_global/*' \
-exec bash -c 'echo {} | sed -r s@features/test/\(.*\)/.*@\\1@' \; \
| sort | uniq ;
}

full_matrix="0";
Expand All @@ -22,35 +22,40 @@ esac

files="${@}";

features="";
scenarios="";
declare -a features=();
declare -a scenarios=();

if [ "${full_matrix}" == "1" ] || grep -q "\.github/" <<< "$files"; then
features="$(find_features_with_tests 'test.sh' 'features/test')";
scenarios="$(find_features_with_tests 'scenarios.json' 'features/test')";
declare -a features="($(find_features_with_tests 'test.sh' 'features/test'))"
declare -a scenarios="($(find_features_with_tests 'scenarios.json' 'features/test'))"
elif echo "$files" | grep -q "features/"; then
files="$(join_with_delimiter "\n" $files | grep "features/")";
files="$(echo -e "$files")";
files="$(join_with_delimiter "\n" $files | grep "features/")"
declare -a files="($(echo -e "$files"))"
changed=();
for x in ${files}; do
for x in "${files[@]}"; do
x="${x##features/src/}";
x="${x##features/test/}";
x="features/test/${x%%/*}";
changed+=("${x}");
done;
changed="${changed[@]}";
features="$(find_features_with_tests 'test.sh' ${changed})";
scenarios="$(find_features_with_tests 'scenarios.json' ${changed})";
done
declare -a features="($(find_features_with_tests 'test.sh' "${changed[@]}"))"
declare -a scenarios="($(find_features_with_tests 'scenarios.json' "${changed[@]}"))"
fi

if [[ -n "$(echo "$features")" ]]; then
features="[\"$(join_with_delimiter '","' $features)\"]";
if test "${#features[@]}" -gt 0; then
features="[\"$(join_with_delimiter '","' "${features[@]}")\"]";
fi

echo "features=${features:-[]}";

if [[ -n "$(echo "$scenarios")" ]]; then
scenarios="[\"$(join_with_delimiter '","' $scenarios)\"]";
if test "${#scenarios[@]}" -gt 0; then
declare -a scenarios_json=()
for feature in "${scenarios[@]}"; do
if test -f "features/test/$feature/scenarios.json"; then
scenarios_json+=("{\"feature\": \"$feature\", \"scenarios\": $(jq -cM "keys | @json" "features/test/$feature/scenarios.json" | tr -d '\n')}")
fi
done
scenarios="[$(IFS=,; echo "${scenarios_json[*]}")]";
fi

echo "scenarios=${scenarios:-[]}";
2 changes: 1 addition & 1 deletion .github/actions/image-matrix/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,6 @@ runs:
.github/actions/image-matrix/action.sh \
"$FULL_MATRIX" \
"$FEATURES" \
"$SCENARIOS" \
"$(jq 'map(.feature)' <<< "$SCENARIOS")" \
"$CHANGED_FILES" \
| tee -a $GITHUB_OUTPUT;
12 changes: 9 additions & 3 deletions .github/workflows/build-and-test-feature.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,24 @@ on:
args:
type: string
required: true
scenarios:
type: string
default: '[""]'
required: false

jobs:

test:
name: ${{ format(inputs.name, matrix.arch) }}
name: ${{ format(inputs.name, matrix.arch, matrix.scenario || '') }}
runs-on: ${{ fromJSON(github.repository != 'rapidsai/devcontainers' && '"ubuntu-latest"' || format('"linux-{0}-cpu4"', matrix.arch)) }}
strategy:
fail-fast: false
matrix:
arch: [amd64, arm64]
scenario: ${{ fromJSON(inputs.scenarios || '[""]') }}
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

Expand All @@ -36,9 +41,10 @@ jobs:
uses: ./.github/actions/build-and-test-feature
with:
args: "${{ inputs.args }}"
scenario: "${{ matrix.scenario }}"
gh_token: "${{ secrets.GIST_REPO_READ_ORG_GITHUB_TOKEN }}"
aws_idp_url: ${{ secrets.GIST_REPO_READ_ORG_GITHUB_TOKEN && 'https://token.rapids.nvidia.com' || '' }}
aws_role_arn: "${{ secrets.GIST_REPO_READ_ORG_GITHUB_TOKEN && 'arn:aws:iam::279114543810:role/rapids-token-sccache-devs' || '' }}"
rw_sccache_bucket: "${{ secrets.GIST_REPO_READ_ORG_GITHUB_TOKEN && 'rapids-sccache-devs' || '' }}"
rw_sccache_region: "${{ vars.AWS_REGION }}"
sccache_dist_scheduler_url: "sccache.rapids.nvidia.com"
sccache_dist_scheduler_url: "https://sccache.rapids.nvidia.com"
2 changes: 1 addition & 1 deletion .github/workflows/build-test-and-push-linux-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
version: ${{ steps.json.outputs.version }}
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-test-and-push-windows-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ jobs:
pull-requests: write
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
persist-credentials: true

- name: Copy common scripts into features
uses: ./.github/actions/copy-common-scripts
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-features.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
packages: write
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
scenarios: "${{ steps.matrix.outputs.scenarios }}"
steps:
- name: "Checkout ${{ github.repository }}"
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
Expand All @@ -45,7 +45,7 @@ jobs:
linux: ${{ steps.matrix.outputs.linux }}
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
windows: ${{ steps.matrix.outputs.windows }}
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
scenarios: "${{ steps.matrix.outputs.scenarios }}"
steps:
- name: "Checkout ${{ github.repository }}"
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
Expand All @@ -71,7 +71,7 @@ jobs:
windows: ${{ steps.matrix.outputs.windows }}
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
Expand Down
17 changes: 9 additions & 8 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

Expand Down Expand Up @@ -65,7 +65,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

Expand All @@ -90,7 +90,7 @@ jobs:
scenarios: ${{ steps.matrix.outputs.scenarios }}
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
Expand Down Expand Up @@ -138,10 +138,11 @@ jobs:
strategy:
fail-fast: false
matrix:
feature: ${{ fromJSON(needs.features-matrix.outputs.scenarios) }}
include: ${{ fromJSON(needs.features-matrix.outputs.scenarios) }}
with:
name: "{0}"
args: "-f ${{ matrix.feature }} --skip-autogenerated"
name: "{1} ({0})"
scenarios: "${{ matrix.scenarios }}"
args: "-f ${{ matrix.feature }} --skip-autogenerated --skip-duplicated"

run-generated-feature-tests:
if: needs.features-matrix.outputs.features != '[]'
Expand All @@ -157,7 +158,7 @@ jobs:
feature: ${{ fromJSON(needs.features-matrix.outputs.features) }}
with:
name: "{0}"
args: "-f ${{ matrix.feature }} -i ubuntu:24.04 --skip-scenarios"
args: "-f ${{ matrix.feature }} -i ubuntu:24.04 --skip-scenarios --skip-duplicated"

image-matrix:
name: Determine image matrix
Expand All @@ -171,7 +172,7 @@ jobs:
windows: ${{ steps.matrix.outputs.windows }}
steps:
- name: Checkout ${{ github.repository }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
Expand Down
2 changes: 1 addition & 1 deletion features/src/cccl-dev/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "NVIDIA CCCL development utilities",
"id": "cccl-dev",
"version": "26.8.0",
"version": "26.8.1",
"description": "A feature to install NVIDIA CCCL development utilities",
"options": {
"litVersion": {
Expand Down
2 changes: 1 addition & 1 deletion features/src/cccl-dev/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ PKG=("gettext-base" "libtbb-dev" "pbzip2" "zstd" "wget");
PKG_TO_REMOVE=();

# Install gcc and g++ because we have to build psutil wheel for non-x86
if [[ "$(uname -p)" != "x86_64" ]]; then
if [[ "$(uname -m)" != "x86_64" ]]; then
if ! command -V gcc >/dev/null 2>&1; then PKG_TO_REMOVE+=("gcc"); fi
if ! command -V g++ >/dev/null 2>&1; then PKG_TO_REMOVE+=("g++"); fi
fi
Expand Down
2 changes: 1 addition & 1 deletion features/src/cuda/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "CUDA Toolkit",
"id": "cuda",
"version": "26.8.1",
"version": "26.8.2",
"description": "A feature to install the NVIDIA CUDA Toolkit",
"options": {
"version": {
Expand Down
49 changes: 33 additions & 16 deletions features/src/cuda/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,21 @@ check_packages \

echo "Downloading CUDA keyring...";

export NVARCH="$(uname -p)";
export NVARCH="$(uname -m)";
export OSNAME="$(
. /etc/os-release;
major="$(cut -d'.' -f1 <<< "${VERSION_ID}")";
minor="$(cut -d'.' -f2 <<< "${VERSION_ID}")";
echo "$ID$((major - (major % 2)))${minor}";
)";

export OSNAME_PREV="$(
. /etc/os-release;
major="$(cut -d'.' -f1 <<< "${VERSION_ID}")";
minor="$(cut -d'.' -f2 <<< "${VERSION_ID}")";
echo "$ID$((major - (major % 2) - 2))${minor}";
)";

VERSION="${CUDA_VERSION:-${VERSION:-13.3.0}}";

if [[ "$NVARCH" == aarch64 ]]; then
Expand Down Expand Up @@ -200,22 +207,32 @@ if [ "${INSTALLNCCL:-false}" = true ] \
fi

if [ "${INSTALLCUTENSOR:-false}" = true ]; then
# HACK: libcutensor-dev isn't currently in the ubuntu22.04 repo,
# but is in ubuntu20.04. Detect this and download the 20.04 deb.
if ! dpkg -s libcutensor-dev > /dev/null 2>&1; then
# If `libcutensor-deb` is available in the apt repo, install it
if ! dpkg -p libcutensor-dev 2>&1 | grep -q "not available" >/dev/null 2>&1; then
# If `libcutensor-dev` is available in the apt repo, install it
if dpkg -p libcutensor-dev 2>&1 | grep -q "not available" >/dev/null 2>&1; then
# HACK:
# If libcutensor-dev isn't in the apt repo for the current OS
# version, download and install it from the prev version repo
CUTENSOR_DEBS=()
prev_cuda_repo="${cuda_repo_base}/${OSNAME_PREV}/${NVARCH}";
CUTENSOR_DEBS+=($(get_cuda_deb "${prev_cuda_repo}" libcutensor1 2>/dev/null || :));
CUTENSOR_DEBS+=($(get_cuda_deb "${prev_cuda_repo}" libcutensor2 2>/dev/null || :));
if test "${#CUTENSOR_DEBS[@]}" -eq 0 || [ "${INSTALLDEVPACKAGES:-false}" = true ]; then
CUTENSOR_DEBS+=($(get_cuda_deb "${prev_cuda_repo}" libcutensor-dev 2>/dev/null || :));
fi
if test "${#CUTENSOR_DEBS[@]}" -eq 0; then
echo "Error: No matching .deb found for libcutensor or libcutensor-dev" >&2
exit 1;
fi
PKGS+=("${CUTENSOR_DEBS[@]}")
else
if dpkg -s libcutensor1 >/dev/null 2>&1; then
PKGS+=("libcutensor1");
if [ "${INSTALLDEVPACKAGES:-false}" = true ]; then
PKGS+=("libcutensor-dev");
fi
else
# If it's not in the apt repo for the current OS version, install it from the 20.04 repo
focal_cuda_repo="${cuda_repo_base}/ubuntu2004/${NVARCH}";
PKGS+=("$(get_cuda_deb "${focal_cuda_repo}" libcutensor1)");
if [ "${INSTALLDEVPACKAGES:-false}" = true ]; then
PKGS+=("$(get_cuda_deb "${focal_cuda_repo}" libcutensor-dev)");
fi
fi
if dpkg -s libcutensor2 >/dev/null 2>&1; then
PKGS+=("libcutensor2");
fi
if [ "${INSTALLDEVPACKAGES:-false}" = true ]; then
PKGS+=("libcutensor-dev");
fi
fi
fi
Expand Down
Loading
Loading