| name: linux-binary-build | |
| on: | |
| workflow_call: | |
| inputs: | |
| build_name: | |
| required: true | |
| type: string | |
| description: The build's name | |
| build_environment: | |
| required: true | |
| type: string | |
| description: The build environment | |
| PYTORCH_ROOT: | |
| required: true | |
| type: string | |
| description: Root directory for the pytorch/pytorch repository | |
| BUILDER_ROOT: | |
| required: true | |
| type: string | |
| description: Root directory for the pytorch/builder repository | |
| PACKAGE_TYPE: | |
| required: true | |
| type: string | |
| description: Package type | |
| DESIRED_CUDA: | |
| required: true | |
| type: string | |
| description: Desired Cuda version | |
| GPU_ARCH_VERSION: | |
| required: false | |
| type: string | |
| description: GPU Arch version | |
| GPU_ARCH_TYPE: | |
| required: true | |
| type: string | |
| description: GPU Arch type | |
| DOCKER_IMAGE: | |
| required: true | |
| type: string | |
| description: Docker image to use | |
| LIBTORCH_CONFIG: | |
| required: false | |
| type: string | |
| description: Desired libtorch config (for libtorch builds only) | |
| LIBTORCH_VARIANT: | |
| required: false | |
| type: string | |
| description: Desired libtorch variant (for libtorch builds only) | |
| DESIRED_DEVTOOLSET: | |
| required: false | |
| type: string | |
| description: Desired dev toolset | |
| DESIRED_PYTHON: | |
| required: false | |
| type: string | |
| description: Desired python version | |
| PYTORCH_EXTRA_INSTALL_REQUIREMENTS: | |
| required: false | |
| type: string | |
| description: Extra install requirements | |
| default: "" | |
| secrets: | |
| github-token: | |
| required: true | |
| description: Github Token | |
| jobs: | |
| build: | |
| runs-on: linux.12xlarge | |
| timeout-minutes: 150 | |
| env: | |
| PYTORCH_ROOT: ${{ inputs.PYTORCH_ROOT }} | |
| BUILDER_ROOT: ${{ inputs.BUILDER_ROOT }} | |
| PACKAGE_TYPE: ${{ inputs.PACKAGE_TYPE }} | |
| # TODO: This is a legacy variable that we eventually want to get rid of in | |
| # favor of GPU_ARCH_VERSION | |
| DESIRED_CUDA: ${{ inputs.DESIRED_CUDA }} | |
| GPU_ARCH_VERSION: ${{ inputs.GPU_ARCH_VERSION }} | |
| GPU_ARCH_TYPE: ${{ inputs.GPU_ARCH_TYPE }} | |
| DOCKER_IMAGE: ${{ inputs.DOCKER_IMAGE }} | |
| SKIP_ALL_TESTS: 1 | |
| LIBTORCH_CONFIG: ${{ inputs.LIBTORCH_CONFIG }} | |
| LIBTORCH_VARIANT: ${{ inputs.LIBTORCH_VARIANT }} | |
| DESIRED_DEVTOOLSET: ${{ inputs.DESIRED_DEVTOOLSET }} | |
| DESIRED_PYTHON: ${{ inputs.DESIRED_PYTHON }} | |
| PYTORCH_EXTRA_INSTALL_REQUIREMENTS: ${{ inputs.PYTORCH_EXTRA_INSTALL_REQUIREMENTS }} | |
| # Needed for conda builds | |
| ALPINE_IMAGE: "308535385114.dkr.ecr.us-east-1.amazonaws.com/tool/alpine" | |
| ANACONDA_USER: pytorch | |
| AWS_DEFAULT_REGION: us-east-1 | |
| BINARY_ENV_FILE: /tmp/env | |
| BUILD_ENVIRONMENT: ${{ inputs.build_environment }} | |
| GITHUB_TOKEN: ${{ secrets.github-token }} | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| PYTORCH_FINAL_PACKAGE_DIR: /artifacts | |
| SHA1: ${{ github.event.pull_request.head.sha || github.sha }} | |
| steps: | |
| - name: Make the env permanent during this workflow (but not the secrets) | |
| shell: bash | |
| run: | | |
| { | |
| echo "PYTORCH_ROOT=${{ env.PYTORCH_ROOT }}" | |
| echo "BUILDER_ROOT=${{ env.BUILDER_ROOT }}" | |
| echo "PACKAGE_TYPE=${{ env.PACKAGE_TYPE }}" | |
| echo "DESIRED_CUDA=${{ env.DESIRED_CUDA }}" | |
| echo "GPU_ARCH_VERSION=${{ env.GPU_ARCH_VERSION }}" | |
| echo "GPU_ARCH_TYPE=${{ env.GPU_ARCH_TYPE }}" | |
| echo "DOCKER_IMAGE=${{ env.DOCKER_IMAGE }}" | |
| echo "SKIP_ALL_TESTS=${{ env.SKIP_ALL_TESTS }}" | |
| echo "LIBTORCH_CONFIG=${{ env.LIBTORCH_CONFIG }}" | |
| echo "LIBTORCH_VARIANT=${{ env.LIBTORCH_VARIANT }}" | |
| echo "DESIRED_DEVTOOLSET=${{ env.DESIRED_DEVTOOLSET }}" | |
| echo "DESIRED_PYTHON=${{ env.DESIRED_PYTHON }}" | |
| echo "PYTORCH_EXTRA_INSTALL_REQUIREMENTS=${{ env.PYTORCH_EXTRA_INSTALL_REQUIREMENTS }}" | |
| echo "ALPINE_IMAGE=${{ env.ALPINE_IMAGE }}" | |
| echo "ANACONDA_USER=${{ env.ANACONDA_USER }}" | |
| echo "AWS_DEFAULT_REGION=${{ env.AWS_DEFAULT_REGION }}" | |
| echo "BINARY_ENV_FILE=${{ env.BINARY_ENV_FILE }}" | |
| echo "BUILD_ENVIRONMENT=${{ env.BUILD_ENVIRONMENT }}" | |
| echo "BUILD_NAME=${{ env.BUILD_NAME }}" | |
| echo "PR_NUMBER=${{ env.PR_NUMBER }}" | |
| echo "PYTORCH_FINAL_PACKAGE_DIR=${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" | |
| echo "SHA1=${{ env.SHA1 }}" | |
| } >> "${GITHUB_ENV} }}" | |
| - name: List the env | |
| shell: bash | |
| run: env | |
| - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)" | |
| uses: pytorch/test-infra/.github/actions/setup-ssh@main | |
| with: | |
| github-secret: ${{ secrets.github-token }} | |
| - name: Checkout PyTorch | |
| uses: pytorch/pytorch/.github/actions/checkout-pytorch@master | |
| - name: Setup Linux | |
| uses: ./.github/actions/setup-linux | |
| - name: Chown workspace | |
| uses: ./.github/actions/chown-workspace | |
| - name: Clean workspace | |
| shell: bash | |
| run: | | |
| rm -rf "${GITHUB_WORKSPACE}" | |
| mkdir "${GITHUB_WORKSPACE}" | |
| - name: Checkout PyTorch to pytorch dir | |
| uses: zhouzhuojie/checkout@05b13c9a0d21f08f6d5e64a1d5042246d13619d9 | |
| with: | |
| ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} | |
| submodules: recursive | |
| path: pytorch | |
| - name: Clean PyTorch checkout | |
| run: | | |
| # Remove any artifacts from the previous checkouts | |
| git clean -fxd | |
| working-directory: pytorch | |
| - name: Checkout pytorch/builder to builder dir | |
| uses: zhouzhuojie/checkout@05b13c9a0d21f08f6d5e64a1d5042246d13619d9 | |
| with: | |
| ref: main | |
| submodules: recursive | |
| repository: pytorch/builder | |
| path: builder | |
| - name: Clean pytorch/builder checkout | |
| run: | | |
| # Remove any artifacts from the previous checkouts | |
| git clean -fxd | |
| working-directory: builder | |
| - name: Pull Docker image | |
| uses: pytorch/test-infra/.github/actions/pull-docker-image@main | |
| with: | |
| docker-image: ${{ inputs.DOCKER_IMAGE }} | |
| - name: Build PyTorch binary | |
| run: | | |
| set -x | |
| mkdir -p artifacts/ | |
| container_name=$(docker run \ | |
| -e BINARY_ENV_FILE \ | |
| -e BUILDER_ROOT \ | |
| -e BUILD_ENVIRONMENT \ | |
| -e DESIRED_CUDA \ | |
| -e DESIRED_DEVTOOLSET \ | |
| -e DESIRED_PYTHON \ | |
| -e GITHUB_ACTIONS \ | |
| -e GPU_ARCH_TYPE \ | |
| -e GPU_ARCH_VERSION \ | |
| -e LIBTORCH_VARIANT \ | |
| -e PACKAGE_TYPE \ | |
| -e PYTORCH_FINAL_PACKAGE_DIR \ | |
| -e PYTORCH_ROOT \ | |
| -e SKIP_ALL_TESTS \ | |
| -e PYTORCH_EXTRA_INSTALL_REQUIREMENTS \ | |
| --tty \ | |
| --detach \ | |
| -v "${GITHUB_WORKSPACE}/pytorch:/pytorch" \ | |
| -v "${GITHUB_WORKSPACE}/builder:/builder" \ | |
| -v "${RUNNER_TEMP}/artifacts:/artifacts" \ | |
| -w / \ | |
| "${DOCKER_IMAGE}" | |
| ) | |
| docker exec -t -w "${PYTORCH_ROOT}" "${container_name}" bash -c "bash .circleci/scripts/binary_populate_env.sh" | |
| docker exec -t "${container_name}" bash -c "source ${BINARY_ENV_FILE} && bash /builder/${{ inputs.PACKAGE_TYPE }}/build.sh" | |
| - name: Chown artifacts | |
| if: always() | |
| shell: bash | |
| run: | | |
| # Ensure the working directory gets chowned back to the current user | |
| docker run --rm -v "${RUNNER_TEMP}/artifacts:/v" -w /v "${ALPINE_IMAGE}" chown -R "$(id -u):$(id -g)" . | |
| - uses: actions/upload-artifact@v3 | |
| with: | |
| name: ${{ inputs.build_name }} | |
| if-no-files-found: error | |
| path: | |
| ${{ runner.temp }}/artifacts/* | |
| - name: Teardown Linux | |
| if: always() | |
| uses: pytorch/test-infra/.github/actions/teardown-linux@main | |
| - name: Chown workspace | |
| if: always() | |
| uses: ./pytorch/.github/actions/chown-workspace |