Skip to content

Commit 4086f7a

Browse files
committed
ci: split a 3.10 compat job so the framework integration tests actually run (#27)
The release workflow was the repository's only CI and pinned Python 3.10. The framework integration tests added for entrypoint detection depend on flask, fastapi, celery and click, which are gated `python_version >= '3.11'` for a real reason: on 3.10 ray==2.0.0 pins click<=8.0.4 while celery>=5.3 needs click>=8.1.2. So on 3.10 all four tests hit `pytest.importorskip` and skip silently -- the decorator-rule regression they exist to catch could ship with a green suite, which is exactly how that regression reached the final review in the first place. Bumping the release job to 3.12 alone would have dropped the only CI exercise of the `python_version < '3.11'` half of the dependency matrix, and there are seven such branches (ray, jedi, networkx, pydantic, rich, typer, typing-extensions). So: a `compat` job runs the suite on 3.10, the release job runs on 3.12 where the integration tests install, and the release gates on compat. Both halves of the matrix stay covered. The package is pure-Python and `requires-python` is unchanged, so the built wheel is unaffected by the interpreter bump.
1 parent b6c082e commit 4086f7a

1 file changed

Lines changed: 35 additions & 2 deletions

File tree

.github/workflows/release.yml

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,14 @@ permissions:
1212
discussions: write # attach the release-linked repo Discussion (Announcements)
1313

1414
jobs:
15-
release:
15+
# Exercises the `python_version < '3.11'` half of the dependency matrix (ray==2.0.0,
16+
# the older jedi/networkx/pydantic/typer pins). The release job below runs on 3.12,
17+
# where the framework integration tests can install -- on 3.10 ray==2.0.0 pins
18+
# click<=8.0.4 against celery>=5.3's click>=8.1.2 floor, so those test deps are
19+
# gated >=3.11 and would silently `importorskip` here. Gating the release on this
20+
# job keeps both halves of the matrix covered (#27).
21+
compat:
1622
runs-on: ubuntu-latest
17-
1823
steps:
1924
- name: Check out code
2025
uses: actions/checkout@v4
@@ -29,6 +34,34 @@ jobs:
2934
curl -LsSf https://astral.sh/uv/install.sh | sh
3035
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
3136
37+
- name: Sync dependencies
38+
run: uv sync --all-groups
39+
40+
- name: Run tests
41+
run: uv run pytest
42+
43+
release:
44+
needs: compat
45+
runs-on: ubuntu-latest
46+
47+
steps:
48+
- name: Check out code
49+
uses: actions/checkout@v4
50+
51+
# 3.12, not 3.10: the framework integration tests (#27) need flask/fastapi/
52+
# celery/click, which are gated `python_version >= '3.11'`. On 3.10 they
53+
# `importorskip` and the decorator-rule regression they exist to catch would
54+
# ship green. The `compat` job above keeps 3.10 covered.
55+
- name: Set up Python 3.12
56+
uses: actions/setup-python@v5
57+
with:
58+
python-version: '3.12'
59+
60+
- name: Install uv
61+
run: |
62+
curl -LsSf https://astral.sh/uv/install.sh | sh
63+
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
64+
3265
- name: Sync dependencies
3366
run: uv sync --all-groups
3467

0 commit comments

Comments
 (0)