name: unit-tests

on:
  push:
    branches: [ "main", "reflex-0.4.0" ]
    paths-ignore:
      - '**/*.md'
  pull_request:
    branches: [ "main", "reflex-0.4.0" ]
    paths-ignore:
      - '**/*.md'

permissions:
  contents: read

defaults:
    run:
        shell: bash

jobs:
  unit-tests:
    timeout-minutes: 30
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        python-version: ["3.8.18", "3.9.18", "3.10.13", "3.11.5", "3.12.0"]
        # Windows is a bit behind on Python version availability in Github
        exclude:
          - os: windows-latest
            python-version: "3.10.13"
          - os: windows-latest
            python-version: "3.9.18"
          - os: windows-latest
            python-version: "3.8.18"
        include:
          - os: windows-latest
            python-version: "3.10.11"
          - os: windows-latest
            python-version: "3.9.13"
          - os: windows-latest
            python-version: "3.8.10"
    runs-on: ${{ matrix.os }}
    # Service containers to run with `runner-job`
    services:
      # Label used to access the service container
      redis:
        image: ${{ matrix.os == 'ubuntu-latest' && 'redis' || '' }}
        # Set health checks to wait until redis has started
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          # Maps port 6379 on service container to the host
          - 6379:6379
    steps:
    - uses: actions/checkout@v4
    - uses: ./.github/actions/setup_build_env
      with:
          python-version: ${{ matrix.python-version }}
          run-poetry-install: true
          create-venv-at-path: .venv
    - name: Run unit tests
      run: |
        export PYTHONUNBUFFERED=1
        poetry run pytest tests --cov --no-cov-on-fail --cov-report=
    - name: Run unit tests w/ redis
      if: ${{ matrix.os == 'ubuntu-latest' }}
      run: |
        export PYTHONUNBUFFERED=1
        export REDIS_URL=redis://localhost:6379
        poetry run pytest tests --cov --no-cov-on-fail --cov-report=
    - run: poetry run coverage html
