name: integration-app-harness

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

jobs:
  integration-app-harness:
    timeout-minutes: 30
    strategy:
      matrix:
        state_manager: [ "redis", "memory" ]
        python-version: ["3.11.5", "3.12.0"]
    runs-on: ubuntu-latest
    services:
      # Label used to access the service container
      redis:
        image: ${{ matrix.state_manager == 'redis' && '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
    - run: poetry run pip install pyvirtualdisplay pillow
    - name: Run app harness tests
      env:
        SCREENSHOT_DIR: /tmp/screenshots
        REDIS_URL: ${{ matrix.state_manager == 'redis' && 'redis://localhost:6379' || '' }}
      run: |
        poetry run pytest integration
    - uses: actions/upload-artifact@v3
      name: Upload failed test screenshots
      if: always()
      with:
        name: failed_test_screenshots
        path: /tmp/screenshots
