name: Build for M1
on:
  pull_request:
    paths:
      - .github/workflows/build-m1-binaries.yml
  push:
    branches:
      - nightly
      - release/*
    tags:
      # NOTE: Binary build pipelines should only get triggered on release candidate builds
      # Release candidate tags look like: v1.11.0-rc1
      - v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+
  workflow_dispatch:
env:
  CHANNEL: "nightly"
jobs:
  build_conda:
    name: "Build TorchAudio M1 conda packages"
    runs-on: macos-m1-12
    strategy:
      matrix:
        py_vers: [ "3.8", "3.9", "3.10" ]
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Set CHANNEL (only for tagged pushes)
        if: ${{ github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/') }}
        run: |
          # reference ends with an RC suffix
          if [[ ${GITHUB_REF_NAME} = *-rc[0-9]* ]]; then
            echo "CHANNEL=test" >> "$GITHUB_ENV"
          fi
      - name: Set Release CHANNEL (for release)
        if: ${{ (github.event_name == 'pull_request' && startsWith(github.base_ref, 'release')) || startsWith(github.ref, 'refs/heads/release') }}
        run: |
          echo "CHANNEL=test" >> "$GITHUB_ENV"
      - name: Setup miniconda
        uses: pytorch/test-infra/.github/actions/setup-miniconda@main
      - name: Install conda-build and purge previous artifacts
        shell: arch -arch arm64 bash {0}
        run: |
          conda install -yq conda-build
          conda build purge-all
      - name: Build TorchAudio M1 conda package
        shell: arch -arch arm64 bash {0}
        env:
          ENV_NAME: conda-env-${{ github.run_id }}
          PY_VERS: ${{ matrix.py_vers }}
          CU_VERSION: cpu
          USE_FFMPEG: true
          USE_OPENMP: false
          USE_CUDA: false
        run: |
          set -ex
          . packaging/pkg_helpers.bash

          export CONDA_CHANNEL_FLAGS=""
          if [[ $CHANNEL == "test" ]]; then
            setup_cuda
            setup_base_build_version
            export CONDA_CHANNEL_FLAGS="-c pytorch-test"
            setup_macos
          else
            setup_cuda
            setup_build_version
            setup_macos
          fi
          export PYTORCH_VERSION="$(conda run -p ${ENV_NAME} python3 -mpip show torch | grep ^Version: | sed 's/Version: *//')"
          git submodule update --init --recursive
          export SOURCE_ROOT_DIR=$(pwd)
          export FFMPEG_ROOT="${SOURCE_ROOT_DIR}/third_party/ffmpeg"
          . packaging/ffmpeg/build.sh
          setup_conda_pytorch_constraint
          setup_conda_cudatoolkit_constraint
          setup_visual_studio_constraint
          conda build \
            -c defaults \
            $CONDA_CHANNEL_FLAGS \
            --no-anaconda-upload \
            --python "$PY_VERS" \
            --output-folder=dist/ \
            packaging/torchaudio
      - name: Upload package to GitHub
        uses: actions/upload-artifact@v3
        with:
          name: torchaudio-py${{ matrix.py_vers }}-macos11-m1-conda
          path: dist/
      - name: Upload package to conda
        if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || startsWith(github.event.ref, 'refs/tags/')) }}
        shell: arch -arch arm64 bash {0}
        env:
          CONDA_PYTORCHBOT_TOKEN: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
        run: |
          conda install -yq anaconda-client
          set -x
          export ANACONDA_PATH=$(conda info --base)/bin
          $ANACONDA_PATH/anaconda  -t "${CONDA_PYTORCHBOT_TOKEN}" upload dist/osx-arm64/*.tar.bz2 -u "pytorch-${CHANNEL}" --label main --no-progress --force

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}-${{ github.event_name == 'workflow_dispatch' }}
  cancel-in-progress: true
