Skip to content

Updating r9 from v9.0.0 - #302

Merged
Paebbels merged 32 commits into
r9from
update/r9
Oct 11, 2026
Merged

Paebbels merged 32 commits into
r9from
update/r9

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; rendered with pyTooling.Sphinx, hierarchies as trees;
    GoatCounter page views.

Important

Field-tested on dev with Python 3.15.0 and PyPy 8.0 (3.12) on the runners. ApplicationTesting's artifact
download needs pyTooling/download-artifact v1.11.0 (@v8): before it, a pattern matching one artifact put the files
directly into artifacts_directory.

The PDF documentation needs pytooling/miktex:sphinx of pyTooling/MiKTeX v1.7.0: it maps the icons pyTooling.Sphinx
and the trees write (📄, 🧩, ...) to the emoji font; latexmk fails on missing characters.

✨ 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 - also a single matching one (pyTooling/download-artifact v1.11.0).
    • 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.16 isn't field-tested yet: 3.16.0a1 is due 2026-10-16. A job asking for 3.16 fails at setup until
    actions/python-versions lists it; no default list contains 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.
  • The documentation requires pyTooling, pyTooling.Sphinx and pyEDAA.Reports from GitHub (@dev) until they are
    released; the doc extra of myPackage carries that URL requirement (Documentation rendered with pyTooling.Sphinx instead of sphinx-reports #297).
  • The Dependencies dropdown on the CompletePipeline page is outdated against the YAML files; in the PDF, trees have
    no icons (Hierarchies in the documentation drawn by the 'tree' directive #298).
  • 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


Published from Pipeline workflow triggered by github-actions[bot] on 2026-10-11 17:26:50 UTC.

This automatic release was created by pyTooling/Actions::PublishReleaseNotes.yml

claude-code and others added 30 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>
…tory.

pyTooling/upload-artifact keeps the uploaded file's path, 'report/Example.txt'.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Automatically written by the 'UpdateVersionBranch' workflow.
@pytooling-claude
pytooling-claude Bot requested a review from Paebbels as a code owner October 11, 2026 17:27
@codacy-production

Copy link
Copy Markdown

Not up to standards ⛔

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.

'r9' was created at 'r8' (v8.5.2, references rewritten to '@r8'); the conflicting reference lines keep '@r9'
(v9.0.0). From 'r8' remains the documentation example 'releaser@r4' (doc/Action/Releaser.rst), as on 'r6' to 'r8'.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
@pytooling-claude

Copy link
Copy Markdown
Author

Merged r9 into update/r9 by hand (af14396), because the pull-request conflicted in 10 workflow files:

  • UpdateVersionBranch created r9 at r8 (v8.5.2), whose references are rewritten to @r8 ("Updating r8 from v8.5.2", Updating r8 from v8.5.2 #289).
  • update/r9 is v9.0.0 with the references rewritten to @r9, so both sides changed the same lines.

Resolution: every conflicting reference keeps @r9. Compared with update/r9, the merge adds one line from r8: the documentation example pyTooling/Actions/releaser@r4 in doc/Action/Releaser.rst, as on r6 to r8 (main documents releaser@r0).

Until this is merged, @r9 serves v8.5.2.

@Paebbels
Paebbels merged commit c81ed1c into r9 Oct 11, 2026
6 of 7 checks passed
@Paebbels
Paebbels deleted the update/r9 branch October 11, 2026 20:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants