ci: lock the reflex 0.8.23 playground job and run examples only when they can change

Merged
FA
1d ago
+611-18

Follow-up to #7560 (merged), addressing the review there:

we should have a uv.lock file for the legacy tests so we don't hit these issues going forward. Also, do we need to be running these benchmarks on every PR? Nothing other than reflex-bench or playground changes should affect the legacy results.

Type of change

  • Bug fix (non-breaking change which fixes an issue)

Changes

All changes are in examples.yml, plus the new lock folder:

  • Lockfile. .github/legacy/reflex-0.8.23/ is a non-package uv project (reflex==0.8.23, plotly>=6.0,<7.0, greenlet) with its own uv.lock. playground-0.8.23 now runs uv sync --locked --project .github/legacy/reflex-0.8.23 and puts that venv first on PATH, instead of uv pip install with unpinned transitive dependencies. The greenlet that #7560 added is part of the locked environment.
  • Triggers. The workflow's pull_request/push path filters drop reflex/**, packages/**, pyproject.toml, uv.lock and .github/actions/setup_build_env/**. Both example jobs (playground-head and playground-0.8.23) now run only when one of these changes: examples/**, packages/reflex-bench/**, scripts/hash_examples.py, .github/legacy/reflex-0.8.23/** or the workflow file itself. The workflow is already in ADVISORY and not in the ruleset, so the filter can't block a merge.

Testing

  • Ran uv sync --locked --project .github/legacy/reflex-0.8.23 locally (it resolved SQLAlchemy 2.1.4, sqlmodel 0.0.48 and greenlet 3.5.6). From that venv, reflex --version in examples/playground prints 0.8.23 and reflex compile succeeds (97/97 pages).
  • uv run pytest tests/units/test_workflow_gates.py: 70 passed.
  • Pre-commit is clean on the changed files.

https://claude.ai/code/session_01UvPWTzLh6vkVatxxRMej6E