Skip to content

chore(deps): clear Dependabot alerts in uv.lock and move dev tooling to pytest 9 - #799

Merged
vishal-bala merged 5 commits into
mainfrom
dependabot/uv/uv-bee1461e5a
Nov 2, 2026
Merged

vishal-bala merged 5 commits into
mainfrom
dependabot/uv/uv-bee1461e5a

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Motivation

This PR clears the open Dependabot alerts on uv.lock for 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 what pip install redisvl resolves. Three dev-group caps in pyproject.toml (pytest<9, pylint<4 and filelock<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,<10 and pytest-asyncio>=1,<2. The pytest configuration now sets asyncio_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 the event_loop fixture that 1.x removed. The pylint cap moves to <5 (resolving to 4.1.3) and filelock to <5. .pylintrc drops suggestion-mode and no-space-check, which pylint 4 rejects as unrecognised options and which no longer do anything.

Re-locked packages

  • pillow 12.3.0 → 13.0.0, authlib 1.7.2 → 1.9.1, certifi 2026.5.20 → 2026.10.23
  • aiohttp 3.14.3 → 3.14.5, mcp 1.28.1 → 1.30.0, fastmcp and fastmcp-slim 3.3.1 → 3.4.11
  • tornado 6.5.9 → 6.6, dnspython 2.8.0 → 2.9.1, virtualenv 21.7.13 → 21.15.1, nbconvert 7.17.1 → 7.17.2
  • opentelemetry-api and its companions 1.42.1 → 1.45.2, setuptools 83.0.0 → 84.2.1, black 26.5.1 → 26.10.1
  • packaging, distlib and typing-extensions, so that the Python 3.10 resolution also reaches the patched virtualenv

The branch also merges main, which brings in the CI routing that runs service tests for Dependabot PRs on maintainer dispatch; the earlier Service Tests and Notebook Validation failures 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. The pillow>=11.3.0 floor in the pillow and all extras 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-resolved uv.lock.

Where it could fail

  • redisvl/mcp/auth.py:103: the MCP server's token check subclasses fastmcp's JWTVerifier, 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, the python_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_guide notebooks 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 .pylintrc without 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 in 1481a43 · Claude Code (claude-opus-5-5) · lenses: correctness, security, design, tests, docs, Redis behaviour


Note

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.toml so 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.

---
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]>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code labels Oct 30, 2026
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 -->
@vishal-bala

Copy link
Copy Markdown
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 vishal-bala changed the title chore(deps): bump the uv group across 1 directory with 11 updates chore(deps): clear Dependabot alerts in uv.lock and move dev tooling to pytest 9 Oct 30, 2026
@vishal-bala vishal-bala added auto:dependencies Update one or more dependencies version and removed dependencies Pull requests that update a dependency file labels Oct 30, 2026
@vishal-bala
vishal-bala merged commit ee4c183 into main Nov 2, 2026
58 checks passed
@vishal-bala
vishal-bala deleted the dependabot/uv/uv-bee1461e5a branch November 2, 2026 09:41
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 -->
@vishal-bala vishal-bala added the released This issue/pull request has been released. label Nov 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

auto:dependencies Update one or more dependencies version python:uv Pull requests that update python:uv code released This issue/pull request has been released.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant