Skip to content

Commit 2e8f751

Browse files
OmarAlJarrahclaude
andcommitted
ci: run the matrix on python versions the project actually supports
The 3.8-3.11 legs were no-ops: requires-python is >=3.12, so uv sync provisioned a managed >=3.12 interpreter on those runners and re-tested 3.12 four extra times. Replace them with a 3.12 / 3.13 / 3.14 matrix. Adding 3.14 surfaced a real teardown failure: the workspace conftest's session finalizer called asyncio.get_event_loop_policy(), deprecated in 3.14, which the filterwarnings=error gate turned into a teardown error that aborted the finalizer before it closed its loops — leaking them as PytestUnraisableExceptionWarnings. Switch to asyncio.get_event_loop() (returns the set loop without warning everywhere; RuntimeError on 3.14+ when none is set). Full suite verified green on 3.12, 3.13, and 3.14. Also advertise 3.14 in the package classifiers and doc references. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent ace9057 commit 2e8f751

9 files changed

Lines changed: 14 additions & 6 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
strategy:
1818
fail-fast: false
1919
matrix:
20-
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
20+
python-version: ["3.12", "3.13", "3.14"]
2121
steps:
2222
- name: Checkout
2323
uses: actions/checkout@v4

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ python-sdk/
9191
├── pyproject.toml # workspace root (uv workspace, dev deps,
9292
│ # ruff/mypy/pytest config)
9393
├── uv.lock
94-
├── .github/workflows/ci.yml # pytest + mypy + ruff, python matrix 3.8–3.13
94+
├── .github/workflows/ci.yml # pytest + mypy + ruff, python matrix 3.12–3.14
9595
├── docs/ # cross-package documentation: architecture,
9696
│ # auth, bodies, errors, http, pipelines
9797
└── packages/

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ uv run ruff check # lint
227227
uv run ruff format --check # formatting gate
228228
```
229229

230-
CI runs the same gates on Python 3.12 and 3.13 for every push and pull
231-
request — see [`.github/workflows/ci.yml`](.github/workflows/ci.yml).
230+
CI runs the same gates on Python 3.12, 3.13, and 3.14 for every push and
231+
pull request — see [`.github/workflows/ci.yml`](.github/workflows/ci.yml).
232232

233233
## Conventions
234234

conftest.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,12 @@ def _own_default_event_loop() -> Iterator[None]:
3535
yield
3636
finally:
3737
# ``pytest_asyncio`` may have replaced the current loop; close
38-
# whichever loop the policy currently points at.
38+
# whichever loop is current at teardown. ``asyncio.get_event_loop``
39+
# (not the policy API — deprecated in 3.14) returns the set loop
40+
# without warning on every supported version, and raises
41+
# ``RuntimeError`` on 3.14+ when none is set.
3942
try:
40-
current = asyncio.get_event_loop_policy().get_event_loop()
43+
current = asyncio.get_event_loop()
4144
except RuntimeError:
4245
current = None
4346
for candidate in {loop, current}:

packages/dexpace-sdk-core/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ classifiers = [
1919
"Programming Language :: Python :: 3",
2020
"Programming Language :: Python :: 3.12",
2121
"Programming Language :: Python :: 3.13",
22+
"Programming Language :: Python :: 3.14",
2223
"Topic :: Software Development :: Libraries",
2324
]
2425
dependencies = ["furl>=2.1.3"]

packages/dexpace-sdk-http-aiohttp/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ classifiers = [
2020
"Programming Language :: Python :: 3",
2121
"Programming Language :: Python :: 3.12",
2222
"Programming Language :: Python :: 3.13",
23+
"Programming Language :: Python :: 3.14",
2324
"Topic :: Software Development :: Libraries",
2425
]
2526
dependencies = [

packages/dexpace-sdk-http-httpx/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ classifiers = [
1919
"Programming Language :: Python :: 3",
2020
"Programming Language :: Python :: 3.12",
2121
"Programming Language :: Python :: 3.13",
22+
"Programming Language :: Python :: 3.14",
2223
"Topic :: Software Development :: Libraries",
2324
]
2425
dependencies = [

packages/dexpace-sdk-http-requests/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ classifiers = [
1919
"Programming Language :: Python :: 3",
2020
"Programming Language :: Python :: 3.12",
2121
"Programming Language :: Python :: 3.13",
22+
"Programming Language :: Python :: 3.14",
2223
"Topic :: Software Development :: Libraries",
2324
]
2425
dependencies = [

packages/dexpace-sdk-http-stdlib/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ classifiers = [
1919
"Programming Language :: Python :: 3",
2020
"Programming Language :: Python :: 3.12",
2121
"Programming Language :: Python :: 3.13",
22+
"Programming Language :: Python :: 3.14",
2223
"Topic :: Software Development :: Libraries",
2324
]
2425
dependencies = [

0 commit comments

Comments
 (0)