name: integration-tests-wsl

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.id }}
  cancel-in-progress: true

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

permissions:
  contents: read

env:
  TELEMETRY_ENABLED: false
  NODE_OPTIONS: '--max_old_space_size=4096'

jobs:
  example-counter-wsl:
    timeout-minutes: 30
    # 2019 is more stable with WSL in GH actions
    # https://github.com/actions/runner-images/issues/5151
    # Confirmed through trial and error. 2022 has >80% failure rate (probably BSOD)
    runs-on: windows-2019
    steps:
      - uses: actions/checkout@v4
      - name: Clone Reflex Examples Repo
        uses: actions/checkout@v4
        with:
          repository: reflex-dev/reflex-examples
          path: reflex-examples

      - uses: Vampire/setup-wsl@v3
        with:
          distribution: Ubuntu-24.04

      - name: Install Python
        shell: wsl-bash {0}
        run: |
          apt update
          apt install -y python3 python3-pip curl dos2unix zip unzip

      - name: Install Poetry
        shell: wsl-bash {0}
        run: |
          curl -sSL https://install.python-poetry.org | python3 -
          # Symlink seems easier to make work than persisting PATH changes, in WSL
          ln -s /root/.local/bin/poetry /usr/local/bin/poetry

      - name: Install reflex deps
        shell: wsl-bash {0}
        run: |
          poetry install

      - name: Install uv
        shell: wsl-bash {0}
        run: |
          poetry run pip install uv

      - name: Install requirements for counter example
        working-directory: ./reflex-examples/counter
        shell: wsl-bash {0}
        run: |
          poetry run uv pip install -r requirements.txt
      - name: Check export --backend-only before init for counter example
        working-directory: ./reflex-examples/counter
        shell: wsl-bash {0}
        run: |
          export TELEMETRY_ENABLED=false
          poetry run reflex export --backend-only
      - name: Check run --backend-only before init for counter example
        shell: wsl-bash {0}
        run: |
          export TELEMETRY_ENABLED=false
          dos2unix scripts/integration.sh
          poetry run bash scripts/integration.sh ./reflex-examples/counter dev 8001 --backend-only --backend-port 8001
      - name: Init Website for counter example
        working-directory: ./reflex-examples/counter
        shell: wsl-bash {0}
        run: |
          export TELEMETRY_ENABLED=false
          poetry run reflex init --loglevel debug
      - name: Check export for counter example
        working-directory: ./reflex-examples/counter
        shell: wsl-bash {0}
        run: |
          export TELEMETRY_ENABLED=false
          poetry run reflex export --frontend-only --loglevel debug
      - name: Run Website and Check for errors
        shell: wsl-bash {0}
        run: |
          export TELEMETRY_ENABLED=false
          poetry run bash scripts/integration.sh ./reflex-examples/counter dev
