From 26ee9a359c8bdc1ee0cd4a5d75189ab5a1f14850 Mon Sep 17 00:00:00 2001 From: Tim Child Date: Thu, 30 Apr 2026 19:12:23 -0500 Subject: [PATCH 1/2] ci: add reflex 0.8.x compat dimension to CI matrix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The package still declares `reflex>=0.8.0` in pyproject.toml, but the locked CI environment is now reflex 0.9.x. That meant nothing was actually verifying the lower-bound claim — a future bump could silently break 0.8.x users. Adds a single matrix include (Python 3.13 + reflex 0.8) that bypasses `uv.lock` and resolves fresh against `reflex>=0.8,<0.9`, then runs lint, typecheck, and the unit suite. Demo playwright tests stay on the locked 0.9.x version only — the unit tests are sufficient to catch import-level or API-level regressions against 0.8. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/_reusable-ci.yml | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/.github/workflows/_reusable-ci.yml b/.github/workflows/_reusable-ci.yml index cbb3aba..9c1cfbd 100644 --- a/.github/workflows/_reusable-ci.yml +++ b/.github/workflows/_reusable-ci.yml @@ -29,8 +29,17 @@ jobs: permissions: contents: read strategy: + fail-fast: false matrix: python-versions: ["3.11", "3.12", "3.13"] + reflex-version: ["locked"] + # Compat dimension: verify the package still works on the lower bound + # declared in pyproject.toml (`reflex>=0.8.0`). Bypasses uv.lock so a + # future bump that breaks 0.8.x will fail CI here instead of silently + # making the published package incompatible. + include: + - python-versions: "3.13" + reflex-version: "0.8" environment: ${{ inputs.environment || null }} steps: @@ -45,13 +54,29 @@ jobs: python-version: ${{ matrix.python-versions }} github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Install with reflex 0.8.x (no lockfile) + if: matrix.reflex-version == '0.8' + shell: bash + run: | + uv venv --python ${{ matrix.python-versions }} --clear + uv pip install -e . "reflex>=0.8,<0.9" pytest pytest-pretty ruff pyright + - name: Run Basic Checks - if: inputs.check_type == 'basic' + if: inputs.check_type == 'basic' && matrix.reflex-version == 'locked' uses: ./.github/actions/basic-checks - name: Run Full Checks - if: inputs.check_type == 'full' + if: inputs.check_type == 'full' && matrix.reflex-version == 'locked' uses: ./.github/actions/full-checks with: clerk-publishable-key: ${{ vars.CLERK_PUBLISHABLE_KEY }} clerk-secret-key: ${{ secrets.CLERK_SECRET_KEY }} + + - name: Run Reflex 0.8.x Compat Checks + if: matrix.reflex-version == '0.8' + shell: bash + run: | + source .venv/bin/activate + ruff check . + pyright + pytest tests/test_clerk_provider_unit.py From 17b75374f41df24ac453df828620f9a8982039f6 Mon Sep 17 00:00:00 2001 From: Tim Child Date: Thu, 30 Apr 2026 22:26:05 -0500 Subject: [PATCH 2/2] ci: install pytest-playwright + dotenv in reflex 0.8 compat env pyright walks the whole project (including tests/test_demo.py and the demo app) and was failing on unresolved `dotenv` / `playwright.sync_api` imports. Those are dev deps the locked job picks up via `uv sync --dev` but the compat env was building from scratch without them. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/_reusable-ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/_reusable-ci.yml b/.github/workflows/_reusable-ci.yml index 9c1cfbd..435ca94 100644 --- a/.github/workflows/_reusable-ci.yml +++ b/.github/workflows/_reusable-ci.yml @@ -59,7 +59,10 @@ jobs: shell: bash run: | uv venv --python ${{ matrix.python-versions }} --clear - uv pip install -e . "reflex>=0.8,<0.9" pytest pytest-pretty ruff pyright + # pytest-playwright + dotenv are needed for pyright to resolve imports + # in tests/test_demo.py and the demo app, even though we don't run them. + uv pip install -e . "reflex>=0.8,<0.9" \ + pytest pytest-pretty pytest-playwright dotenv ruff pyright - name: Run Basic Checks if: inputs.check_type == 'basic' && matrix.reflex-version == 'locked'