name: CI
on: [push, pull_request]

# Run linter with github actions for quick feedbacks.
# Run macos tests with github actions. Linux (CPU & GPU) tests currently runs on CircleCI
jobs:
  linter:
    runs-on: ubuntu-latest
    # run on PRs, or commits to facebookresearch (not internal)
    if: ${{ github.repository_owner == 'facebookresearch' || github.event_name == 'pull_request' }}
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3.6
        uses: actions/setup-python@v2
        with:
          python-version: 3.6
      - name: Install dependencies
        # flake8-bugbear flake8-comprehensions are useful but not available internally
        run: |
          python -m pip install --upgrade pip
          python -m pip install flake8==3.8.1 isort==4.3.21
          python -m pip install black==21.4b2
          flake8 --version
      - name: Lint
        run: |
          echo "Running isort"
          isort -c -sp .
          echo "Running black"
          black -l 100 --check .
          echo "Running flake8"
          flake8 .

  macos_tests:
    runs-on: macos-latest
    # run on PRs, or commits to facebookresearch (not internal)
    if: ${{ github.repository_owner == 'facebookresearch' || github.event_name == 'pull_request' }}
    strategy:
      fail-fast: false
      matrix:
        torch: ["1.8", "1.9", "1.10"]
        include:
          - torch: "1.8"
            torchvision: 0.9
          - torch: "1.9"
            torchvision: "0.10"
          - torch: "1.10"
            torchvision: "0.11.1"
    env:
      # point datasets to ~/.torch so it's cached by CI
      DETECTRON2_DATASETS: ~/.torch/datasets
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up Python 3.6
        uses: actions/setup-python@v2
        with:
          python-version: 3.6
      - name: Cache dependencies
        uses: actions/cache@v2
        with:
          path: |
            ${{ env.pythonLocation }}/lib/python3.6/site-packages
            ~/.torch
          key: ${{ runner.os }}-torch${{ matrix.torch }}-${{ hashFiles('setup.py') }}-20210420

      - name: Install dependencies
        run: |
          python -m pip install -U pip
          python -m pip install ninja opencv-python-headless onnx pytest-xdist
          python -m pip install torch==${{matrix.torch}} torchvision==${{matrix.torchvision}} -f https://download.pytorch.org/whl/torch_stable.html
          # install from github to get latest; install iopath first since fvcore depends on it
          python -m pip install -U 'git+https://github.com/facebookresearch/iopath'
          python -m pip install -U 'git+https://github.com/facebookresearch/fvcore'

      - name: Build and install
        run: |
          CC=clang CXX=clang++ python -m pip install -e .[all]
          python -m detectron2.utils.collect_env
          ./datasets/prepare_for_tests.sh
      - name: Run unittests
        run: python -m pytest -n 4 --durations=15 -v tests/
