From 671049a3b0d5b6d6f974e1e1d777c2f5f508ff01 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Sun, 20 Sep 2026 21:14:50 +0300 Subject: [PATCH 1/2] ci: resolve the declared dependency floors on every matrix entry --- .github/workflows/_checks.yml | 30 ++++++++++++++++++++++++++++++ pyproject.toml | 5 +++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/.github/workflows/_checks.yml b/.github/workflows/_checks.yml index 85235f0..a44c35b 100644 --- a/.github/workflows/_checks.yml +++ b/.github/workflows/_checks.yml @@ -43,6 +43,36 @@ jobs: run: uv run --no-sync python -c "import sys, modern_di_aiogram; assert not sys._is_gil_enabled(), 'GIL is enabled on a t-build'" - run: just test-ci + floors: + # Every other job resolves newest, so the declared floors are a claim nothing installs. + # This one resolves the bottom of each range, on every matrix entry: wheel coverage is + # per interpreter, so two interpreters resolving the same versions can still disagree + # on whether those versions install. + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: + - "3.10" + - "3.11" + - "3.12" + - "3.13" + - "3.14" + - "3.14t" + steps: + - uses: actions/checkout@v6 + - uses: astral-sh/setup-uv@v8.2.0 + with: + enable-cache: true + cache-dependency-glob: "**/pyproject.toml" + - run: uv python install ${{ matrix.python-version }} + - run: uv python pin ${{ matrix.python-version }} + # --no-build so a floor with no wheel for this interpreter fails here instead of + # quietly compiling its sdist; --no-install-project because that flag would refuse to + # build this project too, and the tests import it from the checkout. + - run: uv sync --all-extras --no-install-project --resolution lowest-direct --no-build + - run: uv run --no-sync pytest + links: runs-on: ubuntu-latest steps: diff --git a/pyproject.toml b/pyproject.toml index 0af877c..f8e2d67 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,8 +20,9 @@ classifiers = [ ] dependencies = [ "aiogram>=3.2,<4", - # Not imported here: aiogram pulls pydantic, and pydantic-core ships no cp314 wheel before - # pydantic 2.12, so the lowest declared combination has no installable pydantic on 3.14. + # Not imported here: aiogram pulls pydantic, and pydantic-core ships no cp313 wheel before + # pydantic 2.8 and no cp314 wheel before 2.12 - the lowest declared combination cannot install. + "pydantic>=2.8; python_version == '3.13'", "pydantic>=2.12; python_version >= '3.14'", "modern-di>=3,<4", ] From c96fddcb6586e120133fe6b65f323660d260995f Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Sun, 20 Sep 2026 21:26:13 +0300 Subject: [PATCH 2/2] fixup: floor the dev group and bound aiohttp on 3.13 --- pyproject.toml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f8e2d67..a9b327d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,10 +20,13 @@ classifiers = [ ] dependencies = [ "aiogram>=3.2,<4", - # Not imported here: aiogram pulls pydantic, and pydantic-core ships no cp313 wheel before - # pydantic 2.8 and no cp314 wheel before 2.12 - the lowest declared combination cannot install. - "pydantic>=2.8; python_version == '3.13'", + # Not imported here: aiogram 3.2 pins both to versions with no wheel for these interpreters - + # pydantic-core gets a cp313 wheel at pydantic 2.8.1 and a cp314 one at 2.12, aiohttp at 3.10.5 + # and 3.13 respectively. + "pydantic>=2.8.1; python_version == '3.13'", "pydantic>=2.12; python_version >= '3.14'", + "aiohttp>=3.10.5; python_version == '3.13'", + "aiohttp>=3.13; python_version >= '3.14'", "modern-di>=3,<4", ] version = "0" @@ -36,10 +39,11 @@ Issues = "https://github.com/modern-python/modern-di-aiogram/issues" Changelog = "https://github.com/modern-python/modern-di-aiogram/releases" [dependency-groups] +# Floored so `uv sync --resolution lowest-direct` resolves a usable harness, not each name's first release. dev = [ - "pytest", - "pytest-cov", - "pytest-asyncio", + "pytest>=8", + "pytest-cov>=5", + "pytest-asyncio>=0.24", "aiogram-dialog>=2,<3", ] lint = [