diff --git a/.devcontainer/cuda12.2-rapids-conda b/.devcontainer/cuda12.2-rapids-conda new file mode 120000 index 00000000000..74d19d8f3fc --- /dev/null +++ b/.devcontainer/cuda12.2-rapids-conda @@ -0,0 +1 @@ +../ci/rapids/cuda12.2-conda \ No newline at end of file diff --git a/.devcontainer/docker-entrypoint.sh b/.devcontainer/docker-entrypoint.sh index ce90ea701d9..afe41db477b 100755 --- a/.devcontainer/docker-entrypoint.sh +++ b/.devcontainer/docker-entrypoint.sh @@ -40,6 +40,8 @@ else # # We cannot use `su -w` because that's not supported by the `su` in Ubuntu18.04, so we reset the following # environment variables to the expected values, then pass through everything else from the startup environment. + export VIRTUAL_ENV=; + export VIRTUAL_ENV_PROMPT=; export HOME="$HOME_FOLDER"; export XDG_CACHE_HOME="$HOME_FOLDER/.cache"; export XDG_CONFIG_HOME="$HOME_FOLDER/.config"; diff --git a/.devcontainer/launch.sh b/.devcontainer/launch.sh index 9d8de47f46e..d67e1f73993 100755 --- a/.devcontainer/launch.sh +++ b/.devcontainer/launch.sh @@ -217,7 +217,7 @@ launch_docker() { RUN_ARGS+=(--entrypoint "${WORKSPACE_FOLDER:-/home/coder/cccl}/.devcontainer/docker-entrypoint.sh") fi - if test -n "${SSH_AUTH_SOCK:-}"; then + if test -n "${SSH_AUTH_SOCK:-}" && test -e "${SSH_AUTH_SOCK:-}"; then ENV_VARS+=(--env "SSH_AUTH_SOCK=/tmp/ssh-auth-sock") MOUNTS+=(--mount "source=${SSH_AUTH_SOCK},target=/tmp/ssh-auth-sock,type=bind") fi diff --git a/.github/workflows/build-rapids.yml b/.github/workflows/build-rapids.yml new file mode 100644 index 00000000000..fe4a9697be8 --- /dev/null +++ b/.github/workflows/build-rapids.yml @@ -0,0 +1,158 @@ +name: Build all RAPIDS repositories + +on: + workflow_call: + +jobs: + check-event: + name: Check GH Event + runs-on: ubuntu-latest + outputs: + ok: ${{ steps.check_gh_event.outputs.ok }} + steps: + - id: check_gh_event + name: Check GH Event + shell: bash + run: | + [[ '${{ github.event_name }}' == 'push' && '${{ github.repository }}' == 'NVIDIA/cccl' ]] || \ + [[ '${{ github.event_name }}' == 'schedule' && '${{ github.repository }}' == 'NVIDIA/cccl' ]] || \ + [[ '${{ github.event_name }}' == 'pull_request' && '${{ github.repository }}' != 'NVIDIA/cccl' ]] \ + && echo "ok=true" | tee -a $GITHUB_OUTPUT \ + || echo "ok=false" | tee -a $GITHUB_OUTPUT; + + build-rapids: + name: "${{ matrix.libs }}" + if: needs.check-event.outputs.ok == 'true' + needs: check-event + runs-on: ${{ fromJSON(github.repository != 'NVIDIA/cccl' && '"ubuntu-latest"' || '"linux-amd64-cpu32"') }} + strategy: + fail-fast: false + matrix: + include: + - { cuda: '12.2', libs: 'rmm KvikIO cudf cudf_kafka cuspatial', } + - { cuda: '12.2', libs: 'rmm ucxx raft cuvs', } + - { cuda: '12.2', libs: 'rmm ucxx raft cumlprims_mg cuml', } + - { cuda: '12.2', libs: 'rmm ucxx raft cugraph-ops wholegraph cugraph' } + permissions: + id-token: write + contents: read + steps: + - name: Checkout repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: false + - name: Add NVCC problem matcher + run: echo "::add-matcher::$(pwd)/.github/problem-matchers/problem-matcher.json" + - uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: arn:aws:iam::279114543810:role/gha-oidc-NVIDIA + aws-region: us-east-2 + role-duration-seconds: 43200 # 12h + - name: Run command # Do not change this step's name, it is checked in parse-job-times.py + env: + CI: true + RAPIDS_LIBS: ${{ matrix.libs }} + # Uncomment any of these to customize the git repo and branch for a RAPIDS lib: + # RAPIDS_cmake_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_cudf_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_cudf_kafka_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_cugraph_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_cugraph_ops_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_cuml_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_cumlprims_mg_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_cuspatial_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_cuvs_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_KvikIO_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_raft_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_rmm_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + # RAPIDS_ucxx_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-0.39"}' + # RAPIDS_wholegraph_GIT_REPO: '{"upstream": "rapidsai", "tag": "branch-24.08"}' + run: | + cat <<"EOF" > "$RUNNER_TEMP/ci-entrypoint.sh" + #! /usr/bin/env bash + # Start the ssh-agent and add the repo deploy keys + if ! pgrep ssh-agent >/dev/null 2>&1; then eval "$(ssh-agent -s)"; fi + ssh-add - <<< '${{ secrets.RAPIDSAI_CUMLPRIMS_DEPLOY_KEY }}' + ssh-add - <<< '${{ secrets.RAPIDSAI_CUGRAPH_OPS_DEPLOY_KEY }}' + devcontainer-utils-init-ssh-deploy-keys || true + exec "$@" + EOF + + cat <<"EOF" > "$RUNNER_TEMP/ci.sh" + #! /usr/bin/env bash + set -eo pipefail + + . ~/cccl/ci/rapids/post-create-command.sh; + + declare -a failures + declare -A failures_map + + # Configure and build each lib with -DBUILD_TESTS=OFF, then again with -DBUILD_TESTS=ON + for RAPIDS_ENABLE_TESTS in OFF ON; do + _apply_manifest_modifications; + for lib in ${RAPIDS_LIBS}; do + sccache -z + if ! configure-${lib}-cpp || ! build-${lib}-cpp; then + if ! test -v failures_map["${lib}"]; then + failures+=("${lib}") + failures_map["${lib}"]=1 + fi + fi + sccache --show-adv-stats + done + done + + # Print failures and exit + if test ${#failures[@]} -gt 0; then + echo "::error:: Failures: ${failures[*]}" + echo -e "::group::️❗ \e[1;31mInstructions to Reproduce CI Failure Locally\e[0m" + echo "::error:: To replicate this failure locally, follow the steps below:" + echo "1. Clone the repository, and navigate to the correct branch and commit:" + echo " git clone --branch $GITHUB_REF_NAME --single-branch https://github.com/$GITHUB_REPOSITORY.git && cd $(echo $GITHUB_REPOSITORY | cut -d'/' -f2) && git checkout $GITHUB_SHA" + echo "" + echo "2. Run the failed command inside the same Docker container used by this CI job:" + cat <<__EOF + RAPIDS_LIBS='${RAPIDS_LIBS}'$(for lib in cmake ${RAPIDS_LIBS}; do var=RAPIDS_${lib//-/_}_GIT_REPO; if test -v "$var" && test -n "${!var}"; then echo -n " $var='${!var}'"; fi; done) \\ + .devcontainer/launch.sh -d -c ${{matrix.cuda}} -H rapids-conda -- ./ci/rapids/rapids-entrypoint.sh \\ + /bin/bash -li -c 'uninstall-all -j -qqq && clean-all -j && build-all -j -v || exec /bin/bash -li' + __EOF + echo "" + echo "For additional information, see:" + echo " - DevContainer Documentation: https://github.com/NVIDIA/cccl/blob/main/.devcontainer/README.md" + echo " - Continuous Integration (CI) Overview: https://github.com/NVIDIA/cccl/blob/main/ci-overview.md" + exit 1 + fi + EOF + + chmod +x "$RUNNER_TEMP"/ci{,-entrypoint}.sh + + mkdir -p .aws + + cat < .aws/config + [default] + bucket=rapids-sccache-devs + region=us-east-2 + EOF + + cat < .aws/credentials + [default] + aws_access_key_id=$AWS_ACCESS_KEY_ID + aws_session_token=$AWS_SESSION_TOKEN + aws_secret_access_key=$AWS_SECRET_ACCESS_KEY + EOF + + chmod 0600 .aws/credentials + chmod 0664 .aws/config + + .devcontainer/launch.sh \ + --docker \ + --cuda ${{matrix.cuda}} \ + --host rapids-conda \ + --env VAULT_HOST= \ + --env "GITHUB_SHA=$GITHUB_SHA" \ + --env "GITHUB_REF_NAME=$GITHUB_REF_NAME" \ + --env "GITHUB_REPOSITORY=$GITHUB_REPOSITORY" \ + --volume "$RUNNER_TEMP/ci.sh:/ci.sh" \ + --volume "$RUNNER_TEMP/ci-entrypoint.sh:/ci-entrypoint.sh" \ + -- /ci-entrypoint.sh ./ci/rapids/rapids-entrypoint.sh /ci.sh diff --git a/.github/workflows/ci-workflow-nightly.yml b/.github/workflows/ci-workflow-nightly.yml index c9ff4689900..c7406ef817e 100644 --- a/.github/workflows/ci-workflow-nightly.yml +++ b/.github/workflows/ci-workflow-nightly.yml @@ -129,6 +129,17 @@ jobs: id: check-workflow uses: ./.github/actions/workflow-results + build-rapids: + name: Build RAPIDS + secrets: inherit + permissions: + actions: read + packages: read + id-token: write + contents: read + pull-requests: read + uses: ./.github/workflows/build-rapids.yml + # Check all other job statuses. This job gates branch protection checks. ci: name: CI diff --git a/.github/workflows/ci-workflow-pull-request.yml b/.github/workflows/ci-workflow-pull-request.yml index 903da6c519a..948edfbcfb4 100644 --- a/.github/workflows/ci-workflow-pull-request.yml +++ b/.github/workflows/ci-workflow-pull-request.yml @@ -177,6 +177,17 @@ jobs: upload_workflow_artifact: "true" upload_pages_artifact: "false" + build-rapids: + name: Build RAPIDS + secrets: inherit + permissions: + actions: read + packages: read + id-token: write + contents: read + pull-requests: read + uses: ./.github/workflows/build-rapids.yml + # Check all other job statuses. This job gates branch protection checks. ci: name: CI diff --git a/.gitignore b/.gitignore index 062b07cc7fa..768cc77a602 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ _deps/catch2-src/ _site/ compile_commands.json CMakeUserPresets.json +/ci/rapids/.conda +/ci/rapids/.log +/ci/rapids/.repos diff --git a/ci/rapids/cuda12.2-conda/devcontainer.json b/ci/rapids/cuda12.2-conda/devcontainer.json new file mode 100644 index 00000000000..9fb4d3a9086 --- /dev/null +++ b/ci/rapids/cuda12.2-conda/devcontainer.json @@ -0,0 +1,95 @@ +{ + "image": "rapidsai/devcontainers:24.08-cpp-mambaforge-ubuntu22.04", + "runArgs": [ + "--rm", + "--name", + "${localEnv:USER:anon}-${localWorkspaceFolderBasename}-rapids-24.08-cuda12.2-conda" + ], + "hostRequirements": {"gpu": "optional"}, + "features": { + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:24.8": {} + }, + "overrideFeatureInstallOrder": [ + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" + ], + "containerEnv": { + "CI": "${localEnv:CI}", + "CUDAARCHS": "70-real", + "CUDA_VERSION": "12.2", + "DEFAULT_CONDA_ENV": "rapids", + "PYTHONSAFEPATH": "1", + "PYTHONUNBUFFERED": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHON_PACKAGE_MANAGER": "conda", + "SCCACHE_REGION": "us-east-2", + "SCCACHE_BUCKET": "rapids-sccache-devs", + "VAULT_HOST": "https://vault.ops.k8s.rapids.ai", + "HISTFILE": "/home/coder/.cache/._bash_history", + "LIBCUDF_KERNEL_CACHE_PATH": "/home/coder/cudf/cpp/build/latest/jitify_cache", + "RAPIDS_LIBS": "${localEnv:RAPIDS_LIBS}", + "RAPIDS_cmake_GIT_REPO": "${localEnv:RAPIDS_cmake_GIT_REPO}", + "RAPIDS_rmm_GIT_REPO": "${localEnv:RAPIDS_rmm_GIT_REPO}", + "RAPIDS_ucxx_GIT_REPO": "${localEnv:RAPIDS_ucxx_GIT_REPO}", + "RAPIDS_kvikio_GIT_REPO": "${localEnv:RAPIDS_kvikio_GIT_REPO}", + "RAPIDS_cudf_GIT_REPO": "${localEnv:RAPIDS_cudf_GIT_REPO}", + "RAPIDS_raft_GIT_REPO": "${localEnv:RAPIDS_raft_GIT_REPO}", + "RAPIDS_cuvs_GIT_REPO": "${localEnv:RAPIDS_cuvs_GIT_REPO}", + "RAPIDS_cumlprims_mg_GIT_REPO": "${localEnv:RAPIDS_cumlprims_mg_GIT_REPO}", + "RAPIDS_cuml_GIT_REPO": "${localEnv:RAPIDS_cuml_GIT_REPO}", + "RAPIDS_cugraph_ops_GIT_REPO": "${localEnv:RAPIDS_cugraph_ops_GIT_REPO}", + "RAPIDS_wholegraph_GIT_REPO": "${localEnv:RAPIDS_wholegraph_GIT_REPO}", + "RAPIDS_cugraph_GIT_REPO": "${localEnv:RAPIDS_cugraph_GIT_REPO}", + "RAPIDS_cuspatial_GIT_REPO": "${localEnv:RAPIDS_cuspatial_GIT_REPO}" + }, + "initializeCommand": ["/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/.{aws,cache,config} ${localWorkspaceFolder}/ci/rapids/.{conda,log/devcontainer-utils} ${localWorkspaceFolder}/ci/rapids/.repos/{rmm,kvikio,ucxx,cudf,raft,cuvs,cuml,wholegraph,cugraph,cuspatial}"], + "postCreateCommand": ["/bin/bash", "-c", "if [ ${CI:-false} = 'false' ]; then . /home/coder/cccl/ci/rapids/post-create-command.sh; fi"], + "postAttachCommand": ["/bin/bash", "-c", "if [ ${CODESPACES:-false} = 'true' ]; then . devcontainer-utils-post-attach-command; fi"], + "workspaceFolder": "/home/coder/${localWorkspaceFolderBasename}", + "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", + "mounts": [ + "source=${localWorkspaceFolder}/.aws,target=/home/coder/.aws,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/.cache,target=/home/coder/.cache,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/.config,target=/home/coder/.config,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/rmm,target=/home/coder/rmm,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/kvikio,target=/home/coder/kvikio,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/ucxx,target=/home/coder/ucxx,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/cudf,target=/home/coder/cudf,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/raft,target=/home/coder/raft,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/cuvs,target=/home/coder/cuvs,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/cuml,target=/home/coder/cuml,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/wholegraph,target=/home/coder/wholegraph,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/cugraph,target=/home/coder/cugraph,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.repos/cuspatial,target=/home/coder/cuspatial,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.conda,target=/home/coder/.conda,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/ci/rapids/.log/devcontainer-utils,target=/var/log/devcontainer-utils,type=bind,consistency=consistent" + ], + "customizations": { + "vscode": { + "extensions": [ + "augustocdias.tasks-shell-input", + "ms-python.flake8", + "nvidia.nsight-vscode-edition" + ], + "files.watcherExclude": { + "**/build/**": true, + "**/_skbuild/**": true, + "**/target/**": true, + "/home/coder/.aws/**/*": true, + "/home/coder/.cache/**/*": true, + "/home/coder/.conda/**/*": true, + "/home/coder/.local/share/**/*": true, + "/home/coder/.vscode-server/**/*": true + }, + "search.exclude": { + "**/build/**": true, + "**/_skbuild/**": true, + "**/*.code-search": true, + "/home/coder/.aws/**/*": true, + "/home/coder/.cache/**/*": true, + "/home/coder/.conda/**/*": true, + "/home/coder/.local/share/**/*": true, + "/home/coder/.vscode-server/**/*": true + } + } + } +} diff --git a/ci/rapids/post-create-command.sh b/ci/rapids/post-create-command.sh new file mode 100755 index 00000000000..8c08b5f6540 --- /dev/null +++ b/ci/rapids/post-create-command.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash + +PROJECT_MANIFEST_YML="${PROJECT_MANIFEST_YML:-"/opt/rapids-build-utils/manifest.yaml"}" + +_restore_original_manifest() { + if ! test -f "/tmp/manifest.yaml.orig"; then + cp "${PROJECT_MANIFEST_YML}" /tmp/manifest.yaml.orig; + fi + sudo cp /tmp/manifest.yaml.orig "${PROJECT_MANIFEST_YML}"; +} + +_apply_manifest_modifications() { + # Restore the original manifest.yaml + _restore_original_manifest; + # Remove unnecessary libs from manifest.yaml + _prune_libs_from_manifest; + # Update manifest.yaml repo git info + _update_repo_git_info; + # Create rapids-cmake override JSON file and update default CMake arguments in manifest.yaml + _create_rapids_cmake_override_json; + # Print the entire manifest.yaml after modifications + cat "${PROJECT_MANIFEST_YML}"; + # Regenerate the RAPIDS build scripts from the new manifest.yaml + rapids-generate-scripts; +} + +_prune_libs_from_manifest() { + local -; + set -euo pipefail; + if test -n "${RAPIDS_LIBS-}"; then + local -a filters="(${RAPIDS_LIBS})"; + # prefix each element + filters=("${filters[@]/#/'"'}"); + # suffix each element + filters=("${filters[@]/%/'",'}"); + # Remove trailing comma + local -r filters_str="$(cut -d',' -f1-${#filters[@]} <<< "${filters[*]}")"; + sudo yq -i ".repos |= filter(.cpp[].name | contains(${filters_str}))" "${PROJECT_MANIFEST_YML}"; + fi +} + +# shellcheck disable=SC2016 +_update_repo_git_info() { + local -; + set -euo pipefail; + yq '.repos[].name' "${PROJECT_MANIFEST_YML}" \ + | xargs -r -n1 bash -c ' + var="RAPIDS_${1//-/_}_GIT_REPO"; + if test -v "${var}" && test -n "${!var}"; then + sudo yq -i "(.repos[] | select(.name == \"$1\") | .git) *= ${!var}" "${0}"; + fi' "${PROJECT_MANIFEST_YML}"; +} + +_create_rapids_cmake_override_json() { + local -; + set -euo pipefail; + local rapids_cmake_tag=; + local rapids_cmake_upstream=; + if test -n "${RAPIDS_cmake_GIT_REPO-}"; then + rapids_cmake_tag="$(jq -r '.tag' <<< "${RAPIDS_cmake_GIT_REPO}")"; + rapids_cmake_upstream="$(jq -r '.upstream' <<< "${RAPIDS_cmake_GIT_REPO}")"; + else + rapids_cmake_tag="$(yq '.x-git-defaults.tag' /opt/rapids-build-utils/manifest.yaml)"; + rapids_cmake_upstream="$(yq '.x-git-defaults.upstream' /opt/rapids-build-utils/manifest.yaml)"; + fi + + curl -fsSL -o- "https://raw.githubusercontent.com/${rapids_cmake_upstream}/rapids-cmake/${rapids_cmake_tag}/rapids-cmake/cpm/versions.json" \ + | jq -r ".packages.CCCL *= {\"git_url\": \"${HOME}/cccl\", \"git_tag\": \"$(git -C "${HOME}/cccl" rev-parse HEAD)\", \"always_download\": true}" \ + | tee ~/rapids-cmake-override-versions.json; + + # Define default CMake args for each repo + local -a cmake_args=(BUILD_TESTS BUILD_BENCHMARKS BUILD_ANN_BENCH BUILD_PRIMS_BENCH BUILD_CUGRAPH_MG_TESTS); + # Enable tests + cmake_args=("${cmake_args[@]/#/"-D"}"); + cmake_args=("${cmake_args[@]/%/"=${RAPIDS_ENABLE_TESTS:-ON}"}"); + + # Always build RAFT shared lib + cmake_args+=("-DBUILD_SHARED_LIBS=ON"); + cmake_args+=("-DRAFT_COMPILE_LIBRARY=ON"); + + # Tell rapids-cmake to use custom CCCL and cuCollections forks + cmake_args+=("-Drapids-cmake-branch=${rapids_cmake_tag}"); + cmake_args+=("-Drapids-cmake-repo=${rapids_cmake_upstream}/rapids-cmake"); + cmake_args+=("-DRAPIDS_CMAKE_CPM_DEFAULT_VERSION_FILE=${HOME}/rapids-cmake-override-versions.json"); + + # Inject the CMake args into manifest.yaml + sudo yq -i "(.repos[] | .cpp[] | .args.cmake) += \" ${cmake_args[*]}\"" "${PROJECT_MANIFEST_YML}"; + sudo yq -i "(.repos[] | .python[] | .args.cmake) += \" ${cmake_args[*]}\"" "${PROJECT_MANIFEST_YML}"; +} + +_run_post_create_command() { + local -; + set -e; + + # Install `rapids-build-utils` feature if it's not installed (i.e. if running locally via `.devcontainer/launch.sh -d`) + if ! test -f "${PROJECT_MANIFEST_YML}"; then + git clone --depth 1 --filter=blob:none --sparse https://github.com/rapidsai/devcontainers.git /tmp/rapidsai-devcontainers; + git -C /tmp/rapidsai-devcontainers sparse-checkout set features/src/rapids-build-utils; + ( + cd /tmp/rapidsai-devcontainers/features/src/rapids-build-utils; + sudo bash ./install.sh; + ) + rm -rf /tmp/rapidsai-devcontainers; + fi + + # Modify manifest.yaml based on envvars + _apply_manifest_modifications; + + # Clone all the repos + gh config set git_protocol ssh; + gh config set git_protocol ssh --host github.com; + + clone-all -j "$(nproc --all)" -v -q --clone-upstream --single-branch --shallow-submodules; +} + +if [ "$(basename "${BASH_SOURCE[${#BASH_SOURCE[@]}-1]}")" = post-create-command.sh ]; then + _run_post_create_command; +fi diff --git a/ci/rapids/rapids-entrypoint.sh b/ci/rapids/rapids-entrypoint.sh new file mode 100755 index 00000000000..821aed77d63 --- /dev/null +++ b/ci/rapids/rapids-entrypoint.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# shellcheck disable=SC1091 + +set -e; + +ci/rapids/post-create-command.sh; +rapids-post-start-command -f; + +if test $# -gt 0; then + exec "$@"; +else + exec /bin/bash -li; +fi