ci: exercise the abi3 floor on all three OSes, and the integrations at release (#527)
* ci: exercise the abi3 floor on all three OSes, and the integrations at release The last two items of #306. Five of its seven were closed by earlier work; these are the ones that were still open. **Only Python 3.11 ran tests.** The wheel is abi3-py39, so one artifact claims 3.9 through 3.14, but ci.yml's `python` matrix pins 3.11 on every OS and the floor was import-tested only in release-pypi.yml, only on Linux. A new `python-abi3-floor` job builds the wheel on 3.11, switches the interpreter to 3.9, and loads that same artifact on ubuntu, macOS and Windows — which is where a limited-API violation or a loader difference shows up. It is a separate job rather than another axis on `python` on purpose: that job's name is a required status check, and adding an axis renames every leg of it. Floor only — the 3.14 ceiling stays in release-pypi.yml where a wheel is already being built, and the floor is the end where the limited API actually bites. **The release smoke skipped every integration.** `release-pypi.yml` installed the wheel and pytest and nothing else, so all four integration test files `importorskip`ed out of the run that gates a publish. The extras now go in alongside the wheel, matching what ci.yml already does for PRs. Both workflow files parse as YAML and the existing `python` job's name is unchanged, so no required check is renamed. Closes #306 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * ci: reattach the integration-floors rationale to its own job Review caught that the new job was spliced between `integration-floors`' comment block and its job key, so ten lines explaining why that leg is ubuntu-only — 'a floor is a dependency-resolution property, not a platform one, so a three-OS matrix would buy nothing' — ended up heading a job that is deliberately a three-OS matrix. Moved the block back above `integration-floors`. The abi3 job keeps its own rationale. This is the second time this session I have inserted at a computed anchor without checking what precedes it; the first detached `validate_calibration`'s rustdoc onto an unrelated helper. Checking the lines above an insertion point is now part of how I make them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -429,6 +429,67 @@ jobs:
|
||||
shell: bash
|
||||
run: pytest turbovec-python/tests/ -v
|
||||
|
||||
# The wheel is abi3-py39: one artifact claims 3.9 through 3.14, but the
|
||||
# `python` matrix above only ever runs 3.11. Import-testing the floor on
|
||||
# all three OSes is where limited-API breakage shows up — a symbol that
|
||||
# exists in 3.11 but not 3.9, or a macOS/Windows loader difference the
|
||||
# Linux-only release check never sees (#306).
|
||||
#
|
||||
# Deliberately a separate job rather than another matrix axis on
|
||||
# `python`: that job's name is a required status check, and adding an
|
||||
# axis renames every leg of it.
|
||||
#
|
||||
# Floor only. The 3.14 ceiling stays in release-pypi.yml, where a wheel
|
||||
# is already being built for publication; running it here as well would
|
||||
# double this job for the version least likely to break the *limited*
|
||||
# API.
|
||||
python-abi3-floor:
|
||||
name: Python abi3 floor (${{ matrix.os }})
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-14, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
# Build with 3.11 — maturin needs an interpreter it supports, and the
|
||||
# abi3 wheel it produces is not tied to it.
|
||||
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
||||
with:
|
||||
python-version: "3.11"
|
||||
|
||||
- name: Build the abi3 wheel
|
||||
shell: bash
|
||||
working-directory: turbovec-python
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install maturin
|
||||
maturin build --release --locked --out dist
|
||||
|
||||
# Now switch to the floor and load that same artifact.
|
||||
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
||||
with:
|
||||
python-version: "3.9"
|
||||
|
||||
- name: Install the wheel on the abi3 floor and exercise it
|
||||
shell: bash
|
||||
working-directory: turbovec-python
|
||||
run: |
|
||||
python -VV
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install pytest numpy
|
||||
python -m pip install dist/*.whl
|
||||
# Import first: a limited-API violation fails here, before any
|
||||
# test collection noise.
|
||||
python -c "import turbovec; print(turbovec.__file__)"
|
||||
# Then the core suites. The integration extras are not installed
|
||||
# here — several do not support 3.9 — so those files skip
|
||||
# themselves via importorskip, which is the intended shape.
|
||||
python -m pytest tests/test_index.py tests/test_id_map.py -q
|
||||
|
||||
# pyproject.toml promises `haystack-ai>=2.23.0` and `agno>=2.5.4`, but the
|
||||
# matrix above installs `>=2.0` for both and pip resolves that to the newest
|
||||
# release — so the floors users are told to trust have never once been
|
||||
|
||||
@@ -77,6 +77,11 @@ jobs:
|
||||
# regressions that produce structurally-correct .so files which
|
||||
# fail at Python import time — exactly the class of bug that was
|
||||
# silently shipping in Linux wheels until this PR.
|
||||
# The integration extras go in alongside the wheel. Without them
|
||||
# every haystack / langchain / llama-index / agno test file
|
||||
# `importorskip`s out, so the run that gates a release exercised
|
||||
# none of the four integrations — the gap ci.yml's `python` job
|
||||
# already closes for PRs (#306).
|
||||
- name: Install wheel and smoke test
|
||||
shell: bash
|
||||
working-directory: turbovec-python
|
||||
@@ -84,6 +89,11 @@ jobs:
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install pytest
|
||||
python -m pip install dist/*.whl
|
||||
python -m pip install \
|
||||
"langchain-core>=0.3" \
|
||||
"llama-index-core>=0.12.1" \
|
||||
"haystack-ai>=2.0" \
|
||||
"agno>=2.0"
|
||||
python -m pytest tests/ -v
|
||||
# The wheel is abi3-py39: a single artifact claims Python 3.9-3.14,
|
||||
# but only 3.11 is exercised above. Import-test the same wheel on
|
||||
|
||||
Reference in New Issue
Block a user