name: integration-tests on: push: branches: ["main"] paths-ignore: - "**/*.md" pull_request: branches: ["main"] paths-ignore: - "**/*.md" concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.id }} cancel-in-progress: true permissions: contents: read defaults: run: shell: bash env: # Windows CI would fail without this. # Ref: https://gist.github.com/NodeJSmith/e7e37f2d3f162456869f015f842bcf15 # TODO: can we fix windows encoding natively within reflex? Bug above can hit real users too (less common, but possible) # - Catch encoding errors when printing logs # - Best effort print lines that contain illegal chars (map to some default char, etc.) PYTHONIOENCODING: "utf8" TELEMETRY_ENABLED: false NODE_OPTIONS: "--max_old_space_size=8192" PR_TITLE: ${{ github.event.pull_request.title }} jobs: example-counter-and-nba-proxy: env: OUTPUT_FILE: import_benchmark.json timeout-minutes: 30 strategy: # Prioritize getting more information out of the workflow (even if something fails) fail-fast: false matrix: # Show OS combos first in GUI os: [ubuntu-latest, windows-latest] python-version: ['3.10.16', '3.11.11', '3.12.8', '3.13.1'] exclude: - os: windows-latest python-version: "3.11.11" - os: windows-latest python-version: '3.10.16' include: - os: windows-latest python-version: "3.11.9" - os: windows-latest python-version: '3.10.11' runs-on: ${{ matrix.os }} 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: Clone Reflex Examples Repo uses: actions/checkout@v4 with: repository: reflex-dev/reflex-examples path: reflex-examples - name: Install requirements for counter example working-directory: ./reflex-examples/counter run: | poetry run uv pip install -r requirements.txt - name: Install additional dependencies for DB access run: poetry run uv pip install psycopg - name: Check export --backend-only before init for counter example working-directory: ./reflex-examples/counter run: | poetry run reflex export --backend-only - name: Check run --backend-only before init for counter example run: | 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 run: | poetry run reflex init --loglevel debug - name: Check export for counter example working-directory: ./reflex-examples/counter run: | poetry run reflex export - name: Run Website and Check for errors run: | # Check that npm is home npm -v poetry run bash scripts/integration.sh ./reflex-examples/counter dev - name: Measure and upload .web size run: poetry run python benchmarks/benchmark_web_size.py --os "${{ matrix.os }}" --python-version "${{ matrix.python-version }}" --commit-sha "${{ github.sha }}" --pr-id "${{ github.event.pull_request.id }}" --branch-name "${{ github.head_ref || github.ref_name }}" --path ./reflex-examples/counter/.web --app-name "counter" - name: Install hyperfine run: cargo install hyperfine - name: Benchmark imports working-directory: ./reflex-examples/counter run: hyperfine --warmup 3 "export POETRY_VIRTUALENVS_PATH=../../.venv; poetry run python counter/counter.py" --show-output --export-json "${{ env.OUTPUT_FILE }}" --shell bash - name: Upload Benchmarks run: poetry run python benchmarks/benchmark_imports.py --os "${{ matrix.os }}" --python-version "${{ matrix.python-version }}" --commit-sha "${{ github.sha }}" --benchmark-json "./reflex-examples/counter/${{ env.OUTPUT_FILE }}" --branch-name "${{ github.head_ref || github.ref_name }}" --pr-id "${{ github.event.pull_request.id }}" --app-name "counter" - name: Install requirements for nba proxy example working-directory: ./reflex-examples/nba-proxy run: | poetry run uv pip install -r requirements.txt - name: Install additional dependencies for DB access run: poetry run uv pip install psycopg - name: Check export --backend-only before init for nba-proxy example working-directory: ./reflex-examples/nba-proxy run: | poetry run reflex export --backend-only - name: Init Website for nba-proxy example working-directory: ./reflex-examples/nba-proxy run: | poetry run reflex init --loglevel debug - name: Run Website and Check for errors run: | # Check that npm is home npm -v poetry run bash scripts/integration.sh ./reflex-examples/nba-proxy dev reflex-web: strategy: fail-fast: false matrix: # Show OS combos first in GUI os: [ubuntu-latest] python-version: ["3.11.11", "3.12.8"] env: REFLEX_WEB_WINDOWS_OVERRIDE: "1" runs-on: ${{ matrix.os }} 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: Clone Reflex Website Repo uses: actions/checkout@v4 with: repository: reflex-dev/reflex-web ref: main path: reflex-web - name: Install Requirements for reflex-web working-directory: ./reflex-web run: poetry run uv pip install $(grep -ivE "reflex " requirements.txt) - name: Install additional dependencies for DB access run: poetry run uv pip install psycopg - name: Init Website for reflex-web working-directory: ./reflex-web run: poetry run reflex init - name: Run Website and Check for errors run: | # Check that npm is home npm -v poetry run bash scripts/integration.sh ./reflex-web prod - name: Measure and upload .web size run: poetry run python benchmarks/benchmark_web_size.py --os "${{ matrix.os }}" --python-version "${{ matrix.python-version }}" --commit-sha "${{ github.sha }}" --pr-id "${{ github.event.pull_request.id }}" --branch-name "${{ github.head_ref || github.ref_name }}" --app-name "reflex-web" --path ./reflex-web/.web rx-shout-from-template: strategy: fail-fast: false runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup_build_env with: python-version: "3.11.11" run-poetry-install: true create-venv-at-path: .venv - name: Create app directory run: mkdir rx-shout-from-template - name: Init reflex-web from template run: poetry run reflex init --template https://github.com/masenf/rx_shout working-directory: ./rx-shout-from-template - name: ignore reflex pin in requirements run: sed -i -e '/reflex==/d' requirements.txt working-directory: ./rx-shout-from-template - name: Install additional dependencies run: poetry run uv pip install -r requirements.txt working-directory: ./rx-shout-from-template - name: Run Website and Check for errors run: | # Check that npm is home npm -v poetry run bash scripts/integration.sh ./rx-shout-from-template prod reflex-web-macos: if: github.event_name == 'push' && github.ref == 'refs/heads/main' strategy: fail-fast: false matrix: # Note: py311 version chosen due to available arm64 darwin builds. python-version: ["3.11.9", "3.12.8"] runs-on: macos-latest 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: Clone Reflex Website Repo uses: actions/checkout@v4 with: repository: reflex-dev/reflex-web ref: main path: reflex-web - name: Install Requirements for reflex-web working-directory: ./reflex-web run: poetry run uv pip install -r requirements.txt - name: Install additional dependencies for DB access run: poetry run uv pip install psycopg - name: Init Website for reflex-web working-directory: ./reflex-web run: poetry run reflex init - name: Run Website and Check for errors run: | # Check that npm is home npm -v poetry run bash scripts/integration.sh ./reflex-web prod - name: Measure and upload .web size run: poetry run python benchmarks/benchmark_web_size.py --os "${{ matrix.os }}" --python-version "${{ matrix.python-version }}" --commit-sha "${{ github.sha }}" --pr-id "${{ github.event.pull_request.id }}" --branch-name "${{ github.head_ref || github.ref_name }}" --app-name "reflex-web" --path ./reflex-web/.web