# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: CPU Unit Test CI

on:
  push:
    paths-ignore:
      - "docs/*"
      - "third_party/*"
      - .gitignore
      - "*.md"
  pull_request:
    paths-ignore:
      - "docs/*"
      - "third_party/*"
      - .gitignore
      - "*.md"

jobs:
  build_test:
    strategy:
        fail-fast: false
        matrix:
          include:
            - os: linux.2xlarge
              python-version: 3.8
              python-tag: "py38"
            - os: linux.2xlarge
              python-version: 3.9
              python-tag: "py39"
            - os: linux.2xlarge
              python-version: '3.10'
              python-tag: "py310"
            - os: linux.2xlarge
              python-version: '3.11'
              python-tag: "py311"
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@main
    with:
      runner: ${{ matrix.os }}
      timeout: 15
      script: |
        ldd --version
        conda create -y --name build_binary python=${{ matrix.python-version }}
        conda info
        python --version
        conda run -n build_binary python --version
        conda install -n build_binary \
          --yes \
          pytorch cpuonly -c pytorch-nightly
        conda run -n build_binary \
          python -c "import torch.distributed"
        conda run -n build_binary \
          pip install fbgemm-gpu --index-url https://download.pytorch.org/whl/nightly/cpu
        conda run -n build_binary \
          python -c "import fbgemm_gpu"
        echo "fbgemm_gpu succeeded"
        conda run -n build_binary \
          pip install -r requirements.txt
        conda run -n build_binary \
          python setup.py bdist_wheel \
          --python-tag=${{ matrix.python-tag }}
        conda run -n build_binary \
          python -c "import torchrec"
        echo "torch.distributed succeeded"
        conda run -n build_binary \
          python -c "import numpy"
        echo "numpy succeeded"
        conda install -n build_binary -y pytest
        conda run -n build_binary \
          python -m pytest torchrec -v -s -W ignore::pytest.PytestCollectionWarning --continue-on-collection-errors \
          --ignore-glob=**/test_utils/
        echo "Starting C++ Tests"
        conda install -n build_binary -y gxx_linux-64
        conda run -n build_binary \
          x86_64-conda-linux-gnu-g++ --version
        conda install -n build_binary -c anaconda redis -y
        conda run -n build_binary redis-server --daemonize yes
        mkdir cpp-build
        cd cpp-build
        conda run -n build_binary cmake \
            -DBUILD_TEST=ON \
            -DBUILD_REDIS_IO=ON \
            -DCMAKE_PREFIX_PATH=/opt/conda/envs/build_binary/lib/python${{ matrix.python-version }}/site-packages/torch/share/cmake ..
        conda run -n build_binary make -j
        conda run -n build_binary ctest -V .