name: Build on M1
on:
  pull_request:
    paths:
      - .github/workflows/build-m1-binaries.yml
  push:
    branches:
      - nightly
  workflow_dispatch:
jobs:
  build_wheels:
    name: "Build TorchVision M1 wheels"
    runs-on: macos-m1
    strategy:
      matrix:
        py_vers: [ "3.8", "3.9", "3.10" ]
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Build TorchVision M1 wheel
        shell: arch -arch arm64 bash {0}
        env:
          ENV_NAME: conda-env-${{ github.run_id }}
          PY_VERS: ${{ matrix.py_vers }}
        run: |
          . ~/miniconda3/etc/profile.d/conda.sh
          set -ex
          export BUILD_VERSION=0.14.0.dev$(date "+%Y%m%d")
          WHL_NAME=torchvision-${BUILD_VERSION}-cp${PY_VERS/.}-cp${PY_VERS/.}-macosx_11_0_arm64.whl
          conda create -yp ${ENV_NAME} python=${PY_VERS} numpy libpng openjpeg wheel pkg-config
          conda run -p ${ENV_NAME} python3 -mpip install torch --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
          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 --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 torchvision;print('torchvision version is ', torchvision.__version__)"
          conda run --cwd /tmp -p ${ENV_NAME} python3 -c "import torch;import torchvision;print('Is torchvision useable?', all(x is not None for x in [torch.ops.image.decode_png, torch.ops.torchvision.roi_align]))"
          conda env remove -p ${ENV_NAME}
      - name: Upload wheel to GitHub
        uses: actions/upload-artifact@v3
        with:
          name: torchvision-py${{ matrix.py_vers }}-macos11-m1
          path: dist/
      - name: Upload wheel to S3
        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
