pytorch/.github/workflows/_binary-upload.yml
Huy Do 9035b6a651 Allow disable binary build jobs on CI (#100754)
Given the recent outage w.r.t. binary workflows running on CI, I want to close the gap between them and regular CI jobs.  The first part is to add the same filter step used by regular CI jobs so that oncalls can disable the job if need.

* Nightly runs are excluded as it includes the step to publish nightly binaries.  Allowing oncalls to disable this part requires more thoughts.  So this covers only CI binary build and test jobs
* As binary jobs doesn't have a concept of test matrix config which is a required parameter to the filter script, I use a pseudo input of test config default there

### Testing

* https://github.com/pytorch/pytorch/issues/100758.  The job is skipped in https://github.com/pytorch/pytorch/actions/runs/4911034089/jobs/8768782689
* https://github.com/pytorch/pytorch/issues/100759.  The job is skipped in https://github.com/pytorch/pytorch/actions/runs/4911033966/jobs/8768713669

Note that Windows binary jobs are not run in PR anymore after https://github.com/pytorch/pytorch/pull/100638, and MacOS binary jobs only run nightly.  So there are only Linux jobs left.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/100754
Approved by: https://github.com/ZainRizvi
2023-05-09 20:01:00 +00:00

139 lines
5.2 KiB
YAML

name: upload
on:
workflow_call:
inputs:
build_name:
required: true
type: string
description: The build's name
use_s3:
type: boolean
default: true
description: If true, will download artifacts from s3. Otherwise will use the default GitHub artifact download action
PYTORCH_ROOT:
required: false
type: string
description: Root directory for the pytorch/pytorch repository. Not actually needed, but currently passing it in since we pass in the same inputs to the reusable workflows of all binary builds
BUILDER_ROOT:
required: false
type: string
description: Root directory for the pytorch/builder repository. Not actually needed, but currently passing it in since we pass in the same inputs to the reusable workflows of all binary builds
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: false
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
secrets:
github-token:
required: true
description: Github Token
aws-access-key-id:
required: true
description: AWS access key id
aws-pytorch-uploader-secret-access-key:
required: true
description: AWS secret access key
conda-pytorchbot-token:
required: true
description: Conda PyTorchBot token
jobs:
build:
runs-on: ubuntu-22.04
container:
image: continuumio/miniconda3:4.12.0
env:
PYTORCH_ROOT: /pytorch
BUILDER_ROOT: /builder
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 }}
ANACONDA_USER: pytorch
BINARY_ENV_FILE: /tmp/env
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: Checkout PyTorch
uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
with:
no-sudo: true
- name: Download Build Artifacts
id: download-artifacts
# NB: When the previous build job is skipped, there won't be any artifacts and
# this step will fail. Binary build jobs can only be skipped on CI, not nightly
continue-on-error: true
uses: actions/download-artifact@v3
with:
name: ${{ inputs.build_name }}
path: "${{ runner.temp }}/artifacts/"
- name: Set DRY_RUN (only for tagged pushes)
if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || (startsWith(github.event.ref, 'refs/tags/') && !startsWith(github.event.ref, 'refs/tags/ciflow/'))) }}
run: |
echo "DRY_RUN=disabled" >> "$GITHUB_ENV"
- name: Set UPLOAD_CHANNEL (only for tagged pushes)
if: ${{ github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/') && !startsWith(github.event.ref, 'refs/tags/ciflow/') }}
shell: bash -e -l {0}
run: |
# reference ends with an RC suffix
if [[ ${GITHUB_REF_NAME} = *-rc[0-9]* ]]; then
echo "UPLOAD_CHANNEL=test" >> "$GITHUB_ENV"
fi
- name: Upload binaries
if: steps.download-artifacts.outcome && steps.download-artifacts.outcome == 'success'
env:
PKG_DIR: "${{ runner.temp }}/artifacts"
UPLOAD_SUBFOLDER: "${{ env.DESIRED_CUDA }}"
# When running these on pull_request events these should be blank
AWS_ACCESS_KEY_ID: ${{ secrets.aws-access-key-id }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.aws-pytorch-uploader-secret-access-key }}
ANACONDA_API_TOKEN: ${{ secrets.conda-pytorchbot-token }}
BUILD_NAME: ${{ inputs.build_name }}
run: |
set -ex
bash .circleci/scripts/binary_upload.sh