Repository navigation
chore(deps): clear Dependabot alerts in uv.lock and move dev tooling to pytest 9 - #799
Merged
Merged
Conversation
--- updated-dependencies: - dependency-name: fastmcp dependency-version: 3.4.10 dependency-type: direct:production dependency-group: uv - dependency-name: black dependency-version: 26.10.1 dependency-type: direct:development dependency-group: uv - dependency-name: pylint dependency-version: 4.0.9 dependency-type: direct:development dependency-group: uv - dependency-name: filelock dependency-version: 4.1.0 dependency-type: direct:development dependency-group: uv - dependency-name: aiohttp dependency-version: 3.14.4 dependency-type: indirect dependency-group: uv - dependency-name: authlib dependency-version: 1.9.1 dependency-type: indirect dependency-group: uv - dependency-name: mcp dependency-version: 1.30.0 dependency-type: indirect dependency-group: uv - dependency-name: nbconvert dependency-version: 7.17.2 dependency-type: indirect dependency-group: uv - dependency-name: opentelemetry-api dependency-version: 1.45.1 dependency-type: indirect dependency-group: uv - dependency-name: setuptools dependency-version: 84.1.0 dependency-type: indirect dependency-group: uv - dependency-name: virtualenv dependency-version: 21.14.5 dependency-type: indirect dependency-group: uv ... Signed-off-by: dependabot[bot] <[email protected]>
vishal-bala
added a commit
that referenced
this pull request
Oct 30, 2026
…ce tests (#802) ## Motivation Every Dependabot PR fails CI on two jobs, Service Tests and Notebook Validation, regardless of what it bumps. Dependabot pushes its branches to this repository, so its PRs pass the same-repository guard that keeps fork PRs away from secret-dependent jobs. GitHub, however, gives runs that Dependabot triggers no Actions secrets, so those jobs start with every API key empty. On #751, Service Tests stops at the Google Cloud authentication step for want of `GOOGLE_CREDENTIALS`, and the notebooks fall through to `getpass` prompts that cannot run in CI. The same two jobs failed on #744, #749, #751 and #799. ## Changes This PR treats Dependabot PRs the way fork PRs are already treated: the secret-dependent jobs skip, and a maintainer runs them with secrets after reading the change. - `.github/workflows/test.yml`: Service Tests and Notebook Validation also skip when `github.actor` is `dependabot[bot]`. The guard keys on the actor because that is what GitHub withholds secrets on, so a maintainer's push to a Dependabot branch still runs both jobs with secrets. - `.github/workflows/test-fork-pr.yml`: the dispatch-only workflow now accepts PRs opened by `dependabot[bot]` as well as fork PRs, and still rejects other same-repository PRs. - `CONTRIBUTING.md`: a short section telling maintainers to run `gh workflow run test-fork-pr.yml -f pr_number=<n>` before merging a fork or Dependabot PR. ## Notes - A skipped job shows as passing, so the manual dispatch is a convention, not an enforced gate. Copying the API keys into the Dependabot secrets store would make the jobs run automatically, but it would also hand those keys to newly bumped dependency code before anyone has reviewed it, which defeats the purpose of waiting for a maintainer. - The check run keeps the name "Fork PR - Service Tests" so that any branch-protection rule or tooling referring to it keeps matching. - Notebook Validation has no manual equivalent, as is already the case for fork PRs. It still runs on `main` after merge and nightly. ## Reviewer Brief **Start here:** `.github/workflows/test.yml:25`, the Service Tests `if:` guard. It decides which PR runs get secret-dependent jobs, and the Notebook Validation guard at `:152` repeats it. **Where it could fail** - `.github/workflows/test-fork-pr.yml:46-51`: the new acceptance checks who opened the PR (`pr.data.user.login`), not who wrote its commits, so a write-access user's commit on a Dependabot branch would also be tested with secrets; that user can already run code with secrets from any same-repository branch. **Not verified:** neither workflow has run with this change. The `github.actor` guard and the Dependabot acceptance in `test-fork-pr.yml` can only be confirmed on a real Dependabot PR plus a manual dispatch. actionlint was not available; both files parse as YAML, and the `setup` script passes `node --check`. **Beyond CI:** the logs of run 37937957172 (#751) show every secret empty on a Dependabot-triggered run, Service Tests failing at Google Cloud authentication, and Notebook Validation failing on `getpass` API-key prompts, which confirms that both jobs need secrets and lose no working coverage by skipping. **Since the last brief:** `a59789b7` passes `GEMINI_API_KEY` to the dispatched service tests, matching `test.yml`, so the Google GenAI fixture exercises the Gemini backend there too. <sub>Reviewed `d8a7d3a7` · Claude Code (claude-opus-5-5) · lenses: correctness, security, design, tests, docs, Redis behaviour</sub> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Workflow and contributor-doc changes only; no application or secret-handling logic changes, though skipped jobs still report as passing until a maintainer runs the dispatch workflow. > > **Overview** > Dependabot PRs were hitting **Service Tests** and **Notebook Validation** with no Actions secrets (same-repo branches, but GitHub withholds secrets on Dependabot-triggered runs), so CI failed on empty API keys. This PR aligns Dependabot with the existing fork PR pattern. > > **`test.yml`** skips those secret-dependent jobs when `github.actor` is `dependabot[bot]` (while still running them for maintainer pushes on the same branch). **`test-fork-pr.yml`** now allows manual dispatch for Dependabot PRs as well as forks, with updated validation and comments. **`CONTRIBUTING.md`** documents running `gh workflow run test-fork-pr.yml -f pr_number=<n>` before merge. > > The fork-pr workflow also wires **`GEMINI_API_KEY`** into the service-tests env alongside the other provider secrets. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit a59789b. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
Collaborator
|
Rebase |
Move the dev group to pytest 9 (GHSA-6w46-j5rx-g56g), which needs pytest-asyncio 1.x, and re-lock the rest of the flagged packages: pillow, certifi, tornado, dnspython, virtualenv, filelock, aiohttp, fastmcp, opentelemetry-api and setuptools. packaging, distlib and typing-extensions are upgraded too so Python 3.10 no longer keeps an old virtualenv. pillow 13, tornado 6.6, dnspython 2.9 and filelock 4.2 need Python 3.11+, so their alerts stay open for the 3.10 resolution.
pytest-asyncio 1.x warns when asyncio_default_fixture_loop_scope is unset. Set it to function, the value it already defaults to.
pylint 4 rejects suggestion-mode, and no-space-check has been gone since pylint 2.6. Both raise E0015 unrecognized-option and neither has any effect.
vishal-bala
approved these changes
Nov 2, 2026
vishal-bala
added a commit
that referenced
this pull request
Nov 3, 2026
## Motivation RedisVL declares `Requires-Python >=3.10,<3.15`, so `pip install redisvl` fails on Python 3.15.0, which is now final (#757). RedisVL's own code runs unchanged on 3.15: a full-suite trial found nothing in `redisvl/` that 3.15 removed or broke. The blockers were the version cap itself and a handful of locked dependencies that either publish no 3.15 wheel or fail to import on it. This PR lifts the cap, brings those dependencies forward, and adds 3.15 to CI with every extra installed. ## Changes ### Dependencies that block 3.15 Three locked packages had no usable 3.15 build. torch gained 3.15 wheels in 2.15.0, and the locked scipy 1.17.1 had none either, so scipy moves to 1.18.1 and scikit-learn to 1.9.1 alongside it. Together they let the `sentence-transformers` extra install. rpds-py 0.30.0, pulled in through the docs group, has no 3.15 wheel and fails to build from source, so it moves to 2026.9.1. beartype is different, because it installs but breaks at import. fastmcp depends on it indirectly, and beartype releases before 0.23 import `typing.no_type_check_decorator`, which 3.15 removed. Under such a release fastmcp fails to import on 3.15, and the RedisVL MCP server silently falls back to a stand-in class that cannot serve tools. The `mcp` extra therefore now requires `beartype>=0.23.1`, which protects installs from PyPI as well as this lock. Re-resolving the lock also moves older Pythons. On 3.11–3.14, torch moves to 2.15.0. On 3.14, the Google packages move to google-cloud-aiplatform 1.154.0, grpcio 1.85.1 and protobuf 6.33.6, collapsing a 3.14-only fork that had held them back. Python 3.10 keeps its current versions throughout. ### CI and packaging 3.15 joins the test and style-check matrices as a blocking leg, installing every extra like the other legs. uv moves from 0.12.3 to 0.13.1 in all four workflows, since 0.13.0 is the first release that ships CPython 3.15.0 final. The lock moves to uv's revision 5 format, which uv 0.12.3 and later still read. ### Minor changes - `requires-python` is now `<3.16`, with a 3.15 classifier and a `py315` black target. The black dev floor rises to 26.5.0, the first release that accepts `py315`. - One test asserted on the wording of CPython's `TypeError` for `**` applied to a non-mapping, which 3.15 rewords from "argument after **" to "Value after **". It now matches both. - The SemanticRouter repr unit tests pass a stub vectorizer instead of building `HFTextVectorizer`, so they no longer load a model. - HF-dependent integration tests that lacked the `requires_hf` marker now carry it. The marker stays informational, as on `main`. - CONTRIBUTING gives the supported range as Python 3.10 through 3.15, replacing a stale "3.9 and above". - The installation guide notes that `pip` refuses the `voyageai` and `sql-redis` extras on newer Pythons, because those packages declare `<3.15` and `<3.14` respectively. ## Notes The beartype floor applies on every Python version, although only 3.15 needs it. beartype 0.23.1 supports Python 3.10 and later, and one unconditional floor is simpler to reason about than a `python_version` marker that someone has to remember to remove once fastmcp or its dependencies set their own floor. ## Release Notes Python 3.15 is supported, with every extra installable. The `mcp` extra now requires `beartype>=0.23.1`, and on Python 3.15 `pip` still refuses the `voyageai` extra (and on 3.14 and later the `sql-redis` extra) because of those packages' own Python bounds. ## Reviewer Brief **Start here:** `uv.lock`, the `torch`, `scipy` and `scikit-learn` entries. They are what let the 3.15 leg install every extra, and they move 3.11–3.14 to torch 2.15.0 as well. **Where it could fail** - `uv.lock`: on 3.15, about 15 locked packages have no 3.15 wheel and are compiled from source during install. Four of them (pydantic-core, jiter, orjson, uuid-utils) need a Rust toolchain. They built on macOS arm64; check that the first 3.15 CI legs build them on Linux. - `uv.lock`, the 3.14 Google packages: the move to google-cloud-aiplatform 1.154.0 and protobuf 6.33.6 is covered only by unit tests, because the Vertex AI tests that exercise it need API keys. **Not verified:** Linux and Windows installs on 3.15; live provider APIs; cluster tests; the Sphinx build of the installation-guide note. **Beyond CI:** the full suite on CPython 3.15.0 (macOS arm64, Redis 8.4) gave 2,705 passed and 144 skipped, the same counts as 3.13. A plain `pip install` of the built wheel with `[mcp,sentence-transformers]` on 3.15 loads the real fastmcp and embeds text with torch 2.15.0. redis-py 6.4.0 and 7.4.1 import cleanly on 3.15. **Since the last brief:** rebased onto `main` at `6a81e13b` with no changes to the PR's commits; the reviewed `ff863e25` is now `9ebe43ad` and the fix commit `28b0e5c8` is now `159a5d26`. The full suite on 3.15.0, including the MCP code tools that `main` added, gave 2,835 passed and 144 skipped, the same as 3.13. **Since the last brief:** merged `main` at `ee4c1834` (#799), which moves the dev group to pytest 9 and pytest-asyncio 1.x. pytest-asyncio 1.4.1 emits none of the asyncio deprecation warnings on 3.15, so the PR's `filterwarnings` entry for them is gone. `uv.lock` was regenerated from `main`'s lock with this PR's 3.15 upgrades re-applied; on 3.14 and later grpcio now resolves to 1.85.1. The full suite on 3.15.0 and 3.13 gave 2,838 passed and 144 skipped on each. <sub>Reviewed `ff863e25`, fixes in `28b0e5c8` · Claude Code (claude-opus-5-5) · lenses: correctness, security, design, tests, docs, Redis behaviour</sub> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Broad CI and lockfile dependency moves (torch/scipy/MCP stack) affect all supported Python versions; 3.15 legs may hit source builds for packages without Linux wheels. > > **Overview** > **RedisVL can be installed and tested on Python 3.15.** Packaging now allows `>=3.10,<3.16` with a 3.15 Trove classifier, Black `py315` target, and a higher Black dev floor (`>=26.5.0`). > > **CI and tooling:** All four GitHub workflows bump **uv** to **0.13.1** (needed for CPython 3.15). Lint and the main test matrix add a blocking **3.15** leg alongside 3.10–3.14. > > **Dependencies:** The **`mcp`** extra explicitly requires **`beartype>=0.23.1`** so fastmcp imports on 3.15 (older beartype used APIs removed in 3.15). > > **Docs:** CONTRIBUTING lists supported Python as **3.10–3.15** (replacing stale 3.9 wording). The installation guide notes that **`pip`** may refuse **`voyageai`** / **`sql-redis`** (and **`all`**) on newer Pythons while **`uv`** still resolves them. > > **Tests:** Connection-kwargs **`TypeError`** assertion matches CPython 3.15’s reworded message; **`SemanticRouter`** repr unit tests inject a **`CustomVectorizer`** stub instead of default HF setup; HuggingFace-dependent integration cases gain **`@pytest.mark.requires_hf`** where they were missing. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 11e9341. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
This PR clears the open Dependabot alerts on
uv.lockfor every supported Python version except 3.10. All of them sit in the lockfile rather than in RedisVL's published dependency ranges, so they affect development and CI environments, not whatpip install redisvlresolves. Three dev-group caps inpyproject.toml(pytest<9,pylint<4andfilelock<4) were holding the lock below the patched releases, so the lock alone could not be moved.Changes
Dev tooling moves to pytest 9 and pytest-asyncio 1.x
The pytest advisory (GHSA-6w46-j5rx-g56g) is fixed only in pytest 9.0.3, and pytest-asyncio 0.23 requires pytest below 9, so the two move together:
pytest>=9.0.3,<10andpytest-asyncio>=1,<2. The pytest configuration now setsasyncio_default_fixture_loop_scope = "function", which is the value pytest-asyncio 1.x already uses, so behaviour does not change and the warning it emits when the option is unset goes away. The suite's async fixtures are all function-scoped and none of the tests use theevent_loopfixture that 1.x removed. Thepylintcap moves to<5(resolving to 4.1.3) andfilelockto<5..pylintrcdropssuggestion-modeandno-space-check, which pylint 4 rejects as unrecognised options and which no longer do anything.Re-locked packages
The branch also merges
main, which brings in the CI routing that runs service tests for Dependabot PRs on maintainer dispatch; the earlierService TestsandNotebook Validationfailures here came from missing secrets, not from the upgrades.Notes
pillow 13, tornado 6.6, dnspython 2.9 and filelock 4.2 require Python 3.11 or later, so the lock keeps pillow 12.3.0, tornado 6.5.10, dnspython 2.8.0 and filelock 4.1.0 for Python 3.10, and 53 alerts stay open for that resolution only. Python 3.10 has reached end of life and support for it will be dropped, so those alerts will be dismissed as tolerable risk once this PR merges and Dependabot has re-scanned
main. Thepillow>=11.3.0floor in thepillowandallextras is deliberately left alone, because raising it would exclude Python 3.10 users.Reviewer Brief
Start here:
pyproject.toml, the dev group and[tool.pytest.ini_options]. The move to pytest 9 and pytest-asyncio 1.x is the only change that alters how the suite runs; everything else is a re-resolveduv.lock.Where it could fail
redisvl/mcp/auth.py:103: the MCP server's token check subclasses fastmcp'sJWTVerifier, which moves from 3.3.1 to 3.4.11 with security backports to JWT and JWKS handling; the signatures RedisVL relies on are unchanged, but verification against a real identity provider is not exercised.uv.lock, thepython_full_version < '3.11'entries for pillow, tornado, dnspython and filelock: these are the deliberate Python 3.10 holdbacks described in Notes, so check no other package forks there.Not verified: tests that need API keys and cluster tests, which CI does not run on this PR until the service tests are dispatched; the
docs/user_guidenotebooks were collected but not executed; the full suite was run locally on Python 3.10 and 3.13 only.Beyond CI:
make check-lint, which CI does not run, now loads.pylintrcwithout config errors on pylint 4.1.3 and rates the code 9.18/10, against 8.71/10 for the same code on pylint 3.3.9; nbval 0.11.0 collects all 344 notebook cells under pytest 9.2.0.Reviewed
c610a01, fixes in1481a43· Claude Code (claude-opus-5-5) · lenses: correctness, security, design, tests, docs, Redis behaviourNote
Medium Risk
pytest 9 / pytest-asyncio 1 can change async test isolation, and pylint 4 may surface new lint failures; impact is limited to dev/CI tooling, not production code.
Overview
This PR updates dev dependency version ranges in
pyproject.tomlso the uv lock can pull newer tooling: pylint (<4→<5), pytest (8.x → 9.0.3+), pytest-asyncio (0.23.x → 1.x), and filelock (<4→<5).It also sets
asyncio_default_fixture_loop_scope = "function"under[tool.pytest.ini_options], which aligns async fixture/event-loop behavior with pytest-asyncio 1.x (where the default scope changed and can otherwise surprise the suite).These changes affect CI and local dev only; runtime
[project]dependencies are unchanged in this diff.Reviewed by Cursor Bugbot for commit c610a01. Bugbot is set up for automated code reviews on this repo. Configure here.