Skip to content

ci: Pin transitive dependencies for tests on Python>=3.8#6437

Open
alexander-alderman-webb wants to merge 27 commits into
masterfrom
webb/populate-tox/transitive-dependencies
Open

ci: Pin transitive dependencies for tests on Python>=3.8#6437
alexander-alderman-webb wants to merge 27 commits into
masterfrom
webb/populate-tox/transitive-dependencies

Conversation

@alexander-alderman-webb
Copy link
Copy Markdown
Contributor

@alexander-alderman-webb alexander-alderman-webb commented May 28, 2026

Description

Add transitive dependencies to all test groups that are generated by populate_tox.py.
Dependency versions are resolved via a dry run of pip through uv on the relevant Python version.
Pins one set of dependencies per Python version and per library version.

Update DEPENDENCIES_CACHE to also be keyed on the Python version, since dependency versions of a package depend on the Python version. The cache is now indexed on the package name, package version, and Python version.

Issues

Reminders

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

Codecov Results 📊

88016 passed | ❌ 1 failed | ⏭️ 6007 skipped | Total: 94024 | Pass Rate: 93.61% | Execution Time: 294m 57s

📊 Comparison with Base Branch

Metric Change
Total Tests 📉 -23
Passed Tests 📉 -22
Failed Tests 📈 +1
Skipped Tests 📉 -2

➕ New Tests (1)

View new tests
  • test_agent_data_from_scope[True-False]
    • File: tests.integrations.pydantic_ai.test_pydantic_ai
    • Status: ❌ Failing

❌ Failed Tests

test_agent_data_from_scope[True-False]

File: tests.integrations.pydantic_ai.test_pydantic_ai
Suite: py3.14t-pydantic_ai-v2.0.0b4
Error: pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function BaseEventLoop.del at 0x475c5afd740>: None

Stack Trace
../../_temp/uv-python-dir/cpython-3.14.5+freethreaded-linux-x86_64-gnu/lib/python3.14t/asyncio/base_events.py:760: in __del__
    self.close()
../../_temp/uv-python-dir/cpython-3.14.5+freethreaded-linux-x86_64-gnu/lib/python3.14t/asyncio/unix_events.py:70: in close
    super().close()
../../_temp/uv-python-dir/cpython-3.14.5+freethreaded-linux-x86_64-gnu/lib/python3.14t/asyncio/selector_events.py:104: in close
    self._close_self_pipe()
../../_temp/uv-python-dir/cpython-3.14.5+freethreaded-linux-x86_64-gnu/lib/python3.14t/asyncio/selector_events.py:111: in _close_self_pipe
    self._remove_reader(self._ssock.fileno())
../../_temp/uv-python-dir/cpython-3.14.5+freethreaded-linux-x86_64-gnu/lib/python3.14t/asyncio/selector_events.py:296: in _remove_reader
    key = self._selector.get_map().get(fd)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../_temp/uv-python-dir/cpython-3.14.5+freethreaded-linux-x86_64-gnu/lib/python3.14t/selectors.py:70: in get
    fd = self._selector._fileobj_lookup(fileobj)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../_temp/uv-python-dir/cpython-3.14.5+freethreaded-linux-x86_64-gnu/lib/python3.14t/selectors.py:229: in _fileobj_lookup
    return _fileobj_to_fd(fileobj)
           ^^^^^^^^^^^^^^^^^^^^^^^
../../_temp/uv-python-dir/cpython-3.14.5+freethreaded-linux-x86_64-gnu/lib/python3.14t/selectors.py:42: in _fileobj_to_fd
    raise ValueError("Invalid file descriptor: {}".format(fd))
E   ValueError: Invalid file descriptor: -1

The above exception was the direct cause of the following exception:
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/_pytest/runner.py:353: in from_call
    result: TResult | None = func()
                             ^^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/_pytest/runner.py:245: in <lambda>
    lambda: runtest_hook(item=item, **kwds),
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/pluggy/_hooks.py:512: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/pluggy/_manager.py:120: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/_pytest/logging.py:850: in pytest_runtest_call
    yield
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/pluggy/_callers.py:53: in run_old_style_hookwrapper
    return result.get_result()
           ^^^^^^^^^^^^^^^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/pluggy/_callers.py:38: in run_old_style_hookwrapper
    res = yield
          ^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/_pytest/capture.py:900: in pytest_runtest_call
    return (yield)
            ^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/pluggy/_callers.py:53: in run_old_style_hookwrapper
    return result.get_result()
           ^^^^^^^^^^^^^^^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/pluggy/_callers.py:38: in run_old_style_hookwrapper
    res = yield
          ^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/pluggy/_callers.py:53: in run_old_style_hookwrapper
    return result.get_result()
           ^^^^^^^^^^^^^^^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/pluggy/_callers.py:38: in run_old_style_hookwrapper
    res = yield
          ^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/_pytest/skipping.py:268: in pytest_runtest_call
    return (yield)
            ^^^^^
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/_pytest/unraisableexception.py:158: in pytest_runtest_call
    collect_unraisable(item.config)
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/_pytest/unraisableexception.py:79: in collect_unraisable
    raise errors[0]
.tox/py3.14t-pydantic_ai-v2.0.0b4/lib/python3.14t/site-packages/_pytest/unraisableexception.py:67: in collect_unraisable
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
E   pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function BaseEventLoop.__del__ at 0x475c5afd740>: None

✅ Patch coverage is 100.00%. Project has 2313 uncovered lines.
❌ Project coverage is 89.96%. Comparing base (base) to head (head).

Coverage diff
@@            Coverage Diff             @@
##          main       #PR       +/-##
==========================================
- Coverage    89.99%    89.96%    -0.03%
==========================================
  Files          191       191         —
  Lines        23028     23028         —
  Branches      7904      7904         —
==========================================
+ Hits         20722     20715        -7
- Misses        2306      2313        +7
- Partials      1307      1307         —

Generated by Codecov Action

@alexander-alderman-webb alexander-alderman-webb marked this pull request as ready for review May 28, 2026 13:30
@alexander-alderman-webb alexander-alderman-webb requested a review from a team as a code owner May 28, 2026 13:30
@alexander-alderman-webb alexander-alderman-webb changed the title ci: Pin transitive dependencies for tests suites ci: Pin transitive dependencies for tests suites ran on Python>=3.8 May 28, 2026
@alexander-alderman-webb alexander-alderman-webb changed the title ci: Pin transitive dependencies for tests suites ran on Python>=3.8 ci: Pin transitive dependencies for tests suites on Python>=3.8 May 28, 2026
@alexander-alderman-webb alexander-alderman-webb marked this pull request as draft May 28, 2026 13:37
Comment thread scripts/populate_tox/populate_tox.py
Comment thread scripts/populate_tox/populate_tox.py Outdated
Comment thread scripts/populate_tox/populate_tox.py Outdated
Comment thread scripts/populate_tox/populate_tox.py Outdated
Comment thread scripts/populate_tox/populate_tox.py
Comment thread scripts/populate_tox/populate_tox.py
Comment thread scripts/populate_tox/populate_tox.py
Comment thread scripts/populate_tox/populate_tox.py
Comment thread scripts/populate_tox/populate_tox.py
@alexander-alderman-webb alexander-alderman-webb changed the base branch from master to webb/setuptools June 1, 2026 11:23
@alexander-alderman-webb alexander-alderman-webb changed the title ci: Pin transitive dependencies for tests suites on Python>=3.8 ci: Pin transitive dependencies for tests on Python>=3.8 Jun 1, 2026
@alexander-alderman-webb alexander-alderman-webb marked this pull request as ready for review June 1, 2026 11:30
Comment thread scripts/populate_tox/populate_tox.py
Base automatically changed from webb/setuptools to master June 1, 2026 11:37
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d26dd8a. Configure here.

Comment thread scripts/populate_tox/tox.jinja
Copy link
Copy Markdown
Member

@sl0thentr0py sl0thentr0py left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe time to add tox.ini to .gitattributes as well

Comment thread scripts/populate_tox/populate_tox.py
Comment thread scripts/populate_tox/populate_tox.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants