name: Self-hosted runner (scheduled)

on:
  push:
    branches:
      - ci_*
  repository_dispatch:
  schedule:
    - cron: "0 0 * * *"

jobs:
  run_all_tests_torch_and_tf_gpu:
    runs-on: [self-hosted, single-gpu]
    steps:
    - uses: actions/checkout@v2

    - name: Loading cache.
      uses: actions/cache@v2
      id: cache
      with:
        path: .env
        key: v0-slow_tests_tf_torch_gpu-${{ hashFiles('setup.py') }}

    - name: Python version
      run: |
        which python
        python --version
        pip --version
    - name: Current dir
      run: pwd
    - run: nvidia-smi
    - name: Create new python env (on self-hosted runners we have to handle isolation ourselves)
      if: steps.cache.outputs.cache-hit != 'true'
      run: |
        python -m venv .env
        source .env/bin/activate
        which python
        python --version
        pip --version
    - name: Install dependencies
      run: |
        source .env/bin/activate
        pip install --upgrade pip
        pip install torch!=1.6.0
        pip install .[sklearn,testing,onnxruntime]
        pip install git+https://github.com/huggingface/datasets

    - name: Are GPUs recognized by our DL frameworks
      run: |
        source .env/bin/activate
        python -c "import torch; print('Cuda available:', torch.cuda.is_available())"
        python -c "import torch; print('Number of GPUs available:', torch.cuda.device_count())"


    - name: Run all tests on GPU
      env:
        TF_FORCE_GPU_ALLOW_GROWTH: "true"
        OMP_NUM_THREADS: 1
        RUN_SLOW: yes
        USE_CUDA: yes
      run: |
        source .env/bin/activate
        python -m pytest -n 1 --dist=loadfile -s ./tests/

    - name: Run examples tests on GPU
      env:
        TF_FORCE_GPU_ALLOW_GROWTH: "true"
        OMP_NUM_THREADS: 1
        RUN_SLOW: yes
        USE_CUDA: yes
      run: |
        source .env/bin/activate
        pip install -r examples/requirements.txt
        python -m pytest -n 1 --dist=loadfile -s examples

  run_all_tests_torch_and_tf_multiple_gpu:
    runs-on: [self-hosted, multi-gpu]
    steps:
      - uses: actions/checkout@v2

      - name: Loading cache.
        uses: actions/cache@v2
        id: cache
        with:
          path: .env
          key: v0-slow_tests_tf_torch_multi_gpu-${{ hashFiles('setup.py') }}

      - name: Python version
        run: |
          which python
          python --version
          pip --version
      - name: Current dir
        run: pwd
      - run: nvidia-smi
      - name: Create new python env (on self-hosted runners we have to handle isolation ourselves)
        if: steps.cache.outputs.cache-hit != 'true'
        run: |
          python -m venv .env
          source .env/bin/activate
          which python
          python --version
          pip --version
      - name: Install dependencies
        run: |
          source .env/bin/activate
          pip install --upgrade pip
          pip install torch!=1.6.0
          pip install .[sklearn,testing,onnxruntime]
          pip install git+https://github.com/huggingface/datasets

      - name: Are GPUs recognized by our DL frameworks
        run: |
          source .env/bin/activate
          python -c "import torch; print('Cuda available:', torch.cuda.is_available())"
          python -c "import torch; print('Number of GPUs available:', torch.cuda.device_count())"

      - name: Run all tests on GPU
        env:
          TF_FORCE_GPU_ALLOW_GROWTH: "true"
          OMP_NUM_THREADS: 1
          RUN_SLOW: yes
          USE_CUDA: yes
        run: |
          source .env/bin/activate
          python -m pytest -n 1 --dist=loadfile -s ./tests/

      - name: Run examples tests on GPU
        env:
          TF_FORCE_GPU_ALLOW_GROWTH: "true"
          OMP_NUM_THREADS: 1
          RUN_SLOW: yes
          USE_CUDA: yes
        run: |
          source .env/bin/activate
          pip install -r examples/requirements.txt
          python -m pytest -n 1 --dist=loadfile -s examples
