name: Build on M1
on:
  pull_request:
    paths:
      - .github/workflows/build-m1-binaries.yml
  push:
    branches:
      - nightly
  workflow_dispatch:
jobs:
  build_wheels:
    name: "Build TorchAudio M1 wheels"
    runs-on: macos-m1-11
    strategy:
      matrix:
        py_vers: [ "3.8", "3.9", "3.10" ]
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Build TorchAudio M1 wheel
        shell: arch -arch arm64 bash {0}
        env:
          ENV_NAME: conda-env-${{ github.run_id }}
          PY_VERS: ${{ matrix.py_vers }}
        run: |
          echo $PATH
          . ~/miniconda3/etc/profile.d/conda.sh
          set -ex
          . packaging/pkg_helpers.bash
          setup_build_version
          WHL_NAME=torchaudio-${BUILD_VERSION}-cp${PY_VERS/.}-cp${PY_VERS/.}-macosx_11_0_arm64.whl
          conda create -yp ${ENV_NAME} python=${PY_VERS} numpy cmake ninja wheel pkg-config
          conda run -p ${ENV_NAME} python3 -mpip install torch --pre --extra-index-url=https://download.pytorch.org/whl/nightly
          conda run -p ${ENV_NAME} python3 -mpip install delocate
          conda run -p ${ENV_NAME} python3 setup.py bdist_wheel
          export PYTORCH_VERSION="$(conda run -p ${ENV_NAME} python3 -mpip show torch | grep ^Version: | sed 's/Version: *//')"
          conda run -p ${ENV_NAME} DYLD_FALLBACK_LIBRARY_PATH="${ENV_NAME}/lib" delocate-wheel -v --ignore-missing-dependencies dist/${WHL_NAME}
          conda env remove -p ${ENV_NAME}
      - name: Test wheel
        shell: arch -arch arm64 bash {0}
        env:
          ENV_NAME: conda-test-env-${{ github.run_id }}
          PY_VERS: ${{ matrix.py_vers }}
        run: |
          . ~/miniconda3/etc/profile.d/conda.sh
          set -ex
          conda create -yp ${ENV_NAME} python=${PY_VERS} numpy
          conda run -p ${ENV_NAME} python3 -mpip install torch --pre --extra-index-url=https://download.pytorch.org/whl/nightly
          conda run -p ${ENV_NAME} python3 -mpip install dist/*.whl
          # Test torch is importable, by changing cwd and running import commands
          conda run --cwd /tmp -p ${ENV_NAME} python3 -c "import torchaudio;print('torchaudio version is ', torchaudio.__version__)"
          conda run --cwd /tmp -p ${ENV_NAME} python3 -c "import torch;import torchaudio;torchaudio.set_audio_backend('sox_io')"
          conda env remove -p ${ENV_NAME}
      - name: Upload wheel to GitHub
        if: ${{ github.event_name == 'push' && steps.extract_branch.outputs.branch == 'nightly' }}
        uses: actions/upload-artifact@v3
        with:
          name: torchaudio-py${{ matrix.py_vers }}-macos11-m1
          path: dist/
      - name: Upload wheel to S3
        if: ${{ github.event_name == 'push' && steps.extract_branch.outputs.branch == 'nightly' }}
        shell: arch -arch arm64 bash {0}
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
          CHANNEL: nightly
        run: |
          for pkg in dist/*; do
            aws s3 cp "$pkg" "s3://pytorch/whl/${CHANNEL}/cpu/" --acl public-read
          done
