Skip to content

v9.0.0 - #299

Open
pytooling-claude[bot] wants to merge 29 commits into
mainfrom
dev
Open

v9.0.0#299
pytooling-claude[bot] wants to merge 29 commits into
mainfrom
dev

Conversation

@pytooling-claude

Copy link
Copy Markdown

Note

A new major version, @r9: Python 3.15 becomes the default, MSYS2 runs on UCRT64 only.

  • ✨ Python 3.15 (default) and 3.16 (pre-release), PyPy 3.12; application tests can download artifacts.
  • ⚠️ MSYS2 runtimes mingw32 and mingw64 removed (with the input mingw64_before_script); Python 3.9, PyPy 3.9
    and 3.10 removed.
  • 🔧 Default version lists, exclude and disable lists follow; Python 3.10 warns; pacboy entries for pyEDAA.Reports and
    pyTooling.Sphinx.
  • 📖 Version and system lists, every template's defaults; GoatCounter page views.

Important

Merge after Python 3.15.0 is installable on the runners. Until actions/python-versions lists 3.15.0 (it lists
3.15.0-rc.3 today), every job asking for the new default 3.15 fails at setup - including this repository's
verifications, which is why dev is red since the v9.0.0 preparation.

✨ New Features

  • Python 3.15 is the latest CPython release, Python 3.16 the pre-release (Add PyPy 3.12 and Python 3.15, Python 3.16 as pre-release #292). 3.15 gets 🟢, 3.16 🟣
    (3.16.0-alpha.1); the older versions move down one level: 3.14 🟢, 3.13 🟡, 3.12 🟠, 3.11 🔴, 3.10 ⚫.

  • PyPy 3.12 (pypy-3.12, PyPy 8.0.0) (Add PyPy 3.12 and Python 3.15, Python 3.16 as pre-release #292). It runs on Linux, macOS and Windows on x86-64 and on Linux and macOS
    on arm64; PyPy publishes no Windows-on-arm64 build, so windows-arm:pypy-3.12 is in the default disable_list. Icons:
    pypy-3.11 ⟲🟠, pypy-3.12 ⟲🟡.

  • ApplicationTesting.yml downloads artifacts the application tests read (ApplicationTesting: download artifacts the application tests read #296):

    • artifacts_pattern: a glob of artifact names, e.g. 'Example-*'. Empty by default - no download, so existing
      pipelines are unchanged. Named like unittest_artifacts_pattern (PublishTestResults.yml) and
      coverage_artifacts_pattern (PublishCoverageResults.yml).
    • artifacts_directory: where they go, default 'artifacts'; each artifact is extracted into a subdirectory named
      after it.
    • The download runs after the wheel is installed, before the tests, on every system of the matrix.
    AppTesting:
      uses: pyTooling/Actions/.github/workflows/ApplicationTesting.yml@r9
      needs:
        - ExampleJobs
      with:
        artifacts_pattern: 'Example-*'

⚠️ Breaking Changes

Moving a pipeline from @r8 to @r9:

  • mingw64_before_script → ucrt64_before_script.
  • Remove mingw32/mingw64 from system_list, exclude_list, disable_list and include_list (only warns
    otherwise).
  • A pinned python_version of 3.9 or a pypy-3.9/pypy-3.10 entry creates no job any more.

🔧 Changes

📖 Documentation

🧪 Unit Tests

Known Issues

  • Python 3.15 and 3.16 aren't field-tested yet: 3.15.0 is due 2026-10-09, 3.16.0a1 2026-10-16. Each job asking for one
    of them fails at setup until actions/python-versions lists it.
  • On PyPy 8.0 (pypy-3.11, pypy-3.12), packages without a pp80 wheel are built from source, e.g. Pillow (for
    matplotlib) fails on Linux for missing libjpeg headers - Skip the matplotlib testcases on PyPy 8.0 on Linux pyTooling#474.
  • CompletePipeline.yml doesn't forward artifacts_pattern/artifacts_directory; pipelines with example jobs wire
    ApplicationTesting by hand.
  • tests/pacman_packages.py, the standalone copy of ComputePacboyPackages, lags behind the action.
  • Callers to clean up when moving to @r9: pyEDAA.CLITool passes mingw64_before_script; pyTooling names mingw32
    and mingw64 in system lists, pyEDAA.ProjectModel mingw64:* in a disable list.

Related Issues and Pull-Requests

claude-code and others added 25 commits October 2, 2026 21:12
Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
'Parameters' warns when 'system_list' still names it and creates no job for it.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
The default 'system_list' runs MSYS2 on 'ucrt64' only. 'UnitTesting' and 'ApplicationTesting' lose the input
'mingw64_before_script'. 'Parameters' warns when 'system_list' still names 'mingw64' and creates no job for it.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
PyPy 8.0 ships Python 3.12 for every runner except Windows on aarch64, so 'windows-arm:pypy-3.12' joins the default
'disable_list'. The PyPy icons shift by one color, 'pypy-3.12' becomes the latest PyPy.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
'pypy-3.9' and 'pypy-3.10' leave the list of known versions, 'windows-arm:pypy-3.10' the default 'disable_list'.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Versions 3.9 to 3.15 with the icons 'Parameters' uses: 3.14 is the latest release, 3.15 the pre-release.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Python 3.15 becomes the default 'python_version' of every template, and the default 'python_version_list' is
'3.11 3.12 3.13 3.14 3.15'. Python 3.9 leaves the list of known versions; listing 3.10 warns that its support ended.
The pre-release version is now 3.16.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
'3.16' maps to '3.16.0-alpha.1', spelled as in setup-python's version manifest ('alpha', not 'a').

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
'py-0' is 3.15 now, so every 'py-N' test case and its expected job matrix move up by one version. The default
'exclude_list' loses 'windows-arm:3.9', as 3.9 is no known version any more.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
The documentation built on GitHub Actions - the one published to GitHub Pages - loads GoatCounter's script, which
counts each page view for the site 'pytooling'. A local build has no script.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
…jsonschema

pyEDAA.Reports reads JSON reports validated with jsonschema (coverage.py's JSON format, edaa-org/pyEDAA.Reports#204).
Its transitive entry, and the one of sphinx_reports depending on it, list python-jsonschema:p, so MSYS2 jobs of
packages depending on pyEDAA.Reports install it from MSYS2 instead of building rpds-py from source.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
… extra

pyTooling.Sphinx took over the reports of sphinx_reports. It needs python-aiohttp:p (pyTooling[pypi]) and
python-markupsafe:p (Sphinx, through Jinja2); its 'reports' extra adds pyEDAA.Reports (jsonschema, lxml,
ruamel.yaml) and docstr_coverage (PyYAML).

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
…ownload_artifacts')

New inputs 'download_artifacts' - a glob of artifact names, empty by default - and 'artifacts_directory' -
'artifacts' by default. After the wheel is installed, the matching artifacts are downloaded, each into a
subdirectory named after the artifact, so application tests can read what other jobs of the pipeline wrote, e.g.
the reports of example jobs.

'_Checking_JobTemplates.yml' uploads an example report from a new job 'ExampleReport' and lets 'AppTesting'
download 'Example-*'; a new app test reads it, and skips where no artifacts were downloaded.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
…ttern'

Like 'unittest_artifacts_pattern' (PublishTestResults) and 'coverage_artifacts_pattern' (PublishCoverageResults).

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
pyTooling.Sphinx carries the domain 'report' (transferred from sphinx_reports) with configuration values renamed to the
'pyTooling_' prefix, and registers the style roles, ':pycode:', '|br|' and '|hr|' itself, so the prolog keeps only
':bashcode:' and ':jsoncode:'. Its extra 'reports' replaces the requirement sphinx_reports. It requires pyTooling 10
from GitHub, which conflicts with 'pyTooling ~= 8.17' of the package's requirements, so doc/requirements.txt no longer
includes them.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
The 'tree' directive renders as nested bullet lists in LaTeX, and a namespace package's directory tree has 5 levels,
which ends lualatex with "Too deeply nested". Option 'maxlistdepth' of package 'sphinx' lifts LaTeX' limit.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
The example directory structures on the pages RepositoryStructure, index, Parameters, CompletePipeline and UnitTesting
are drawn by pyTooling.Sphinx' 'tree' directive: 📂 directories, 📦 Python packages, 🐍 Python files, 📄 other files.
index.rst named the documentation directory 'docs/'; it is 'doc/', as everywhere else.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
A new topic "Workflow Hierarchy" lists the jobs of CompletePipeline.yml in job order, each with the reusable workflow
it calls, and the actions that workflow uses; composite actions are followed into their own steps. It is generated
from the YAML files.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
@pytooling-claude
pytooling-claude Bot requested a review from Paebbels as a code owner October 9, 2026 19:47
@pytooling-claude pytooling-claude Bot added Documentation Improvements or additions to documentation Release Release Pull Requests JobTmpl: CompletePipeline JobTmpl: ApplicationTesting labels Oct 9, 2026
@codacy-production

codacy-production Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity · 0 duplication

Metric Results
Complexity 0
Duplication 0

View in Codacy

🟢 Coverage 100.00% diff coverage · +30.46% coverage variation

Metric Results
Coverage variation ✅ +30.46% coverage variation (-1.00%)
Diff coverage ✅ 100.00% diff coverage

View coverage diff in Codacy

Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (c96e41c) 45 28 62.22%
Head commit (c13a6e3) 41 (-4) 38 (+10) 92.68% (+30.46%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#299) 1 1 100.00%

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

Paebbels and others added 3 commits October 11, 2026 12:46

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants