name: Unit-tests on Linux GPU

on:
  pull_request:
  push:
    branches:
      - nightly
      - main
      - release/*
  workflow_dispatch:

env:
  CHANNEL: "nightly"

jobs:
  tests:
    strategy:
      matrix:
        python_version: ["3.8"]
        cuda_arch_version: ["11.6"]
      fail-fast: false
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@main
    with:
      runner: linux.g5.4xlarge.nvidia.gpu
      repository: pytorch/vision
      gpu-arch-type: cuda
      gpu-arch-version: ${{ matrix.cuda_arch_version }}
      timeout: 120
      script: |
        # Mark Build Directory Safe
        git config --global --add safe.directory /__w/vision/vision

        # Set up Environment Variables
        export PYTHON_VERSION="${{ matrix.python_version }}"
        export VERSION="${{ matrix.cuda_arch_version }}"
        export CUDATOOLKIT="pytorch-cuda=${VERSION}"

        # Set CHANNEL
        if [[ (${GITHUB_EVENT_NAME} = 'pull_request' && (${GITHUB_BASE_REF} = 'release'*)) || (${GITHUB_REF} = 'refs/heads/release'*) ]]; then
          export CHANNEL=test
        else
          export CHANNEL=nightly
        fi

        # Create Conda Env
        conda create -yp ci_env python="${PYTHON_VERSION}" numpy libpng jpeg scipy
        conda activate /work/ci_env
        
        # Install PyTorch, Torchvision, and testing libraries
        set -ex
        conda install \
          --yes \
          -c "pytorch-${CHANNEL}" \
          -c nvidia "pytorch-${CHANNEL}"::pytorch[build="*${VERSION}*"] \
          "${CUDATOOLKIT}"
        python3 setup.py develop
        python3 -m pip install pytest pytest-mock 'av<10'

        # Run Tests
        python3 -m torch.utils.collect_env
        python3 -m pytest --junitxml=test-results/junit.xml -v --durations 20
