Repository navigation
ci(matrix): split Python into supported 3.11-3.15 and non-blocking KTLO 3.8-3.10 (#1633) - #1645
Conversation
…LO 3.8-3.10 - Unit Tests, Python Compatibility, conda and PyPI: 3.11-3.15 is the blocking tier in every matrix; Compat's schedule-only 3.15 job is retired. - KTLO tier: 3.10 wherever it ran, plus 3.8/3.9 in test, integration and compat (ubuntu-24.04). Jobs read through one needs.<job>.result keep a KTLO failure inside step-level continue-on-error; compat uses the job-level form. KTLO legs are suffixed "(KTLO)" so no required context matches one. - create-release: PyPI completeness counts the 7 supported files only; each KTLO leg records its outcome as a job output that Release status reports as a notice. No conda 3.10 leg: soupsieve==3.0.3 needs Python >=3.11.5. - conda 3.15 leaves base on its own Python: conda has no py315 build yet. - pyproject: classifiers list the supported tier; requires-python unchanged. - ci_timing, bug report template, README, SECURITY, docs, the benchmark's 3.15 note and comments follow. New tests/project/test_python_matrix_tiers_1633.py: 17 tests, 50 failures against origin/main's workflows and config, green here; regression files green. Closes #1633
|
Verdict: GOOD TO GO at Two things are yours to decide:
Advisory, not blocking: a KTLO leg can still fail its job by hitting the job-level timeout. 3.15 conda and a full 3.15 test run are not verified locally. |
|
Coverage: 89.67% (unit tier, Python 3.14,
Per-file detail: the |
|
Not ready yet. The 3.15 legs are blocking now, and they fail on two tests that the schedule-only leg had hidden:
Both are being fixed separately. This PR's own change is unaffected. |
|
The red 3.15 legs here predate their fixes, which are now on
All green on 3.15.0 and 3.14, and the merge is clean. With #1633 settled as option 1, this is ready for your bypass merge, followed by the one ruleset edit. |
|
Verdict: GOOD TO GO at |
…eated for (#1634) Run 38008819343 was created for b6b95bc and, approved three days later, tagged main's tip 2c0008c as v1.5.0b9 and conda-1.5.0b9+0: the GitHub Release defaulted target_commitish to main, and the tag job ran `git pull --rebase origin main` before tagging. - Every checkout pins `ref: ${{ github.sha }}`. github's release names it as target_commitish only on workflow_run, where it creates the tag; a v* push names none. - github creates the release with a GitHub App installation token, minted in the job by actions/create-github-app-token@v3 with Contents and Workflows write from the github-release environment secret RELEASE_APP_PRIVATE_KEY, since GitHub refuses GITHUB_TOKEN a target that changes a workflow file relative to main. With vars.RELEASE_APP_CLIENT_ID unset it spends GITHUB_TOKEN as before. version_check skips a push by vars.RELEASE_APP_BOT_ID, the run that App's tag starts, and release_status reports that skip with a notice. - pypi and conda attach files with `gh release upload`, not action-gh-release, which calls Update a release, re-checking that target, before every upload. An asset already in state "uploaded" is left alone rather than deleted and re-uploaded; one in any other state is replaced. A missing release or a pattern matching no file now fails the step. - tag cuts conda-<version>+0 at the run's commit before reading main; the conda/build reset is its own commit fast-forwarded onto main's tip, skipped where origin already has a conda-<version>+N tag other than +0. - github, tag, pypi and conda refuse to publish under a tag naming another commit; that check blocks KTLO legs too. github explains a 404 or 403 by the token it spent. - cron-conda's conda-dist updates only a published release, naming the default branch as its target, so it never creates v<version> or has a stale target re-checked. - releasing.rst gains "The Release App" with its one-time setup; releasing.rst and workflows.rst re-cited. New test: tests/project/test_release_tags_the_run_sha_1634.py (66 tests, 58 failing on origin/main's workflows). test_release_gates.py gains the App's rows; test_python_matrix_tiers_1633.py exempts the tag check. This fixes the replacement half of #1640; the convergence half (completeness waiting on legs that can fail) is #1645's. Closes #1634 Refs #1640
…eated for (#1634) (#1656) Run 38008819343 was created for b6b95bc and, approved three days later, tagged main's tip 2c0008c as v1.5.0b9 and conda-1.5.0b9+0: the GitHub Release defaulted target_commitish to main, and the tag job ran `git pull --rebase origin main` before tagging. - Every checkout pins `ref: ${{ github.sha }}`. github's release names it as target_commitish only on workflow_run, where it creates the tag; a v* push names none. - github creates the release with a GitHub App installation token, minted in the job by actions/create-github-app-token@v3 with Contents and Workflows write from the github-release environment secret RELEASE_APP_PRIVATE_KEY, since GitHub refuses GITHUB_TOKEN a target that changes a workflow file relative to main. With vars.RELEASE_APP_CLIENT_ID unset it spends GITHUB_TOKEN as before. version_check skips a push by vars.RELEASE_APP_BOT_ID, the run that App's tag starts, and release_status reports that skip with a notice. - pypi and conda attach files with `gh release upload`, not action-gh-release, which calls Update a release, re-checking that target, before every upload. An asset already in state "uploaded" is left alone rather than deleted and re-uploaded; one in any other state is replaced. A missing release or a pattern matching no file now fails the step. - tag cuts conda-<version>+0 at the run's commit before reading main; the conda/build reset is its own commit fast-forwarded onto main's tip, skipped where origin already has a conda-<version>+N tag other than +0. - github, tag, pypi and conda refuse to publish under a tag naming another commit; that check blocks KTLO legs too. github explains a 404 or 403 by the token it spent. - cron-conda's conda-dist updates only a published release, naming the default branch as its target, so it never creates v<version> or has a stale target re-checked. - releasing.rst gains "The Release App" with its one-time setup; releasing.rst and workflows.rst re-cited. New test: tests/project/test_release_tags_the_run_sha_1634.py (66 tests, 58 failing on origin/main's workflows). test_release_gates.py gains the App's rows; test_python_matrix_tiers_1633.py exempts the tag check. This fixes the replacement half of #1640; the convergence half (completeness waiting on legs that can fail) is #1645's. Closes #1634 Refs #1640
Please follow the guide below
You will be asked some questions, please read them carefully and answer honestly
Put an
xinto all the boxes [ ] relevant to your pull request (like that [x])Use Preview tab to see how your pull request will actually look like
Searched for similar pull requests
Followed the coding style (
make pylint,make mypy,make isort)make testpasses, and a test case covers the changeAdded a changelog entry under
docs/source/changelog/and regeneratedCHANGELOG.md, if the change is user-visible — N/A — centralised in docs(changelog): shared 1.5.0 changelog — long-lived, merges last (#610, #616, #617, #618, #620) #657What is the purpose of your pull request?
Tick the commit type your subject line carries.
fix— corrects a defectfeat— adds a featureperf— changes performance, not behaviourrefactor— changes neither behaviour nor performancetest— tests onlydocs— documentation onlyci— workflows or build toolingrelease— bumps the version or rolls up a distributionchore— anything elseDescription of your pull request and other information
Tiers. 3.11-3.15 now blocks in every matrix: unit tests, compatibility, conda and PyPI. Compat's schedule-only 3.15 job is gone. The KTLO tier is 3.10 (and pypy3.10) wherever it ran, plus 3.8/3.9 in
test,integrationand compat, which run onubuntu-24.04. A KTLO leg never blocks. Jobs read through oneneeds.<job>.result(test,integration,pypcap-parity,pypi) keep a KTLO failure inside step-levelcontinue-on-error: ${{ matrix.ktlo == true }}(unit-tests.yml:74-89). Compat uses the job-level form (python-compatibility.yml:39-61), and engine-tests runs its 3.10 cell as a separate step (unit-tests.yml:873). Every KTLO leg's name ends in(KTLO). 3.8/3.9 are not inengine-testsorpypcap-parity: both run onubuntu-latest, which has no setup-python 26.04 build of either, and neither job was measured on them.Release. PyPI completeness now counts only the 7 supported files (
create-release.yml:256,285). Each KTLO leg records its outcome (:690), and Release status reports it as a notice (:1013). There is no conda 3.10 leg, becausesoupsieve==3.0.3needs Python >=3.11.5. On conda 3.15, base keeps its own Python (:872,cron-conda.yml:288): setup-miniconda installspython-versioninto base, and conda has no py315 build.Measured. python.org's release-cycle data lists 3.10 as end-of-life since 2026-10-01 and 3.15 at bugfix since 2026-10-09. In setup-python's manifest, the last Ubuntu with a build is 24.04 for 3.8 and 3.9, 22.04 for 3.7 and 20.04 for 3.6. On 3.8 and 3.9,
.[test,DPKT,crypto,NGAP]installs and pcapkit imports. tests/corekit and tests/utilities gave 11 failures in 698 on 3.8 and 7 on 3.9, against 0 on 3.10 and 3.15. 3.6 and 3.7 are left out: 3.7 failsimport pcapkitwith a SyntaxError (corekit/io.py:103), and 3.6 has nosetuptools>=61. Neither can installpytest>=8. In Docker,python=3.15into base failed with "Conda cannot remove itself", andconda build --python 3.15with base left alone built and importedpypcapkit-1.5.0b9-py315_0.The classifiers list 3.11-3.15 only, since a version classifier claims support and KTLO does not.
requires-pythonstays>=3.6, <4.Ruleset 23497679, for the owner. No job emits
Compat Python 3.10any more (that leg is nowCompat Python 3.10 (KTLO)), so this PR cannot meet the ruleset as it stands. Safe order: merge it with the owner bypass, then make ONE ruleset edit that removesCompat Python 3.10and addsCompat Python 3.15. Adding 3.15 before the merge strands every other open PR, because their base does not emit that job.New
tests/project/test_python_matrix_tiers_1633.pyhas 17 tests. Against origin/main's workflows,pyproject.tomlandutil/ci_timing.py, 15 of them fail (pytest: 50 failed, counting subtests). Two read prose against the matrices: the leg counts inworkflows.rst:247-250, and a denylist of retired claims (3.10 as CI's floor, 3.15 as allowed to fail, e.g. the benchmark's 3.15 note). All pass here, as do 21 regression files and the benchmark'sTestPinsFile.Closes #1633