diff --git a/.github/workflows/build-and-publish-images.yml b/.github/workflows/build-and-publish-images.yml new file mode 100644 index 0000000..89825ff --- /dev/null +++ b/.github/workflows/build-and-publish-images.yml @@ -0,0 +1,103 @@ +name: build and publish imgs workflow + +on: + workflow_call: + inputs: + build_type: + required: true + type: string + +defaults: + run: + shell: bash + +jobs: + compute-matrix: + runs-on: ubuntu-latest + outputs: + MATRIX: ${{ steps.compute-matrix.outputs.MATRIX }} + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Compute matrix + id: compute-matrix + run: | + MATRIX=$(ci/compute-mx.sh) + echo "MATRIX=${MATRIX}" | tee -a ${GITHUB_OUTPUT} + docker: + needs: compute-matrix + strategy: + matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }} + fail-fast: false + secrets: inherit + uses: ./.github/workflows/build-image.yml + with: + ARCHES: ${{ toJSON(matrix.ARCHES) }} + CUDA_VER: ${{ matrix.CUDA_VER }} + LINUX_VER: ${{ matrix.LINUX_VER }} + PYTHON_VER: ${{ matrix.PYTHON_VER }} + IMAGE_REPO: ${{ matrix.IMAGE_REPO }} + TAG: rapidsai/${{ matrix.IMAGE_REPO }}:cuda${{ matrix.CUDA_VER }}-${{ matrix.LINUX_VER }}-py${{ matrix.PYTHON_VER }} + BUILD_TYPE: ${{ inputs.build_type }} + build-multiarch-manifest: + if: inputs.build_type == 'branch' + needs: [docker, compute-matrix] + strategy: + matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.GPUCIBOT_DOCKERHUB_USER }} + password: ${{ secrets.GPUCIBOT_DOCKERHUB_TOKEN }} + - name: Create multiarch manifest + run: | + LATEST_CUDA_VER=$(yq '.CUDA_VER | sort | .[-1]' axis.yaml) + LATEST_PYTHON_VER=$(yq -o json '.PYTHON_VER' axis.yaml | jq -r 'max_by(split(".") | map(tonumber))') + LATEST_UBUNTU_VER=$(yq '.LINUX_VER | map(select(. == "*ubuntu*")) | sort | .[-1]' axis.yaml) + + source_tags=() + tag="rapidsai/${{ matrix.IMAGE_REPO }}:cuda${{ matrix.CUDA_VER }}-${{ matrix.LINUX_VER }}-py${{ matrix.PYTHON_VER }}" + for arch in $(echo '${{ toJSON(matrix.ARCHES) }}' | jq .[] -r); do + source_tags+=("${tag}-${arch}") + done + + docker manifest create ${tag} ${source_tags[@]} + docker manifest push ${tag} + if [[ + "${LATEST_UBUNTU_VER}" == "${{ matrix.LINUX_VER }}" && + "${LATEST_CUDA_VER}" == "${{ matrix.CUDA_VER }}" && + "${LATEST_PYTHON_VER}" == "${{ matrix.PYTHON_VER }}" + ]]; then + docker manifest create rapidsai/${{ matrix.IMAGE_REPO }}:latest ${source_tags[@]} + docker manifest push rapidsai/${{ matrix.IMAGE_REPO }}:latest + fi + delete-temp-images: + if: inputs.build_type == 'branch' + needs: [compute-matrix, build-multiarch-manifest] + strategy: + matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }} + runs-on: ubuntu-latest + steps: + - name: Remove temporary images + run: | + HUB_TOKEN=$( + curl -s -H "Content-Type: application/json" \ + -X POST \ + -d "{\"username\": \"${{ secrets.GPUCIBOT_DOCKERHUB_USER }}\", \"password\": \"${{ secrets.GPUCIBOT_DOCKERHUB_TOKEN }}\"}" \ + https://hub.docker.com/v2/users/login/ | jq -r .token \ + ) + + org="rapidsai" + repo="${{ matrix.IMAGE_REPO }}" + tag="cuda${{ matrix.CUDA_VER }}-${{ matrix.LINUX_VER }}-py${{ matrix.PYTHON_VER }}" + + for arch in $(echo '${{ toJSON(matrix.ARCHES) }}' | jq .[] -r); do + curl -i -X DELETE \ + -H "Accept: application/json" \ + -H "Authorization: JWT $HUB_TOKEN" \ + "https://hub.docker.com/v2/repositories/$org/$repo/tags/$tag-$arch/" + done diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml new file mode 100644 index 0000000..4bb75a4 --- /dev/null +++ b/.github/workflows/build-image.yml @@ -0,0 +1,80 @@ +name: Build and push image variant + +on: + workflow_call: + inputs: + ARCHES: + required: true + type: string + CUDA_VER: + required: true + type: string + LINUX_VER: + required: true + type: string + PYTHON_VER: + required: true + type: string + IMAGE_REPO: + required: true + type: string + TAG: + required: true + type: string + BUILD_TYPE: + required: true + type: string + +jobs: + docker-build: + strategy: + matrix: + ARCH: ${{ fromJSON(inputs.ARCHES) }} + CUDA_VER: ["${{ inputs.CUDA_VER }}"] + LINUX_VER: ["${{ inputs.LINUX_VER }}"] + PYTHON_VER: ["${{ inputs.PYTHON_VER }}"] + fail-fast: false + runs-on: "linux-${{ matrix.ARCH }}-cpu4" + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.GPUCIBOT_DOCKERHUB_USER }} + password: ${{ secrets.GPUCIBOT_DOCKERHUB_TOKEN }} + - name: Set up Docker Context for Buildx + id: buildx-context + run: | + docker context create builders + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + driver: docker + endpoint: builders + - name: Get Real Arch and Manylinux Version + id: get-real-arch + run: | + REAL_ARCH=$(arch) + echo "REAL_ARCH=${REAL_ARCH}" >> $GITHUB_OUTPUT + if [[ "${{ inputs.LINUX_VER }}" == "ubuntu20.04" || "${{ inputs.LINUX_VER }}" == "ubuntu18.04" ]]; then + echo "MANYLINUX_VER=manylinux_2_31" >> $GITHUB_OUTPUT + else + echo "MANYLINUX_VER=manylinux_2_17" >> $GITHUB_OUTPUT + fi + - name: Build image + if: + uses: docker/build-push-action@v4 + with: + context: ./${{ inputs.IMAGE_REPO }} + file: ./${{ inputs.IMAGE_REPO }}/Dockerfile + push: ${{ inputs.BUILD_TYPE == 'branch' }} + pull: true + build-args: | + CUDA_VER=${{ inputs.CUDA_VER }} + LINUX_VER=${{ inputs.LINUX_VER }} + PYTHON_VER=${{ inputs.PYTHON_VER }} + CPU_ARCH=${{ matrix.ARCH }} + REAL_ARCH=${{ steps.get-real-arch.outputs.REAL_ARCH }} + MANYLINUX_VER=${{ steps.get-real-arch.outputs.MANYLINUX_VER }} + tags: ${{ inputs.TAG }}-${{ matrix.ARCH }} diff --git a/.github/workflows/docker-multiarch-native.yml b/.github/workflows/docker-multiarch-native.yml deleted file mode 100644 index bcf6293..0000000 --- a/.github/workflows/docker-multiarch-native.yml +++ /dev/null @@ -1,160 +0,0 @@ -name: Build docker multiarch images with buildx natively (no QEMU) - -on: - workflow_call: - inputs: - # workflow inputs - matrix_script: - required: false - default: "./ci/compute-matrix.sh" - type: string - - # git metadata - repo: - type: string - branch: - type: string - date: - type: string - sha: - type: string - build_type: - required: true - type: string - push: - required: false - type: boolean - default: false - -permissions: - actions: none - checks: none - contents: read - deployments: none - discussions: none - id-token: write - issues: none - packages: read - pages: none - pull-requests: read - repository-projects: none - security-events: none - statuses: none - -jobs: - compute-matrix: - runs-on: ubuntu-latest - outputs: - MATRIX: ${{ steps.compute-matrix.outputs.MATRIX }} - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Compute matrix - id: compute-matrix - run: ${{ inputs.matrix_script }} - docker-build-arch: - needs: compute-matrix - strategy: - matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }} - runs-on: ${{ fromJSON(matrix.runner_arch != 'arm64' && '"ubuntu-latest"' || '"linux-arm64-cpu4"') }} - env: - RAPIDS_BUILD_TYPE: ${{ inputs.build_type }} - DOCKER_BUILDKIT: 1 - steps: - - name: Get AWS credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ vars.AWS_ROLE_ARN }} - aws-region: ${{ vars.AWS_REGION }} - role-duration-seconds: 43200 # 12h - - name: Checkout - uses: actions/checkout@v3 - with: - submodules: ${{ contains(matrix.build_image, 'manylinux') }} - - name: Standardize repository information - uses: rapidsai/shared-action-workflows/rapids-github-info@branch-23.04 - with: - repo: ${{ inputs.repo }} - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - - name: Install latest gha-tools - run: | - set -x - sudo apt-get update -y && sudo apt-get install -y awscli wget - wget https://github.com/rapidsai/gha-tools/releases/latest/download/tools.tar.gz -O - | sudo tar -xz -C /usr/local/bin - - name: Set up Docker Context for Buildx - id: buildx-context - run: docker context create builders - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - endpoint: builders - - name: Build and upload container - run: | - image_to_build="${{ matrix.build_image }}-$(uname -m)" - BUILD_IMAGE=${image_to_build} ./build.sh - rapids-upload-docker-to-s3 "${image_to_build}" - docker-assemble-push-multiarch: - name: assemble and push multiarch manifest - needs: docker-build-arch - if: inputs.push - runs-on: "linux-amd64-cpu4" - env: - DOCKERHUB_USERNAME: ${{ secrets.GPUCIBOT_DOCKERHUB_USER }} - DOCKERHUB_TOKEN: ${{ secrets.GPUCIBOT_DOCKERHUB_TOKEN }} - RAPIDS_BUILD_TYPE: ${{ inputs.build_type }} - services: - registry: - image: registry:2 - ports: - - 5000:5000 - steps: - - name: Get AWS credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ vars.AWS_ROLE_ARN }} - aws-region: ${{ vars.AWS_REGION }} - role-duration-seconds: 43200 # 12h - - name: Checkout - uses: actions/checkout@v3 - - name: Standardize repository information - uses: rapidsai/shared-action-workflows/rapids-github-info@branch-23.04 - with: - repo: ${{ inputs.repo }} - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - - name: Set up Docker Context for Buildx - id: buildx-context - run: docker context create builders - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - endpoint: builders - - if: ${{ env.DOCKERHUB_USERNAME != '' && env.DOCKERHUB_TOKEN != '' }} - name: Login to DockerHub - uses: docker/login-action@v2 - with: - username: ${{ env.DOCKERHUB_USERNAME }} - password: ${{ env.DOCKERHUB_TOKEN }} - - name: Install latest gha-tools and skopeo - run: | - set -x - sudo apt-get update -y && sudo apt-get install -y awscli wget - wget https://github.com/rapidsai/gha-tools/releases/latest/download/tools.tar.gz -O - | sudo tar -xz -C /usr/local/bin - wget https://github.com/rapidsai/skopeo/releases/download/v1.12/skopeo-linux-amd64 -O ./skopeo - chmod +x ./skopeo && sudo cp ./skopeo /usr/local/bin/ - - name: Assemble multiarch manifest from s3 - id: manifests-create - run: | - set -x - manifests_to_push=$(rapids-docker-multiarch-from-s3) - echo "MANIFESTS_TO_PUSH=${manifests_to_push}" >> "${GITHUB_OUTPUT}" - - name: Push multiarch manifests from s3 - run: | - set -x - for manifest in ${{ steps.manifests-create.outputs.MANIFESTS_TO_PUSH }}; do - echo "copying multiarch manifest with skopeo: ${manifest}" - skopeo copy --multi-arch=all --insecure-policy --src-tls-verify=false "docker://localhost:5000/${manifest}" "docker://docker.io/${manifest}" - done diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 0419ffc..82ffc77 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1,4 +1,4 @@ -name: PR build of RAPIDS pip wheel CI images +name: ci on: push: @@ -6,14 +6,12 @@ on: - "pull-request/[0-9]+" concurrency: - group: "${{ github.workflow }}-${{ github.ref }}" + group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: - cibw-containers: - uses: ./.github/workflows/docker-multiarch-native.yml - secrets: inherit + build-images: + uses: ./.github/workflows/build-and-publish-images.yml with: - matrix_script: "./ci/compute-matrix.sh" - push: false - build_type: branch + build_type: pull-request + secrets: inherit diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index ca5ea71..7ca704b 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -1,20 +1,17 @@ -name: Build and push RAPIDS pip wheel CI images +name: publish on: push: branches: - - "main" - workflow_dispatch: + - "imgs-v2" concurrency: - group: "${{ github.workflow }}-${{ github.ref }}" + group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: - cibw-containers: - uses: ./.github/workflows/docker-multiarch-native.yml - secrets: inherit + build-images: + uses: ./.github/workflows/build-and-publish-images.yml with: - matrix_script: "./ci/compute-matrix.sh" - push: true build_type: branch + secrets: inherit diff --git a/README.md b/README.md index 1f2d124..8289deb 100644 --- a/README.md +++ b/README.md @@ -3,20 +3,28 @@ This repository contains all images used to build [RAPIDS pip wheel](https://rapids.ai/pip) releases. * `citestwheel` images are for running tests -* `manylinux` images are for building manylinux-compliant wheels. They are also used to build pure-Python wheels, and for publishing wheels with twine +* `ci-wheel` images are for building manylinux-compliant wheels. They are also used to build pure-Python wheels, and for publishing wheels with twine Current images: | Image | Label | x86_64 | aarch64 | | :- | :- | :- | :- | -| rapidsai/manylinux_v2_2_31 | cuda-devel-12.0.1-ubuntu20.04 | | :heavy_check_mark: | -| | cuda-devel-11.8.0-ubuntu20.04 | | :heavy_check_mark: | -| rapidsai/manylinux_v2_2014 | cuda-devel-12.0.1-centos7 | :heavy_check_mark: | | -| | cuda-devel-11.8.0-centos7 | :heavy_check_mark: | | -| rapidsai/citestwheel | cuda-devel-11.8.0-ubuntu18.04 | :heavy_check_mark: | | -| | cuda-devel-12.0.1-ubuntu18.04 | :heavy_check_mark: | | -| | cuda-devel-11.8.0-ubuntu20.04 | | :heavy_check_mark: | -| | cuda-devel-12.0.1-ubuntu20.04 | | :heavy_check_mark: | +| rapidsai/ci-wheel | cuda-devel-12.0.1-ubuntu20.04-py3.9 | :heavy_check_mark: | :heavy_check_mark: | +| | cuda-devel-12.0.1-ubuntu20.04-py3.10 | :heavy_check_mark: | :heavy_check_mark: | +| | cuda-devel-11.8.0-ubuntu20.04-p3.9 | :heavy_check_mark: | :heavy_check_mark: | +| | cuda-devel-11.8.0-ubuntu20.04-py3.10 | :heavy_check_mark: | :heavy_check_mark: | +| | cuda-devel-12.0.1-centos7-py3.9 | :heavy_check_mark: | | +| | cuda-devel-12.0.1-centos7-py3.10 | :heavy_check_mark: | | +| | cuda-devel-11.8.0-centos7-py3.9 | :heavy_check_mark: | | +| | cuda-devel-11.8.0-centos7-py3.10 | :heavy_check_mark: | | +| rapidsai/citestwheel | cuda-devel-11.8.0-ubuntu18.04-py3.9 | :heavy_check_mark: | | +| | cuda-devel-11.8.0-ubuntu18.04-py3.10 | :heavy_check_mark: | | +| | cuda-devel-12.0.1-ubuntu18.04-py3.9 | :heavy_check_mark: | | +| | cuda-devel-12.0.1-ubuntu18.04-py3.10 | :heavy_check_mark: | | +| | cuda-devel-11.8.0-ubuntu20.04-py3.9 | :heavy_check_mark: | :heavy_check_mark: | +| | cuda-devel-11.8.0-ubuntu20.04-py3.9 | :heavy_check_mark: | :heavy_check_mark: | +| | cuda-devel-12.0.1-ubuntu20.04-py3.10 | :heavy_check_mark: | :heavy_check_mark: | +| | cuda-devel-12.0.1-ubuntu20.04-py3.10 | :heavy_check_mark: | :heavy_check_mark: | Legacy images (no longer rebuilt, used for 22.10, 22.12): @@ -40,3 +48,16 @@ Legacy images (no longer rebuilt, used for 23.02, 23.04): | | cuda-devel-11.8.0-ubuntu20.04 | | :heavy_check_mark: | | rapidsai/manylinux2014 | cuda-devel-12.0.1-centos7 | :heavy_check_mark: | | | | cuda-devel-11.8.0-centos7 | :heavy_check_mark: | | + +Legacy images (no longer rebuilt, used for 23.06): + +| Image | Label | x86_64 | aarch64 | +| :- | :- | :- | :- | +| rapidsai/manylinux_v2_2_31 | cuda-devel-12.0.1-ubuntu20.04 | | :heavy_check_mark: | +| | cuda-devel-11.8.0-ubuntu20.04 | | :heavy_check_mark: | +| rapidsai/manylinux_v2_2014 | cuda-devel-12.0.1-centos7 | :heavy_check_mark: | | +| | cuda-devel-11.8.0-centos7 | :heavy_check_mark: | | +| rapidsai/citestwheel | cuda-devel-11.8.0-ubuntu18.04 | :heavy_check_mark: | | +| | cuda-devel-12.0.1-ubuntu18.04 | :heavy_check_mark: | | +| | cuda-devel-11.8.0-ubuntu20.04 | | :heavy_check_mark: | +| | cuda-devel-12.0.1-ubuntu20.04 | | :heavy_check_mark: | \ No newline at end of file diff --git a/axis.yaml b/axis.yaml index 53611aa..a77ee95 100644 --- a/axis.yaml +++ b/axis.yaml @@ -1,29 +1,18 @@ -BUILD_IMAGE: - - "rapidsai/citestwheel:cuda-devel-11.8.0-ubuntu18.04" - - "rapidsai/citestwheel:cuda-devel-12.0.1-ubuntu18.04" - - "rapidsai/citestwheel:cuda-devel-11.8.0-ubuntu20.04" - - "rapidsai/citestwheel:cuda-devel-12.0.1-ubuntu20.04" - - "rapidsai/manylinux_v2_2014:cuda-devel-11.8.0-centos7" - - "rapidsai/manylinux_v2_2014:cuda-devel-12.0.1-centos7" - - "rapidsai/manylinux_v2_2_31:cuda-devel-11.8.0-ubuntu20.04" - - "rapidsai/manylinux_v2_2_31:cuda-devel-12.0.1-ubuntu20.04" -RUNNER_ARCH: - - "amd64" - - "arm64" +CUDA_VER: + - "11.8.0" + - "12.0.1" +PYTHON_VER: + - "3.9" + - "3.10" +LINUX_VER: + - "ubuntu18.04" + - "ubuntu20.04" + - "centos7" +IMAGE_REPO: + - "ci-wheel" + - "citestwheel" exclude: - - BUILD_IMAGE: "rapidsai/citestwheel:cuda-devel-11.8.0-ubuntu18.04" - RUNNER_ARCH: "arm64" - - BUILD_IMAGE: "rapidsai/citestwheel:cuda-devel-12.0.1-ubuntu18.04" - RUNNER_ARCH: "arm64" - - BUILD_IMAGE: "rapidsai/citestwheel:cuda-devel-11.8.0-ubuntu20.04" - RUNNER_ARCH: "amd64" - - BUILD_IMAGE: "rapidsai/citestwheel:cuda-devel-12.0.1-ubuntu20.04" - RUNNER_ARCH: "amd64" - - BUILD_IMAGE: "rapidsai/manylinux_v2_2014:cuda-devel-11.8.0-centos7" - RUNNER_ARCH: "arm64" - - BUILD_IMAGE: "rapidsai/manylinux_v2_2_31:cuda-devel-11.8.0-ubuntu20.04" - RUNNER_ARCH: "amd64" - - BUILD_IMAGE: "rapidsai/manylinux_v2_2014:cuda-devel-12.0.1-centos7" - RUNNER_ARCH: "arm64" - - BUILD_IMAGE: "rapidsai/manylinux_v2_2_31:cuda-devel-12.0.1-ubuntu20.04" - RUNNER_ARCH: "amd64" + - LINUX_VER: "ubuntu18.04" + IMAGE_REPO: "ci-wheel" + - LINUX_VER: "centos7" + IMAGE_REPO: "citestwheel" diff --git a/build.sh b/build.sh deleted file mode 100755 index e97d35d..0000000 --- a/build.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail -set -x - -image_to_build="${BUILD_IMAGE:-""}" - -if [[ "${image_to_build}" == "" ]]; then - echo "Must specify BUILD_IMAGE" >&2 - exit 1 -fi - -# chop it up for informational purposes -img=$(echo "${image_to_build}" | tr "/:" "-") - -cuda_variant=$(echo "${img}" | cut -d'-' -f3) - -jetson="no" -if [[ "${cuda_variant}" == *"l4t"* ]]; then - jetson="yes" -fi - -img_type=$(echo "${img}" | cut -d'-' -f2) -cuda_type=$(echo "${img}" | cut -d'-' -f4) -cuda_ver=$(echo "${img}" | cut -d'-' -f5) -os=$(echo "${img}" | cut -d'-' -f6) -arch=$(echo "${img}" | cut -d'-' -f7) -real_arch=$(uname -m) - -if [[ ("$arch" != "$real_arch") ]]; then - echo "Image arch '${arch}' doesn't match runner arch '${real_arch}'" >&2 - exit 1 -fi - -cpu_arch="" -if [[ "$real_arch" == "x86_64" ]]; then - cpu_arch="amd64" -elif [[ "$real_arch" == "aarch64" ]]; then - cpu_arch="arm64" -fi - -base_image="nvidia/cuda:${cuda_ver}-${cuda_type}-${os}" - -case $img_type in - "citestwheel") - docker build --build-arg CPU_ARCH="${cpu_arch}" --build-arg BASE_IMAGE="${base_image}" --pull ./ciwheel -t "${image_to_build}" >&2 - ;; - "manylinux_v2"*) - if [[ ("$os" == *"centos"*) ]]; then - docker build --build-arg CPU_ARCH="${cpu_arch}" --build-arg BASE_IMAGE="${base_image}" --pull ./manylinux_v2_centos -t "${image_to_build}" >&2 - else - docker build --build-arg CPU_ARCH="${cpu_arch}" --build-arg BASE_IMAGE="${base_image}" --pull ./manylinux_v2_ubuntu -t "${image_to_build}" >&2 - fi - ;; - *) - echo "Unsupported image build '$img_type'" >&2 - exit 1 -esac diff --git a/ci-wheel/Dockerfile b/ci-wheel/Dockerfile new file mode 100644 index 0000000..263e035 --- /dev/null +++ b/ci-wheel/Dockerfile @@ -0,0 +1,131 @@ +ARG CUDA_VER=11.8.0 +ARG LINUX_VER=ubuntu20.04 +ARG REAL_ARCH=x86_64 + +ARG BASE_IMAGE=nvidia/cuda:${CUDA_VER}-devel-${LINUX_VER} +FROM ${BASE_IMAGE} + +ARG CUDA_VER +ARG LINUX_VER +ARG REAL_ARCH +ARG PYTHON_VER=3.9 +ARG MANYLINUX_VER +ARG POLICY=${MANYLINUX_VER} + +ARG DEBIAN_FRONTEND=noninteractive + +# Set RAPIDS versions env variables +ENV RAPIDS_CUDA_VERSION="${CUDA_VER}" +ENV RAPIDS_PY_VERSION="${PYTHON_VER}" + +ENV PYENV_ROOT="/pyenv" +ENV PATH="/pyenv/bin:/pyenv/shims:$PATH" + +RUN case "${LINUX_VER}" in \ + "ubuntu"*) \ + apt update -y && apt install -y jq build-essential software-properties-common wget gcc zlib1g-dev libbz2-dev libssl-dev libreadline-dev libsqlite3-dev libffi-dev curl git libncurses5-dev libnuma-dev openssh-client libcudnn8-dev zip libopenblas-dev liblapack-dev protobuf-compiler autoconf automake libtool cmake && rm -rf /var/lib/apt/lists/* \ + && add-apt-repository ppa:git-core/ppa && add-apt-repository ppa:ubuntu-toolchain-r/test && apt update -y && apt install -y git gcc-9 g++-9 && add-apt-repository -r ppa:git-core/ppa && add-apt-repository -r ppa:ubuntu-toolchain-r/test \ + && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9 \ + ;; \ + "centos"*) \ + yum update -y && yum install -y epel-release wget gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel xz xz-devel libffi-devel curl git ncurses-devel numactl numactl-devel openssh-clients libcudnn8-devel zip blas-devel lapack-devel protobuf-compiler autoconf automake libtool centos-release-scl scl-utils cmake && yum clean all \ + && yum remove -y git && yum install -y https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm && yum install -y git jq devtoolset-11 && yum remove -y endpoint-repo \ + && echo -e ' \ + #!/bin/bash\n \ + source scl_source enable devtoolset-11\n \ + ' > /etc/profile.d/enable_devtools.sh \ + && pushd tmp \ + && wget https://ftp.openssl.org/source/openssl-1.1.1k.tar.gz \ + && tar -xzvf openssl-1.1.1k.tar.gz \ + && cd openssl-1.1.1k \ + && ./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic \ + && make \ + && make install \ + && popd \ + ;; \ + *) \ + echo "Unsupported LINUX_VER: ${LINUX_VER}" && exit 1; \ + ;; \ + esac + +# Install sccache +ARG SCCACHE_VERSION=0.5.0 + +RUN curl -o /tmp/sccache.tar.gz \ + -L "https://github.com/mozilla/sccache/releases/download/v${SCCACHE_VERSION}/sccache-v${SCCACHE_VERSION}-"${REAL_ARCH}"-unknown-linux-musl.tar.gz" && \ + tar -C /tmp -xvf /tmp/sccache.tar.gz && \ + mv "/tmp/sccache-v${SCCACHE_VERSION}-"${REAL_ARCH}"-unknown-linux-musl/sccache" /usr/bin/sccache && \ + chmod +x /usr/bin/sccache + +# Set AUDITWHEEL_* env vars for use with auditwheel +ENV AUDITWHEEL_POLICY=${POLICY} AUDITWHEEL_ARCH=${REAL_ARCH} AUDITWHEEL_PLAT=${POLICY}_${REAL_ARCH} + +# Set sccache env vars +ENV CMAKE_CUDA_COMPILER_LAUNCHER=sccache +ENV CMAKE_CXX_COMPILER_LAUNCHER=sccache +ENV CMAKE_C_COMPILER_LAUNCHER=sccache +ENV SCCACHE_BUCKET=rapids-sccache-east +ENV SCCACHE_REGION=us-east-2 +ENV SCCACHE_IDLE_TIMEOUT=32768 +ENV SCCACHE_S3_USE_SSL=true +ENV SCCACHE_S3_NO_CREDENTIALS=false + +# Install ucx +ARG UCX_VERSION=1.14.1 +RUN mkdir -p /ucx-src && cd /ucx-src &&\ + git clone https://github.com/openucx/ucx -b v${UCX_VERSION} ucx-git-repo &&\ + cd ucx-git-repo && \ + ./autogen.sh && \ + ./contrib/configure-release \ + --prefix=/usr \ + --enable-mt \ + --enable-cma \ + --enable-numa \ + --with-gnu-ld \ + --with-sysroot \ + --without-verbs \ + --without-rdmacm \ + --with-cuda=/usr/local/cuda && \ + CPPFLAGS=-I/usr/local/cuda/include make -j && \ + make install && \ + cd / && \ + rm -rf /ucx-src/ + +# Install pyenv +RUN curl https://pyenv.run | bash + +# Create pyenvs +# TODO: Determine if any cleanup of the pyenv layers is needed to shrink the container +RUN pyenv update + +RUN case "${LINUX_VER}" in \ + "ubuntu"*) \ + pyenv install --verbose "${RAPIDS_PY_VERSION}" \ + ;; \ + "centos"*) \ + # Need to specify the openssl location because of the install from source + CPPFLAGS="-I/usr/include/openssl" LDFLAGS="-L/usr/lib" pyenv install --verbose "${RAPIDS_PY_VERSION}" \ + ;; \ + *) \ + echo "Unsupported LINUX_VER: ${LINUX_VER}" && exit 1; \ + ;; \ + esac + +RUN pyenv global ${PYTHON_VER} && python -m pip install auditwheel patchelf twine && pyenv rehash + +# Install latest gha-tools +RUN wget https://github.com/rapidsai/gha-tools/releases/latest/download/tools.tar.gz -O - | tar -xz -C /usr/local/bin + +# Install the AWS CLI +RUN mkdir -p /aws_install && cd /aws_install && \ + curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" && \ + unzip awscli-bundle.zip && \ + ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws && \ + cd / && \ + rm -rf /aws_install + +# Mark all directories as safe for git so that GHA clones into the root don't +# run into issues +RUN git config --system --add safe.directory '*' + +CMD ["/bin/bash"] diff --git a/ci/compute-matrix.sh b/ci/compute-matrix.sh deleted file mode 100755 index c968ed8..0000000 --- a/ci/compute-matrix.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -MATRIX=$(yq -o json '.' axis.yaml | jq -c) -echo "MATRIX=${MATRIX}" | tee --append ${GITHUB_OUTPUT:-/dev/null} diff --git a/ci/compute-mx.jq b/ci/compute-mx.jq new file mode 100644 index 0000000..8e58e85 --- /dev/null +++ b/ci/compute-mx.jq @@ -0,0 +1,36 @@ +def compute_arch($x): + ["amd64"] | + if + ["ubuntu18.04", "centos7"] | any(index($x.LINUX_VER)) + then + . + else + . + ["arm64"] + end | + $x + {ARCHES: .}; + +# Checks the current entry to see if it matches the given exclude +def matches($entry; $exclude): + all($exclude | to_entries | .[]; $entry[.key] == .value); + +# Checks the current entry to see if it matches any of the excludes. +# If so, produce no output. Otherwise, output the entry. +def filter_excludes($entry; $excludes): + select(any($excludes[]; matches($entry; .)) | not); + +def lists2dict($keys; $values): + reduce range($keys | length) as $ind ({}; . + {($keys[$ind]): $values[$ind]}); + +def compute_mx($input): + ($input.exclude // []) as $excludes | + $input | del(.exclude) | + keys_unsorted as $mx_keys | + to_entries | + map(.value) | + [ + combinations | + lists2dict($mx_keys; .) | + filter_excludes(.; $excludes) | + compute_arch(.) + ] | + {include: .}; \ No newline at end of file diff --git a/ci/compute-mx.sh b/ci/compute-mx.sh new file mode 100755 index 0000000..8dbf0e3 --- /dev/null +++ b/ci/compute-mx.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -euo pipefail + +yq -o json axis.yaml | jq -c 'include "ci/compute-mx"; compute_mx(.)' diff --git a/citestwheel/Dockerfile b/citestwheel/Dockerfile new file mode 100644 index 0000000..9f3c836 --- /dev/null +++ b/citestwheel/Dockerfile @@ -0,0 +1,50 @@ +ARG CUDA_VER=11.8.0 +ARG LINUX_VER=ubuntu18.04 + +ARG BASE_IMAGE=nvidia/cuda:${CUDA_VER}-devel-${LINUX_VER} +FROM ${BASE_IMAGE} + +ARG PYTHON_VER=3.9 + +ARG DEBIAN_FRONTEND=noninteractive + +ENV PYENV_ROOT="/pyenv" +ENV PATH="/pyenv/bin:/pyenv/shims:$PATH" + +RUN apt-get update \ + && apt-get upgrade -y \ + && apt-get install -y --no-install-recommends \ + wget curl git jq ssh \ + make build-essential libssl-dev zlib1g-dev \ + libbz2-dev libreadline-dev libsqlite3-dev wget \ + curl llvm libncursesw5-dev xz-utils tk-dev \ + libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev + +# Install pyenv +RUN curl https://pyenv.run | bash + +# Create pyenvs +RUN pyenv update && pyenv install ${PYTHON_VER} + +RUN pyenv global ${PYTHON_VER} && python --version + +# add bin to path +ENV PATH="/pyenv/versions/${PYTHON_VER}/bin/:$PATH" + +# Install the AWS CLI +# Needed to download wheels for running tests +RUN python3 -m pip install awscli + +COPY citestwheel.sh /citestwheel.sh + +# update git > 2.17 +RUN grep '18.04' /etc/issue && bash -c "apt-get install -y software-properties-common && add-apt-repository ppa:git-core/ppa -y && apt-get update && apt-get install --upgrade -y git" || true; + +# Install latest gha-tools +RUN wget https://github.com/rapidsai/gha-tools/releases/latest/download/tools.tar.gz -O - \ + | tar -xz -C /usr/local/bin + +# git safe directory +RUN git config --system --add safe.directory '*' + +CMD ["/bin/bash"] diff --git a/ciwheel/citestwheel.sh b/citestwheel/citestwheel.sh similarity index 100% rename from ciwheel/citestwheel.sh rename to citestwheel/citestwheel.sh diff --git a/ciwheel/Dockerfile b/ciwheel/Dockerfile deleted file mode 100644 index 6f99a24..0000000 --- a/ciwheel/Dockerfile +++ /dev/null @@ -1,78 +0,0 @@ -ARG BASE_IMAGE=nvidia/cuda:11.5.1-devel-ubuntu18.04 -FROM ${BASE_IMAGE} - -ARG DEBIAN_FRONTEND=noninteractive - -ENV PYENV_ROOT="/pyenv" \ - PATH="/pyenv/bin:/pyenv/shims:$PATH" - -RUN apt-get update \ - && apt-get upgrade -y \ - && apt-get install -y --no-install-recommends \ - wget curl git jq ssh \ - make build-essential libssl-dev zlib1g-dev \ - libbz2-dev libreadline-dev libsqlite3-dev wget \ - curl llvm libncursesw5-dev xz-utils tk-dev \ - libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev - -# for pyenv -ARG PY39_VERSION="3.9.16" -ARG PY310_VERSION="3.10.9" - -# Install pyenv -RUN curl https://pyenv.run | bash - -# Create pyenvs -RUN pyenv update \ - && pyenv install ${PY39_VERSION} \ - && pyenv install ${PY310_VERSION} - -ARG CIBUILDWHEEL_VERSION=2.11.3 - -RUN pyenv virtualenv ${PY310_VERSION} citools - -RUN eval "$(pyenv init -)" && eval "$(pyenv virtualenv-init -)" &&\ - pyenv activate citools && python3 -m pip install awscli twine cibuildwheel==${CIBUILDWHEEL_VERSION} - -# Create symlinks of aws/cibuildwheel/twine into isolated dir -RUN mkdir -p /citools-bin &&\ - ln -snf /pyenv/versions/citools/bin/aws /citools-bin/aws &&\ - ln -snf /pyenv/versions/citools/bin/twine /citools-bin/twine &&\ - ln -snf /pyenv/versions/citools/bin/cibuildwheel /citools-bin/cibuildwheel - -# make cp39 default -RUN pyenv global ${PY39_VERSION} && python --version - -# add bin to path -ENV PATH="/pyenv/versions/${PY39_VERSION}/bin/:$/pyenv/versions/${PY310_VERSION}/bin/:/citools-bin/:$PATH" - -# install docker-in-docker -RUN apt-get update && apt-get install -y \ - apt-transport-https \ - ca-certificates \ - curl \ - gnupg \ - lsb-release - -RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg - -ARG CPU_ARCH -RUN echo \ - "deb [arch=${CPU_ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ - $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null - -RUN apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io - -COPY citestwheel.sh /citestwheel.sh - -# update git > 2.17 -RUN grep '18.04' /etc/issue && bash -c "apt-get install -y software-properties-common && add-apt-repository ppa:git-core/ppa -y && apt-get update && apt-get install --upgrade -y git" || true; - -# Install latest gha-tools -RUN wget https://github.com/rapidsai/gha-tools/releases/latest/download/tools.tar.gz -O - \ - | tar -xz -C /usr/local/bin - -# git safe directory -RUN git config --system --add safe.directory '*' - -CMD ["/bin/bash"] diff --git a/manylinux_v2_centos/Dockerfile b/manylinux_v2_centos/Dockerfile deleted file mode 100644 index 4fb525e..0000000 --- a/manylinux_v2_centos/Dockerfile +++ /dev/null @@ -1,109 +0,0 @@ -ARG BASE_IMAGE=nvidia/cuda:11.8.0-devel-centos7 -FROM ${BASE_IMAGE} - -ARG DEBIAN_FRONTEND=noninteractive - -ENV PYENV_ROOT="/pyenv" \ - PATH="/pyenv/bin:/pyenv/shims:$PATH" - -RUN yum update -y && yum install -y epel-release wget gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel xz xz-devel libffi-devel curl git ncurses-devel numactl numactl-devel openssh-clients libcudnn8-devel zip blas-devel lapack-devel protobuf-compiler autoconf automake libtool centos-release-scl scl-utils cmake && yum clean all - -# Install tools that have to be installed after the previous install completes. -RUN yum remove -y git && yum install -y https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm && yum install -y git jq devtoolset-11 && yum remove -y endpoint-repo - -# Install latest openssl (can't use the package manager because CentOS 7 stopped after openssl 1.0) -RUN pushd tmp && \ - wget https://ftp.openssl.org/source/openssl-1.1.1k.tar.gz && \ - tar -xzvf openssl-1.1.1k.tar.gz &&\ - cd openssl-1.1.1k && \ - ./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic && \ - make && \ - make install && \ - popd - -# Install sccache -ARG SCCACHE_VERSION=0.5.0 -ARG ARCH="x86_64" - -RUN curl -o /tmp/sccache.tar.gz \ - -L "https://github.com/mozilla/sccache/releases/download/v${SCCACHE_VERSION}/sccache-v${SCCACHE_VERSION}-${ARCH}-unknown-linux-musl.tar.gz" && \ - tar -C /tmp -xvf /tmp/sccache.tar.gz && \ - mv "/tmp/sccache-v${SCCACHE_VERSION}-${ARCH}-unknown-linux-musl/sccache" /usr/bin/sccache && \ - chmod +x /usr/bin/sccache - -# Set AUDITWHEEL_* env vars for use with auditwheel -ARG POLICY=manylinux_2_17 -ENV AUDITWHEEL_POLICY=${POLICY} AUDITWHEEL_ARCH=${ARCH} AUDITWHEEL_PLAT=${POLICY}_${ARCH} - -# Set sccache env vars -ENV CMAKE_CUDA_COMPILER_LAUNCHER=sccache -ENV CMAKE_CXX_COMPILER_LAUNCHER=sccache -ENV CMAKE_C_COMPILER_LAUNCHER=sccache -ENV SCCACHE_BUCKET=rapids-sccache-east -ENV SCCACHE_REGION=us-east-2 -ENV SCCACHE_IDLE_TIMEOUT=32768 -ENV SCCACHE_S3_USE_SSL=true -ENV SCCACHE_S3_NO_CREDENTIALS=false - -# Install ucx -ARG UCX_VERSION=1.14.1 -RUN mkdir -p /ucx-src && pushd /ucx-src &&\ - git clone https://github.com/openucx/ucx -b v${UCX_VERSION} ucx-git-repo &&\ - cd ucx-git-repo && \ - ./autogen.sh && \ - ./contrib/configure-release \ - --prefix=/usr \ - --enable-mt \ - --enable-cma \ - --enable-numa \ - --with-gnu-ld \ - --with-sysroot \ - --without-verbs \ - --without-rdmacm \ - --with-cuda=/usr/local/cuda && \ - CPPFLAGS=-I/usr/local/cuda/include make -j && \ - make install && \ - popd && \ - rm -rf /ucx-src/ - -# for pyenv -ARG PY39_VERSION="3.9.16" -ARG PY310_VERSION="3.10.9" - -# Install pyenv -RUN curl https://pyenv.run | bash - -# Create pyenvs -# TODO: Determine if any cleanup of the pyenv layers is needed to shrink the container -RUN pyenv update - -# Need to specify the openssl location because of the install from source -RUN CPPFLAGS="-I/usr/include/openssl" LDFLAGS="-L/usr/lib" pyenv install --verbose ${PY39_VERSION} - -RUN CPPFLAGS="-I/usr/include/openssl" LDFLAGS="-L/usr/lib" pyenv install --verbose ${PY310_VERSION} - -RUN pyenv global ${PY39_VERSION} && python -m pip install auditwheel patchelf twine && pyenv rehash - -RUN pyenv global ${PY310_VERSION} && python -m pip install auditwheel patchelf twine && pyenv rehash - -RUN echo -e '\ -#!/bin/bash\n\ -source scl_source enable devtoolset-11\n\ -' > /etc/profile.d/enable_devtools.sh - -# Install latest gha-tools -RUN wget https://github.com/rapidsai/gha-tools/releases/latest/download/tools.tar.gz -O - | tar -xz -C /usr/local/bin - -# Install the AWS CLI -RUN mkdir -p /aws_install && pushd /aws_install && \ - curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" && \ - unzip awscli-bundle.zip && \ - ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws && \ - popd && \ - rm -rf /aws_install - -# Mark all directories as safe for git so that GHA clones into the root don't -# run into issues -RUN git config --system --add safe.directory '*' - -CMD ["/bin/bash"] diff --git a/manylinux_v2_ubuntu/Dockerfile b/manylinux_v2_ubuntu/Dockerfile deleted file mode 100644 index 8809566..0000000 --- a/manylinux_v2_ubuntu/Dockerfile +++ /dev/null @@ -1,95 +0,0 @@ -ARG BASE_IMAGE=nvidia/cuda:11.8.0-devel-ubuntu20.04 -FROM ${BASE_IMAGE} - -ARG DEBIAN_FRONTEND=noninteractive - -ENV PYENV_ROOT="/pyenv" \ - PATH="/pyenv/bin:/pyenv/shims:$PATH" - -RUN apt update -y && apt install -y jq build-essential software-properties-common wget gcc zlib1g-dev libbz2-dev libssl-dev libreadline-dev libsqlite3-dev libffi-dev curl git libncurses5-dev libnuma-dev openssh-client libcudnn8-dev zip libopenblas-dev liblapack-dev protobuf-compiler autoconf automake libtool cmake && rm -rf /var/lib/apt/lists/* - -RUN add-apt-repository ppa:git-core/ppa && add-apt-repository ppa:ubuntu-toolchain-r/test && apt update -y && apt install -y git gcc-9 g++-9 && add-apt-repository -r ppa:git-core/ppa && add-apt-repository -r ppa:ubuntu-toolchain-r/test - -RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9 - -# Install sccache -ARG SCCACHE_VERSION=0.5.0 -ARG ARCH="aarch64" - -RUN curl -o /tmp/sccache.tar.gz \ - -L "https://github.com/mozilla/sccache/releases/download/v${SCCACHE_VERSION}/sccache-v${SCCACHE_VERSION}-${ARCH}-unknown-linux-musl.tar.gz" && \ - tar -C /tmp -xvf /tmp/sccache.tar.gz && \ - mv "/tmp/sccache-v${SCCACHE_VERSION}-${ARCH}-unknown-linux-musl/sccache" /usr/bin/sccache && \ - chmod +x /usr/bin/sccache - -# Set AUDITWHEEL_* env vars for use with auditwheel -ARG POLICY=manylinux_2_31 -ENV AUDITWHEEL_POLICY=${POLICY} AUDITWHEEL_ARCH=${ARCH} AUDITWHEEL_PLAT=${POLICY}_${ARCH} - -# Set sccache env vars -ENV CMAKE_CUDA_COMPILER_LAUNCHER=sccache -ENV CMAKE_CXX_COMPILER_LAUNCHER=sccache -ENV CMAKE_C_COMPILER_LAUNCHER=sccache -ENV SCCACHE_BUCKET=rapids-sccache-east -ENV SCCACHE_REGION=us-east-2 -ENV SCCACHE_IDLE_TIMEOUT=32768 -ENV SCCACHE_S3_USE_SSL=true -ENV SCCACHE_S3_NO_CREDENTIALS=false - -# Install ucx -ARG UCX_VERSION=1.14.1 -RUN mkdir -p /ucx-src && cd /ucx-src &&\ - git clone https://github.com/openucx/ucx -b v${UCX_VERSION} ucx-git-repo &&\ - cd ucx-git-repo && \ - ./autogen.sh && \ - ./contrib/configure-release \ - --prefix=/usr \ - --enable-mt \ - --enable-cma \ - --enable-numa \ - --with-gnu-ld \ - --with-sysroot \ - --without-verbs \ - --without-rdmacm \ - --with-cuda=/usr/local/cuda && \ - CPPFLAGS=-I/usr/local/cuda/include make -j && \ - make install && \ - cd / && \ - rm -rf /ucx-src/ - -# for pyenv -ARG PY39_VERSION="3.9.16" -ARG PY310_VERSION="3.10.9" - -# Install pyenv -RUN curl https://pyenv.run | bash - -# Create pyenvs -# TODO: Determine if any cleanup of the pyenv layers is needed to shrink the container -RUN pyenv update - -# Need to specify the openssl location because of the install from source -RUN pyenv install --verbose ${PY39_VERSION} - -RUN pyenv install --verbose ${PY310_VERSION} - -RUN pyenv global ${PY39_VERSION} && python -m pip install auditwheel patchelf twine && pyenv rehash - -RUN pyenv global ${PY310_VERSION} && python -m pip install auditwheel patchelf twine && pyenv rehash - -# Install latest gha-tools -RUN wget https://github.com/rapidsai/gha-tools/releases/latest/download/tools.tar.gz -O - | tar -xz -C /usr/local/bin - -# Install the AWS CLI -RUN mkdir -p /aws_install && cd /aws_install && \ - curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" && \ - unzip awscli-bundle.zip && \ - ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws && \ - cd / && \ - rm -rf /aws_install - -# Mark all directories as safe for git so that GHA clones into the root don't -# run into issues -RUN git config --system --add safe.directory '*' - -CMD ["/bin/bash"]