name: Tests

on:
  pull_request:
    branches:
      - main
    paths:
      - "lerobot/**"
      - "tests/**"
      - "examples/**"
      - ".github/**"
      - "poetry.lock"
      - "Makefile"
      - ".cache/**"
  push:
    branches:
      - main
    paths:
      - "lerobot/**"
      - "tests/**"
      - "examples/**"
      - ".github/**"
      - "poetry.lock"
      - "Makefile"
      - ".cache/**"

jobs:
  pytest:
    name: Pytest
    runs-on: ubuntu-latest
    env:
      MUJOCO_GL: egl
    steps:
      - uses: actions/checkout@v4
        with:
          lfs: true  # Ensure LFS files are pulled

      - name: Install apt dependencies
      # portaudio19-dev is needed to install pyaudio
        run: |
          sudo apt-get update && \
          sudo apt-get install -y libegl1-mesa-dev ffmpeg portaudio19-dev

      - name: Install poetry
        run: |
          pipx install poetry && poetry config virtualenvs.in-project true
          echo "${{ github.workspace }}/.venv/bin" >> $GITHUB_PATH

      # TODO(rcadene, aliberts): python 3.12 seems to be used in the tests, not python 3.10
      - name: Set up Python 3.10
        uses: actions/setup-python@v5
        with:
          python-version: "3.10"
          cache: "poetry"

      - name: Install poetry dependencies
        run: |
          poetry install --all-extras

      - name: Test with pytest
        run: |
          pytest tests -v --cov=./lerobot --durations=0 \
            -W ignore::DeprecationWarning:imageio_ffmpeg._utils:7 \
            -W ignore::UserWarning:torch.utils.data.dataloader:558 \
            -W ignore::UserWarning:gymnasium.utils.env_checker:247 \
            && rm -rf tests/outputs outputs

  pytest-minimal:
    name: Pytest (minimal install)
    runs-on: ubuntu-latest
    env:
      MUJOCO_GL: egl
    steps:
      - uses: actions/checkout@v4
        with:
          lfs: true  # Ensure LFS files are pulled

      - name: Install apt dependencies
        run: sudo apt-get update && sudo apt-get install -y ffmpeg

      - name: Install poetry
        run: |
          pipx install poetry && poetry config virtualenvs.in-project true
          echo "${{ github.workspace }}/.venv/bin" >> $GITHUB_PATH

      # TODO(rcadene, aliberts): python 3.12 seems to be used in the tests, not python 3.10
      - name: Set up Python 3.10
        uses: actions/setup-python@v5
        with:
          python-version: "3.10"

      - name: Install poetry dependencies
        run: |
          poetry install --extras "test"

      - name: Test with pytest
        run: |
          pytest tests -v --cov=./lerobot --durations=0 \
            -W ignore::DeprecationWarning:imageio_ffmpeg._utils:7 \
            -W ignore::UserWarning:torch.utils.data.dataloader:558 \
            -W ignore::UserWarning:gymnasium.utils.env_checker:247 \
            && rm -rf tests/outputs outputs

  # TODO(aliberts, rcadene): redesign after v2 migration / removing hydra
  # end-to-end:
  #   name: End-to-end
  #   runs-on: ubuntu-latest
  #   env:
  #     MUJOCO_GL: egl
  #   steps:
  #     - uses: actions/checkout@v4
  #       with:
  #         lfs: true  # Ensure LFS files are pulled

  #     - name: Install apt dependencies
  #     # portaudio19-dev is needed to install pyaudio
  #       run: |
  #         sudo apt-get update && \
  #         sudo apt-get install -y libegl1-mesa-dev portaudio19-dev

  #     - name: Install poetry
  #       run: |
  #         pipx install poetry && poetry config virtualenvs.in-project true
  #         echo "${{ github.workspace }}/.venv/bin" >> $GITHUB_PATH

  #     - name: Set up Python 3.10
  #       uses: actions/setup-python@v5
  #       with:
  #         python-version: "3.10"
  #         cache: "poetry"

  #     - name: Install poetry dependencies
  #       run: |
  #         poetry install --all-extras

  #     - name: Test end-to-end
  #       run: |
  #         make test-end-to-end \
  #           && rm -rf outputs
