chore(deps): update minor and patch updates#591
Conversation
|
Greptile SummaryAutomated Renovate bot PR bumping minor/patch versions of CI actions (
Confidence Score: 1/5
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[pyproject.toml] -->|defines deps| B[uv.lock]
A -->|requires-python >=3.8| C[CI Matrix]
C -->|includes Python 3.8| D{pytest 8.4}
D -->|dropped 3.8 support| E[CI Failure on Python 3.8]
B -->|not updated| F[uv sync --locked fails]
A -->|new versions| G[pytest 8.4.2\npytest-asyncio 0.26.0\nmypy 1.19.1\nruff 0.15.6]
G -->|mismatch| F
Last reviewed commit: b58934a |
| "pytest==8.4.2", | ||
| "pytest-asyncio==0.26.0", |
There was a problem hiding this comment.
pytest 8.4 dropped Python 3.8 support
pytest 8.4.0 removed support for Python 3.8. This project still declares requires-python = ">=3.8" and the CI matrix in ci.yml includes Python 3.8. This upgrade will break the Python 3.8 CI job.
Similarly, pytest-asyncio==0.26.0 has a minimum pytest version of 8.2.0, so this combination will also not work on Python 3.8 where pytest 8.4 cannot be installed.
Either pin these dev dependencies to versions that still support Python 3.8 (e.g., pytest<8.4), or drop Python 3.8 from the project's supported versions and CI matrix.
|
|
||
| [build-system] | ||
| requires = ["uv_build>=0.8.15,<0.9.0"] | ||
| requires = ["uv_build>=0.10.10,<0.11.0"] |
There was a problem hiding this comment.
uv.lock not updated alongside pyproject.toml
The lockfile still references the old dependency versions (pytest 8.3.4, pytest-asyncio 0.23.8, mypy 1.14.1, ruff 0.14.5). The CI workflow runs uv sync --locked --dev which will fail if the lockfile doesn't match pyproject.toml. The lockfile needs to be regenerated with uv lock to reflect these version changes.
This PR contains the following updates:
v2.2.1→v2.2.2v7.3.0→v7.5.0v4.2.0→v4.4.0==1.14.1→==1.19.1==8.3.4→==8.4.2==0.23.8→==0.26.0==0.14.5→==0.15.6>=0.8.15,<0.9.0→>=0.10.10,<0.11.0Release Notes
actions/create-github-app-token (actions/create-github-app-token)
v2.2.2Compare Source
astral-sh/setup-uv (astral-sh/setup-uv)
v7.5.0: 🌈 Use `astral-sh/versions` as version providerCompare Source
No more rate-limits
This release addresses a long-standing source of timeouts and rate-limit failures in setup-uv.
Previously, the action resolved version identifiers like 0.5.x by iterating over available uv releases via the GitHub API to find the best match. In contrast, latest and exact versions such as 0.5.0 skipped version resolution entirely and downloaded uv directly.
The
manifest-fileinput was an earlier attempt to improve this. It allows providing an url to a file that lists available versions, checksums, and even custom download URLs. The action also shipped with such a manifest.However, because that bundled file could become outdated whenever new uv releases were published, the action still had to fall back to the GitHub API in many cases.
This release solves the problem by sourcing version data from Astral’s versions repository via the raw content endpoint:
https://raw.githubusercontent.com/astral-sh/versions/refs/heads/main/v1/uv.ndjson
By using the raw endpoint instead of the GitHub API, version resolution no longer depends on API authentication and is much less likely to run into rate limits or timeouts.
The
manifest-fileinput lets you override that source with your own URL, for example to test custom uv builds or alternate download locations.The manifest file must be in NDJSON format, where each line is a JSON object representing a version and its artifacts. For example:
{"version":"0.10.7","artifacts":[{"platform":"x86_64-unknown-linux-gnu","variant":"default","url":"https://example.com/uv-x86_64-unknown-linux-gnu.tar.gz","archive_format":"tar.gz","sha256":"..."}]} {"version":"0.10.6","artifacts":[{"platform":"x86_64-unknown-linux-gnu","variant":"default","url":"https://example.com/uv-x86_64-unknown-linux-gnu.tar.gz","archive_format":"tar.gz","sha256":"..."}]}Changes
🚀 Enhancements
📚 Documentation
v7.4.0: 🌈 Add riscv64 architecture support to platform detectionCompare Source
Changes
Thank you @luhenry for adding support for riscv64 arch
🚀 Enhancements
🧰 Maintenance
⬆️ Dependency updates
v7.3.1: 🌈 fall back to VERSION_CODENAME when VERSION_ID is not availableCompare Source
Changes
This release adds support for running in containers like
debian:testingordebian:unstable🐛 Bug fixes
🧰 Maintenance
⬆️ Dependency updates
googleapis/release-please-action (googleapis/release-please-action)
v4.4.0Compare Source
Features
Bug Fixes
changelog-hostparameter ignored when using manifest configuration (#1151) (535c413)v4.3.0Compare Source
Features
python/mypy (mypy)
v1.19.1Compare Source
types.NoneTypein match cases (A5rocks, PR 20383)v1.19.0Compare Source
v1.18.2Compare Source
object.__init__(Stephen Morton, PR 19733)v1.18.1Compare Source
v1.17.1Compare Source
Noneas constraints bottom if no bottoms were provided (Stanislav Terliakov, PR 19485)hasattr" in dmypy (Stanislav Terliakov, PR 19428)v1.17.0Compare Source
v1.16.1Compare Source
v1.16.0Compare Source
v1.15.0Compare Source
pytest-dev/pytest (pytest)
v8.4.2Compare Source
pytest 8.4.2 (2025-09-03)
Bug fixes
#13478: Fixed a crash when using
console_output_style{.interpreted-text role="confval"} withtimesand a module is skipped.#13530: Fixed a crash when using
pytest.approx{.interpreted-text role="func"} anddecimal.Decimal{.interpreted-text role="class"} instances with thedecimal.FloatOperation{.interpreted-text role="class"} trap set.#13549: No longer evaluate type annotations in Python
3.14when inspecting function signatures.This prevents crashes during module collection when modules do not explicitly use
from __future__ import annotationsand import types for annotations within aif TYPE_CHECKING:block.#13559: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in
pytest.Parser.addini{.interpreted-text role="meth"}.#13563:
pytest.approx{.interpreted-text role="func"} now only importsnumpyif NumPy is already insys.modules. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.Improved documentation
pytest_generate_testsis discovered in test modules/classes; other hooks must be inconftest.pyor plugins.Contributor-facing changes
-Wdefaultor a similar override.test_doctest_unexpected_exceptionin Python3.14.CIenvironment variable -- byogrisel{.interpreted-text role="user"}.v8.4.1Compare Source
pytest 8.4.1 (2025-06-17)
Bug fixes
#13461: Corrected
_pytest.terminal.TerminalReporter.isattyto supportbeing called as a method. Before it was just a boolean which could
break correct code when using
-o log_cli=true).#13477: Reintroduced
pytest.PytestReturnNotNoneWarning{.interpreted-text role="class"} which was removed by accident in pytest [8.4]{.title-ref}.This warning is raised when a test functions returns a value other than
None, which is often a mistake made by beginners.See
return-not-none{.interpreted-text role="ref"} for more information.#13497: Fixed compatibility with
Twisted 25+.Improved documentation
faulthandlernot working on Windows.v8.4.0Compare Source
pytest 8.4.0 (2025-06-02)
Removals and backward incompatible breaking changes
#11372: Async tests will now fail, instead of warning+skipping, if you don't have any suitable plugin installed.
#12346: Tests will now fail, instead of raising a warning, if they return any value other than None.
#12874: We dropped support for Python 3.8 following its end of life (2024-10-07).
#12960: Test functions containing a yield now cause an explicit error. They have not been run since pytest 4.0, and were previously marked as an expected failure and deprecation warning.
See
the docs <yield tests deprecated>{.interpreted-text role="ref"} for more information.Deprecations (removal in next major release)
autouse=True. For guidance on how to work around this warning seesync-test-async-fixture{.interpreted-text role="ref"}.New features
#11538: Added
pytest.RaisesGroup{.interpreted-text role="class"} as an equivalent topytest.raises{.interpreted-text role="func"} for expectingExceptionGroup{.interpreted-text role="exc"}. Also addspytest.RaisesExc{.interpreted-text role="class"} which is now the logic behindpytest.raises{.interpreted-text role="func"} and used as parameter topytest.RaisesGroup{.interpreted-text role="class"}.RaisesGroupincludes the ability to specify multiple different expected exceptions, the structure of nested exception groups, and flags for emulatingexcept* <except_star>{.interpreted-text role="ref"}. Seeassert-matching-exception-groups{.interpreted-text role="ref"} and docstrings for more information.#12081: Added
capteesys{.interpreted-text role="fixture"} to capture AND pass output to next handler set by--capture=.#12504:
pytest.mark.xfail{.interpreted-text role="func"} now acceptspytest.RaisesGroup{.interpreted-text role="class"} for theraisesparameter when you expect an exception group. You can also pass apytest.RaisesExc{.interpreted-text role="class"} if you e.g. want to make use of thecheckparameter.#12713: New [--force-short-summary]{.title-ref} option to force condensed summary output regardless of verbosity level.
This lets users still see condensed summary output of failures for quick reference in log files from job outputs, being especially useful if non-condensed output is very verbose.
#12749: pytest traditionally collects classes/functions in the test module namespace even if they are imported from another file.
For example:
contents of src/domain.py
contents of tests/test_testament.py
#12765: Thresholds to trigger snippet truncation can now be set with
truncation_limit_lines{.interpreted-text role="confval"} andtruncation_limit_chars{.interpreted-text role="confval"}.See
truncation-params{.interpreted-text role="ref"} for more information.#13125:
console_output_style{.interpreted-text role="confval"} now supportstimesto show execution time of each test.#13192:
pytest.raises{.interpreted-text role="func"} will now raise a warning when passing an empty string tomatch, as this will match against any value. Usematch="^$"if you want to check that an exception has no message.#13192:
pytest.raises{.interpreted-text role="func"} will now print a helpful string diff if matching fails and the match parameter has^and$and is otherwise escaped.#13192: You can now pass
with pytest.raises(check=fn): <pytest.raises>{.interpreted-text role="func"}, wherefnis a function which takes a raised exception and returns a boolean. Theraisesfails if no exception was raised (as usual), passes if an exception is raised andfnreturnsTrue(as well asmatchand the type matching, if specified, which are checked before), and propagates the exception iffnreturnsFalse(which likely also fails the test).#13228:
hidden-param{.interpreted-text role="ref"} can now be used inidofpytest.param{.interpreted-text role="func"} or inidsofMetafunc.parametrize <pytest.Metafunc.parametrize>{.interpreted-text role="py:func"}.It hides the parameter set from the test name.
#13253: New flag:
--disable-plugin-autoload <disable_plugin_autoload>{.interpreted-text role="ref"} which works as an alternative toPYTEST_DISABLE_PLUGIN_AUTOLOAD{.interpreted-text role="envvar"} when setting environment variables is inconvenient; and allows setting it in config files withaddopts{.interpreted-text role="confval"}.Improvements in existing functionality
#10224: pytest's
shortandlongtraceback styles (how-to-modifying-python-tb-printing{.interpreted-text role="ref"})now have partial
657{.interpreted-text role="pep"} support and will show specific code segments in thetraceback.
-- by
ammaraskar{.interpreted-text role="user"}#11118: Now
pythonpath{.interpreted-text role="confval"} configures [$PYTHONPATH]{.title-ref} earlier than before during the initialization process, which now also affects plugins loaded via the [-p]{.title-ref} command-line option.-- by
millerdev{.interpreted-text role="user"}#11381: The
typeparameter of theparser.addinimethod now accepts ["int"]{.title-ref} and"float"parameters, facilitating the parsing of configuration values in the configuration file.Example:
The [pytest.ini]{.title-ref} file:
#11525: Fixtures are now clearly represented in the output as a "fixture object", not as a normal function as before, making it easy for beginners to catch mistakes such as referencing a fixture declared in the same module but not requested in the test function.
-- by
the-compiler{.interpreted-text role="user"} andglyphack{.interpreted-text role="user"}#12426: A warning is now issued when
pytest.mark.usefixtures ref{.interpreted-text role="ref"} is used without specifying any fixtures. Previously, empty usefixtures markers were silently ignored.#12707: Exception chains can be navigated when dropped into Pdb in Python 3.13+.
#12736: Added a new attribute [name]{.title-ref} with the fixed value ["pytest tests"]{.title-ref} to the root tag [testsuites]{.title-ref} of the junit-xml generated by pytest.
This attribute is part of many junit-xml specifications and is even part of the [junit-10.xsd]{.title-ref} specification that pytest's implementation is based on.
#12943: If a test fails with an exceptiongroup with a single exception, the contained exception will now be displayed in the short test summary info.
#12958: A number of
unraisable <unraisable>{.interpreted-text role="ref"} enhancements:tracemalloc{.interpreted-text role="mod"} allocation traceback (if available).StopIteration{.interpreted-text role="class"} in test failures.pytest.PytestUnraisableExceptionWarning{.interpreted-text role="class"} exception if raised.reprof the unraisable object in the unraisable hook so you get the latest information if available, and should help with resurrection of the object.#13010:
pytest.approx{.interpreted-text role="func"} now can compare collections that contain numbers and non-numbers mixed.#13016: A number of
threadexception <unraisable>{.interpreted-text role="ref"} enhancements:tracemalloc{.interpreted-text role="mod"} allocation traceback (if available).StopIteration{.interpreted-text role="class"} in test failures.pytest.PytestUnhandledThreadExceptionWarning{.interpreted-text role="class"} exception if raised.nameof the thread object in the excepthook which should help with resurrection of the thread.#13031: An empty parameter set as in
pytest.mark.parametrize([], ids=idfunc)will no longer trigger a call toidfuncwith internal objects.#13115: Allows supplying
ExceptionGroup[Exception]andBaseExceptionGroup[BaseException]topytest.raisesto keep full typing onExceptionInfo <pytest.ExceptionInfo>{.interpreted-text role="class"}:Parametrizing with other exception types remains an error - we do not check the types of child exceptions and thus do not permit code that might look like we do.
#13122: The
--stepwisemode received a number of improvements:It no longer forgets the last failed test in case pytest is executed later without the flag.
This enables the following workflow:
--stepwise, pytest then stops at the first failing test;--stepwiseflag (for example in an IDE), until it is fixed.--stepwiseagain and pytest will continue from the previously failed test, and if it passes, continue on to the next tests.Previously, at step 3, pytest would start from the beginning, forgetting the previously failed test.
This change however might cause issues if the
--stepwisemode is used far apart in time, as the state might get stale, so the internal state will be reset automatically in case the test suite changes (for now only the number of tests are considered for this, we might change/improve this on the future).New
--stepwise-reset/--sw-resetflag, allowing the user to explicitly reset the stepwise state and restart the workflow from the beginning.#13308: Added official support for Python 3.14.
#13380: Fix
ExceptionGroup{.interpreted-text role="class"} traceback filtering to exclude pytest internals.#13415: The author metadata of the BibTex example is now correctly formatted with last names following first names.
An example of BibLaTex has been added.
BibTex and BibLaTex examples now clearly indicate that what is cited is software.
-- by
willynilly{.interpreted-text role="user"}#13420: Improved test collection performance by optimizing path resolution used in
FSCollector.#13457: The error message about duplicate parametrization no longer displays an internal stack trace.
#4112: Using
pytest.mark.usefixtures <pytest.mark.usefixtures ref>{.interpreted-text role="ref"} onpytest.param{.interpreted-text role="func"} now produces an error instead of silently doing nothing.#5473: Replace [:]{.title-ref} with [;]{.title-ref} in the assertion rewrite warning message so it can be filtered using standard Python warning filters before calling
pytest.main{.interpreted-text role="func"}.pygmentsdependency is now required, causing output always to be source-highlighted (unless disabled via the--code-highlight=noCLI option).Bug fixes
#10404: Apply filterwarnings from config/cli as soon as possible, and revert them as late as possible
so that warnings as errors are collected throughout the pytest run and before the
unraisable and threadexcept hooks are removed.
This allows very late warnings and unraisable/threadexcept exceptions to fail the test suite.
This also changes the warning that the lsof plugin issues from PytestWarning to the new warning PytestFDWarning so it can be more easily filtered.
#11067: The test report is now consistent regardless if the test xfailed via
pytest.mark.xfail <pytest.mark.xfail ref>{.interpreted-text role="ref"} orpytest.fail{.interpreted-text role="func"}.Previously, xfailed tests via the marker would have the string
"reason: "prefixed to the message, while those xfailed via the function did not. The prefix has been removed.#12008: In
11220{.interpreted-text role="pr"}, an unintended change in reordering was introduced by changing the way indices were assigned to direct params. More specifically, before that change, the indices of direct params to metafunc's callspecs were assigned after all parametrizations took place. Now, that change is reverted.#12863: Fix applying markers, including
pytest.mark.parametrize <pytest.mark.parametrize ref>{.interpreted-text role="ref"} when placed above [@staticmethod]{.title-ref} or [@classmethod]{.title-ref}.#12929: Handle StopIteration from test cases, setup and teardown correctly.
#12938: Fixed
--durations-minargument not respected if-vvis used.#12946: Fixed missing help for
pdb{.interpreted-text role="mod"} commands wrapped by pytest -- byadamchainz{.interpreted-text role="user"}.#12981: Prevent exceptions in
pytest.Config.add_cleanup{.interpreted-text role="func"} callbacks preventing further cleanups.#13047: Restore
pytest.approx{.interpreted-text role="func"} handling of equality checks between [bool]{.title-ref} and [numpy.bool_]{.title-ref} types.Comparing [bool]{.title-ref} and [numpy.bool_]{.title-ref} using
pytest.approx{.interpreted-text role="func"} accidentally changed in version [8.3.4]{.title-ref} and [8.3.5]{.title-ref} to no longer match:This has now been fixed:
#13119: Improved handling of invalid regex patterns for filter warnings by providing a clear error message.
#13175: The diff is now also highlighted correctly when comparing two strings.
#13248: Fixed an issue where passing a
scopeinMetafunc.parametrize <pytest.Metafunc.parametrize>{.interpreted-text role="py:func"} withindirect=Truecould result in other fixtures being unable to depend on the parametrized fixture.
#13291: Fixed
reprofattrsobjects in assertion failure messages when usingattrs>=25.2.#13312: Fixed a possible
KeyErrorcrash on PyPy during collection of tests involving higher-scoped parameters.#13345: Fix type hints for
pytest.TestReport.when{.interpreted-text role="attr"} andpytest.TestReport.location{.interpreted-text role="attr"}.#13377: Fixed handling of test methods with positional-only parameter syntax.
Now, methods are supported that formally define
selfas positional-onlyand/or fixture parameters as keyword-only, e.g.:
Before, this caused an internal error in pytest.
#13384: Fixed an issue where pytest could report negative durations.
#13420: Added
lru_cachetonodes._check_initialpaths_for_relpath.#9037: Honor
disable_test_id_escaping_and_forfeit_all_rights_to_community_support{.interpreted-text role="confval"} when escaping ids in parametrized tests.Improved documentation
#12535: [This
example]{.title-ref}<https://docs.pytest.org/en/latest/example/simple.html#making-test-result-information-available-in-fixtures>
showed
printstatements that do not exactly reflect what thedifferent branches actually do. The fix makes the example more precise.
#13218: Pointed out in the
pytest.approx{.interpreted-text role="func"} documentation that it considers booleans unequal to numeric zero or one.#13221: Improved grouping of CLI options in the
--helpoutput.#6649: Added
~pytest.TerminalReporter{.interpreted-text role="class"} to theapi-reference{.interpreted-text role="ref"} documentation page.#8612: Add a recipe for handling abstract test classes in the documentation.
A new example has been added to the documentation to demonstrate how to use a mixin class to handle abstract
test classes without manually setting the
__test__attribute for subclasses.This ensures that subclasses of abstract test classes are automatically collected by pytest.
Packaging updates and notes for downstreams
colorama,iniconfig,and
packaging; and bumped the minimum allowed versionof
exceptiongroupforpython_version<'3.11'from a releasecandidate to a full release.
Contributor-facing changes
#12017: Mixed internal improvements:
MockTiminginto_pytest.timing.-- by
RonnyPfannschmidt{.interpreted-text role="user"}#12647: Fixed running the test suite with the
hypothesispytest plugin.Miscellaneous internal changes
~pytest.TerminalReporter{.interpreted-text role="class"} to the public pytest API, as it is part of the signature of thepytest_terminal_summary{.interpreted-text role="hook"} hook.v8.3.5Compare Source
pytest 8.3.5 (2025-03-02)
Bug fixes
-vvverbosity.libeditbuild of Python, such as on macOS or with uv-managed Python binaries from thepython-build-standaloneproject. This could manifest e.g. by a broken prompt when usingPdb, or seeing empty inputs with manual usage ofinput()and suspended capturing.AttributeError{.interpreted-text role="class"} crash when using--import-mode=importlibwhen top-level directory same name as another module of the standard library.--import-mode=importlib, a directory containing py file with the same name would cause anImportErrorImproved documentation
#12842: Added dedicated page about using types with pytest.
See
types{.interpreted-text role="ref"} for detailed usage.Contributor-facing changes
test_terminal.pywith Pygments >= 2.19.0when building Sphinx docs -- by
webknjaz{.interpreted-text role="user"}.pytest-dev/pytest-asyncio (pytest-asyncio)
v0.26.0: pytest-asyncio 0.26.0Compare Source
pytest_asyncio.fixture#1045typing-extensionsas additional dependency for Python<3.10#1045v0.25.3: pytest-asyncio 0.25.3Compare Source
v0.25.2: pytest-asyncio 0.25.2Compare Source
loop.shutdown_asyncgens()before closing the event loop to ensure async generators are closed in the same manner asasyncio.rundoes #1034v0.25.1: pytest-asyncio 0.25.1Compare Source
v0.25.0: pytest-asyncio 0.25.0Compare Source
0.25.0 (2024-12-13)
@pytest.fixturein strict mode. This will become an error in a future version of flake8-asyncio. #979v0.24.0: pytest-asyncio 0.24.0Compare Source
0.24.0 (2024-08-22)
pytest_asyncio.fixture. Users are encouraged to use the loop_scope keyword argument, which does exactly the same.@pytest.mark.asyncio. #812astral-sh/ruff (ruff)
v0.15.6Compare Source
Released on 2026-03-12.
Preview features
lazyimport parsing (#23755)airflow] FlagVariable.get()calls outside of task execution context (AIR003) (#23584)airflow] Flag runtime-varying values in DAG/task constructor arguments (AIR304) (#23631)flake8-bugbear] Implementdelattr-with-constant(B043) (#23737)flake8-tidy-imports] AddTID254to enforce lazy imports (#23777)flake8-tidy-imports] Allow users to ban lazy imports withTID254(#23847)isort] Retainlazykeyword when sorting imports (#23762)pyupgrade] Addfrom __future__ import annotationsautomatically (UP006) (#23260)refurb] Supportnewlineparameter inFURB101for Python 3.13+ (#23754)ruff] Addos-path-commonprefix(RUF071) (#23814)ruff] Add unsafe fix for os-path-commonprefix (RUF071) (#23852)ruff] LimitRUF036to typing contexts; make it unsafe for non-typing-only (#23765)ruff] Use starred unpacking forRUF017in Python 3.15+ (#23789)Bug fixes
--add-noqacreating unwanted leading whitespace (#23773)--add-noqabreaking shebangs (#23577)flake8-annotations] Fix stack overflow inANN401on quoted annotations with escape sequences (#23912)pep8-naming] Check naming conventions inmatchpattern bindings (N806,N815,N816) (#23899)perflint] Fix comment duplication in fixes (PERF401,PERF403) (#23729)pyupgrade] Properly triggersuperchange in nested class (UP008) (#22677)ruff] Avoid syntax errors inRUF036fixes (#23764)Rule changes
flake8-bandit] FlagS501withrequests.request(#23873)flake8-executable] Fix WSL detection in non-Docker containers (#22879)flake8-print] Ignorepprintcalls withstream=(#23787)Documentation
flake8-bugbear] Fix misleading description forB904(#23731)Contributors
v0.15.5Compare Source
Released on 2026-03-05.
Preview features