# 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: Test

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ['3.8', '3.9', '3.10', '3.11']

    steps:
    - name: clean up
      run: |
        df -h
        sudo rm -rf /usr/share/dotnet
        sudo rm -rf /usr/local/lib/android
        sudo rm -rf /opt/ghc
        sudo rm -rf "/usr/local/share/boost"
        sudo rm -rf "$AGENT_TOOLSDIRECTORY"
        df -h
    - uses: actions/checkout@v4

    # - name: Lint with ruff
    #   uses: astral-sh/ruff-action@v3
    #   with:
    #     src: "./src"

    - name: Try to restore models_eynollah
      uses: actions/cache/restore@v4
      id: all_model_cache
      with:
        path: models_eynollah
        key: models_eynollah-${{ hashFiles('src/eynollah/model_zoo/default_specs.py') }}

    - name: Download models
      if: steps.all_model_cache.outputs.cache-hit != 'true'
      run: |
        make models
        ls -la models_eynollah

    - uses: actions/cache/save@v4
      if: steps.all_model_cache.outputs.cache-hit != 'true'
      with:
        path: models_eynollah
        key: models_eynollah-${{ hashFiles('src/eynollah/model_zoo/default_specs.py') }}

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}

    # - uses: actions/cache@v4
    #   with:
    #     path: |
    #       path/to/dependencies
    #       some/other/dependencies
    #     key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        # preempt CUDA dependencies (which need core's recipe)
        pip install onnxruntime tensorflow tf-keras "torch<2.11"
        sed -i '/onnxruntime-gpu/d;/tensorrt/d;/torch/d;/tensorflow/d' requirements*.txt
        make install-dev EXTRAS=OCR,plotting
        make deps-test EXTRAS=OCR,plotting

    - name: Test with pytest
      run: make coverage PYTEST_ARGS="-vv --junitxml=pytest.xml"

    - name: Get coverage results
      run: |
        coverage report --format=markdown >> $GITHUB_STEP_SUMMARY
        coverage html
        coverage json
        coverage xml

    - name: Store coverage results
      uses: actions/upload-artifact@v4
      with:
          name: coverage-report_${{ matrix.python-version }}
          path: |
            htmlcov
            pytest.xml
            coverage.xml
            coverage.json

    - name: Upload coverage results
      uses: codecov/codecov-action@v4
      with:
        files: coverage.xml
        fail_ci_if_error: false

    - name: Test standalone CLI
      run: make smoke-test

    - name: Test OCR-D CLI
      run: make ocrd-test
