From 24dd24cf086defed09cf88c499530bc8c6553c84 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 2 Oct 2026 21:12:04 +0000 Subject: [PATCH 01/19] v9.0.0 [skip ci] Co-Authored-By: Patrick Lehmann --- myFramework/Extension/__init__.py | 2 +- myPackage/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/myFramework/Extension/__init__.py b/myFramework/Extension/__init__.py index 5026b76a..24cba4ce 100644 --- a/myFramework/Extension/__init__.py +++ b/myFramework/Extension/__init__.py @@ -36,7 +36,7 @@ __email__ = "Paebbels@gmail.com" __copyright__ = "2017-2026, Patrick Lehmann" __license__ = "Apache License, Version 2.0" -__version__ = "8.5.2" +__version__ = "9.0.0" __keywords__ = ["GitHub Actions"] __project_url__ = "https://github.com/pyTooling/Actions" __documentation_url__ = "https://pyTooling.github.io/Actions" diff --git a/myPackage/__init__.py b/myPackage/__init__.py index 946a1c04..e5cb15db 100644 --- a/myPackage/__init__.py +++ b/myPackage/__init__.py @@ -36,7 +36,7 @@ __email__ = "Paebbels@gmail.com" __copyright__ = "2017-2026, Patrick Lehmann" __license__ = "Apache License, Version 2.0" -__version__ = "8.5.2" +__version__ = "9.0.0" __keywords__ = ["GitHub Actions"] __project_url__ = "https://github.com/pyTooling/Actions" __documentation_url__ = "https://pyTooling.github.io/Actions" From be39e68e7bafdfcfa99e3411f382030e9f3b626c Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 2 Oct 2026 21:14:03 +0000 Subject: [PATCH 02/19] Remove the MSYS2 runtime 'mingw32' 'Parameters' warns when 'system_list' still names it and creates no job for it. Co-Authored-By: Patrick Lehmann --- .github/workflows/Parameters.yml | 4 +++- .github/workflows/_Checking_Parameters.yml | 4 ++-- doc/JobTemplate/Setup/Parameters.rst | 4 +--- doc/JobTemplate/SystemList.rst | 4 +--- myFramework/Extension/__init__.py | 2 -- myPackage/__init__.py | 2 -- tests/platform/Specific.py | 6 ------ tests/python_jobs.py | 1 - 8 files changed, 7 insertions(+), 20 deletions(-) diff --git a/.github/workflows/Parameters.yml b/.github/workflows/Parameters.yml index 001165b7..794fb94f 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -380,6 +380,9 @@ jobs: print("::warning title=Deprecated::Support for Python 3.9 ended in 2025.10.") if "msys2" in systems: print("::warning title=Deprecated::System 'msys2' will be replaced by 'mingw64'.") + for removed in ("mingw32", ): + if removed in systems: + print(f"::warning title=Removed::System '{removed}' isn't supported anymore.") if currentAlphaVersion in versions: print(f"::notice title=Experimental::Python {currentAlphaVersion} ({currentAlphaRelease}) is a pre-release.") for disable in disabled: @@ -412,7 +415,6 @@ jobs: # Runtimes provided by MSYS2 "runtime": { "msys": { "icon": "๐ŸชŸ๐ŸŸช", "name": "Windows+MSYS2 (x86-64) - MSYS" }, - "mingw32": { "icon": "๐ŸชŸโฌ›", "name": "Windows+MSYS2 (x86-64) - MinGW32" }, "mingw64": { "icon": "๐ŸชŸ๐ŸŸฆ", "name": "Windows+MSYS2 (x86-64) - MinGW64" }, "clang32": { "icon": "๐ŸชŸ๐ŸŸซ", "name": "Windows+MSYS2 (x86-64) - Clang32" }, "clang64": { "icon": "๐ŸชŸ๐ŸŸง", "name": "Windows+MSYS2 (x86-64) - Clang64" }, diff --git a/.github/workflows/_Checking_Parameters.yml b/.github/workflows/_Checking_Parameters.yml index 99eb8dc7..ddb38e93 100644 --- a/.github/workflows/_Checking_Parameters.yml +++ b/.github/workflows/_Checking_Parameters.yml @@ -30,7 +30,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - system_list: "windows mingw32 mingw64" + system_list: "windows mingw64 ucrt64" Params_Include: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev @@ -144,7 +144,7 @@ jobs: expected-python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' expected-systems: '["windows"]' expected-exclude-jobs: '[]' - expected-include-jobs: '["mingw32:3.14", "mingw64:3.14"]' + expected-include-jobs: '["mingw64:3.14", "ucrt64:3.14"]' generated-default-version: ${{ needs.Params_Systems.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_Systems.outputs.python_jobs }} diff --git a/doc/JobTemplate/Setup/Parameters.rst b/doc/JobTemplate/Setup/Parameters.rst index baece64c..493c1ce2 100644 --- a/doc/JobTemplate/Setup/Parameters.rst +++ b/doc/JobTemplate/Setup/Parameters.rst @@ -136,7 +136,7 @@ Complex Example package_namespace: myFramework package_name: Extension python_version_list: '3.13' - system_list: 'ubuntu windows macos macos-arm mingw32 mingw64 clang64 ucrt64' + system_list: 'ubuntu windows macos macos-arm mingw64 clang64 ucrt64' +--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ | Version | 3.9 ๐Ÿ”ด | 3.10 ๐ŸŸ  | 3.11 ๐ŸŸก | 3.12 ๐ŸŸข | 3.13 ๐ŸŸข | 3.14.b1 ๐ŸŸฃ | pypy-3.9 ๐Ÿ”ด | pypy-3.10 ๐ŸŸ  | pypy-3.11 ๐ŸŸก | @@ -151,8 +151,6 @@ Complex Example +--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ | Windows Server ๐ŸชŸ + MSYS ๐ŸŸช | | | | | | | | | | +--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ -| Windows Server ๐ŸชŸ + MinGW32 โฌ› | | | | | | | | | | -+--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ | Windows Server ๐ŸชŸ + MinGW64 ๐ŸŸฆ | | | | mingw64:3.12 | | | | | | +--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ | Windows Server ๐ŸชŸ + Clang32 ๐ŸŸซ | | | | | | | | | | diff --git a/doc/JobTemplate/SystemList.rst b/doc/JobTemplate/SystemList.rst index 8dee68d9..7dabc364 100644 --- a/doc/JobTemplate/SystemList.rst +++ b/doc/JobTemplate/SystemList.rst @@ -1,7 +1,7 @@ .. rubric:: Possible values * Native systems: ``ubuntu``, ``ubuntu-arm``, ``windows``, ``windows-arm``, ``macos``, ``macos-arm`` -* MSYS2 runtimes: ``msys``, ``mingw32``, ``mingw64``, ``clang32``, ``clang64``, ``ucrt64`` +* MSYS2 runtimes: ``msys``, ``mingw64``, ``clang32``, ``clang64``, ``ucrt64`` The image used per system is configurable via the ``*_image`` parameters of :ref:`JOBTMPL/Parameters`. The versions listed below are the defaults. @@ -23,8 +23,6 @@ The versions listed below are the defaults. +------+-------------+-----------------------------+------------------------------+--------------------------------------+ | ๐ŸชŸ๐ŸŸช | msys | MSYS2 - MSYS | runtime of ``windows_image`` | | +------+-------------+-----------------------------+------------------------------+--------------------------------------+ -| ๐ŸชŸโฌ› | mingw32 | MSYS2 - MinGW32 | runtime of ``windows_image`` | deprecated | -+------+-------------+-----------------------------+------------------------------+--------------------------------------+ | ๐ŸชŸ๐ŸŸฆ | mingw64 | MSYS2 - MinGW64 | runtime of ``windows_image`` | on decline, superseded by ``ucrt64`` | +------+-------------+-----------------------------+------------------------------+--------------------------------------+ | ๐ŸชŸ๐ŸŸซ | clang32 | MSYS2 - Clang32 | runtime of ``windows_image`` | deprecated | diff --git a/myFramework/Extension/__init__.py b/myFramework/Extension/__init__.py index 24cba4ce..7ea40c67 100644 --- a/myFramework/Extension/__init__.py +++ b/myFramework/Extension/__init__.py @@ -100,8 +100,6 @@ def __init__(self) -> None: self._value += 3 elif platform.IsMSYSOnWindows: self._value += 11 - elif platform.IsMinGW32OnWindows: - self._value += 12 elif platform.IsMinGW64OnWindows: self._value += 13 elif platform.IsUCRT64OnWindows: diff --git a/myPackage/__init__.py b/myPackage/__init__.py index e5cb15db..70adc189 100644 --- a/myPackage/__init__.py +++ b/myPackage/__init__.py @@ -103,8 +103,6 @@ def __init__(self) -> None: self._value += 3 elif platform.IsMSYSOnWindows: self._value += 11 - elif platform.IsMinGW32OnWindows: - self._value += 12 elif platform.IsMinGW64OnWindows: self._value += 13 elif platform.IsUCRT64OnWindows: diff --git a/tests/platform/Specific.py b/tests/platform/Specific.py index 744939e2..3dc8c16a 100644 --- a/tests/platform/Specific.py +++ b/tests/platform/Specific.py @@ -67,12 +67,6 @@ def test_ApplicationOnMSYS2OnWindows(self) -> None: self.assertEqual(11, app.Value) - @mark.skipif(not CurrentPlatform.IsMinGW32OnWindows, reason="Skipped, if current platform isn't MinGW32 on Windows.") - def test_ApplicationOnMinGW32OnWindows(self) -> None: - app = Application() - - self.assertEqual(12, app.Value) - @mark.skipif(not CurrentPlatform.IsMinGW64OnWindows, reason="Skipped, if current platform isn't MinGW64 on Windows.") def test_ApplicationOnMinGW64OnWindows(self) -> None: app = Application() diff --git a/tests/python_jobs.py b/tests/python_jobs.py index c9d90b7f..06c60f11 100644 --- a/tests/python_jobs.py +++ b/tests/python_jobs.py @@ -76,7 +76,6 @@ # Runtimes provided by MSYS2 "runtime": { "msys": {"icon": "๐ŸชŸ๐ŸŸช", "name": "Windows+MSYS2 (x86-64) - MSYS"}, - "mingw32": {"icon": "๐ŸชŸโฌ›", "name": "Windows+MSYS2 (x86-64) - MinGW32"}, "mingw64": {"icon": "๐ŸชŸ๐ŸŸฆ", "name": "Windows+MSYS2 (x86-64) - MinGW64"}, "clang32": {"icon": "๐ŸชŸ๐ŸŸซ", "name": "Windows+MSYS2 (x86-64) - Clang32"}, "clang64": {"icon": "๐ŸชŸ๐ŸŸง", "name": "Windows+MSYS2 (x86-64) - Clang64"}, From 25fa0f9cbce0e54a434b879711c0b0bd467ac692 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 2 Oct 2026 21:15:31 +0000 Subject: [PATCH 03/19] Remove the MSYS2 runtime 'mingw64' 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 --- .../actions/ComputeRequirements/action.yml | 2 +- .github/workflows/ApplicationTesting.yml | 11 +---------- .github/workflows/CompletePipeline.yml | 2 +- .github/workflows/Parameters.yml | 7 +++---- .github/workflows/UnitTesting.yml | 11 +---------- .github/workflows/_Checking_JobTemplates.yml | 2 +- .github/workflows/_Checking_Parameters.yml | 8 ++++---- doc/JobTemplate/AllInOne/CompletePipeline.rst | 4 ++-- doc/JobTemplate/Setup/Parameters.rst | 15 ++++++--------- doc/JobTemplate/SystemList.rst | 4 +--- .../Testing/ApplicationTesting.rst | 15 +-------------- doc/JobTemplate/Testing/UnitTesting.rst | 19 ++----------------- myFramework/Extension/__init__.py | 2 -- myPackage/__init__.py | 2 -- tests/platform/Specific.py | 6 ------ tests/python_jobs.py | 5 ++--- 16 files changed, 26 insertions(+), 89 deletions(-) diff --git a/.github/actions/ComputeRequirements/action.yml b/.github/actions/ComputeRequirements/action.yml index c903a375..d2be1237 100644 --- a/.github/actions/ComputeRequirements/action.yml +++ b/.github/actions/ComputeRequirements/action.yml @@ -32,7 +32,7 @@ inputs: required: true type: string mingw_requirements: - description: "Override of 'requirements' for MSYS2 (MINGW64). If empty, 'requirements' is used on MSYS2 too." + description: "Override of 'requirements' for MSYS2. If empty, 'requirements' is used on MSYS2 too." required: false default: '' type: string diff --git a/.github/workflows/ApplicationTesting.yml b/.github/workflows/ApplicationTesting.yml index 118b7a08..381d5461 100644 --- a/.github/workflows/ApplicationTesting.yml +++ b/.github/workflows/ApplicationTesting.yml @@ -55,7 +55,7 @@ on: default: '-r ./requirements.txt' type: string mingw_requirements: - description: 'Override Python dependencies to be installed through pip on MSYS2 (MINGW64) only.' + description: 'Override Python dependencies to be installed through pip on MSYS2 only.' required: false default: '' type: string @@ -84,11 +84,6 @@ on: required: false default: '' type: string - mingw64_before_script: - description: 'Scripts to execute before pytest on Windows (x64-64) within MSYS2 MinGW64.' - required: false - default: '' - type: string ucrt64_before_script: description: 'Scripts to execute before pytest on Windows (x64-64) within MSYS2 UCRT64.' required: false @@ -234,10 +229,6 @@ jobs: if: matrix.system == 'windows-arm' && inputs.windows_arm_before_script != '' run: ${{ inputs.windows_arm_before_script }} - - name: ๐ŸชŸ๐ŸŸฆ Windows (x86-64) + MinGW64 before scripts - if: matrix.system == 'msys2' && matrix.runtime == 'MINGW64' && inputs.mingw64_before_script != '' - run: ${{ inputs.mingw64_before_script }} - - name: ๐ŸชŸ๐ŸŸจ Windows (x86-64) + UCRT64 before scripts if: matrix.system == 'msys2' && matrix.runtime == 'UCRT64' && inputs.ucrt64_before_script != '' run: ${{ inputs.ucrt64_before_script }} diff --git a/.github/workflows/CompletePipeline.yml b/.github/workflows/CompletePipeline.yml index ae466342..c4b6eb0d 100644 --- a/.github/workflows/CompletePipeline.yml +++ b/.github/workflows/CompletePipeline.yml @@ -51,7 +51,7 @@ on: unittest_system_list: description: 'Space separated list of systems to run tests on.' required: false - default: 'ubuntu ubuntu-arm windows windows-arm macos macos-arm mingw64 ucrt64' + default: 'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64' type: string unittest_include_list: description: 'Space separated list of system:python items to be included into the list of test.' diff --git a/.github/workflows/Parameters.yml b/.github/workflows/Parameters.yml index 794fb94f..b2ccd168 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -63,7 +63,7 @@ on: system_list: description: 'Space separated list of systems to run tests on.' required: false - default: 'ubuntu ubuntu-arm windows windows-arm macos macos-arm mingw64 ucrt64' + default: 'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64' type: string include_list: description: 'Space separated list of system:python items to be included into the list of test.' @@ -379,8 +379,8 @@ jobs: if "3.9" in versions: print("::warning title=Deprecated::Support for Python 3.9 ended in 2025.10.") if "msys2" in systems: - print("::warning title=Deprecated::System 'msys2' will be replaced by 'mingw64'.") - for removed in ("mingw32", ): + print("::warning title=Deprecated::System 'msys2' will be replaced by 'ucrt64'.") + for removed in ("mingw32", "mingw64"): if removed in systems: print(f"::warning title=Removed::System '{removed}' isn't supported anymore.") if currentAlphaVersion in versions: @@ -415,7 +415,6 @@ jobs: # Runtimes provided by MSYS2 "runtime": { "msys": { "icon": "๐ŸชŸ๐ŸŸช", "name": "Windows+MSYS2 (x86-64) - MSYS" }, - "mingw64": { "icon": "๐ŸชŸ๐ŸŸฆ", "name": "Windows+MSYS2 (x86-64) - MinGW64" }, "clang32": { "icon": "๐ŸชŸ๐ŸŸซ", "name": "Windows+MSYS2 (x86-64) - Clang32" }, "clang64": { "icon": "๐ŸชŸ๐ŸŸง", "name": "Windows+MSYS2 (x86-64) - Clang64" }, "ucrt64": { "icon": "๐ŸชŸ๐ŸŸจ", "name": "Windows+MSYS2 (x86-64) - UCRT64" }, diff --git a/.github/workflows/UnitTesting.yml b/.github/workflows/UnitTesting.yml index f3bef88e..81a30392 100644 --- a/.github/workflows/UnitTesting.yml +++ b/.github/workflows/UnitTesting.yml @@ -50,7 +50,7 @@ on: default: '-r ./requirements.txt' type: string mingw_requirements: - description: 'Override Python dependencies to be installed through pip on MSYS2 (MINGW64) only.' + description: 'Override Python dependencies to be installed through pip on MSYS2 only.' required: false default: '' type: string @@ -79,11 +79,6 @@ on: required: false default: '' type: string - mingw64_before_script: - description: 'Scripts to execute before pytest on Windows (x64-64) within MSYS2 MinGW64.' - required: false - default: '' - type: string ucrt64_before_script: description: 'Scripts to execute before pytest on Windows (x64-64) within MSYS2 UCRT64.' required: false @@ -288,10 +283,6 @@ jobs: if: matrix.system == 'windows-arm' && inputs.windows_arm_before_script != '' run: ${{ inputs.windows_arm_before_script }} - - name: ๐ŸชŸ๐ŸŸฆ Windows (x86-64) + MinGW64 before scripts - if: matrix.system == 'msys2' && matrix.runtime == 'MINGW64' && inputs.mingw64_before_script != '' - run: ${{ inputs.mingw64_before_script }} - - name: ๐ŸชŸ๐ŸŸจ Windows (x86-64) + UCRT64 before scripts if: matrix.system == 'msys2' && matrix.runtime == 'UCRT64' && inputs.ucrt64_before_script != '' run: ${{ inputs.ucrt64_before_script }} diff --git a/.github/workflows/_Checking_JobTemplates.yml b/.github/workflows/_Checking_JobTemplates.yml index 9a8636f1..725ada5c 100644 --- a/.github/workflows/_Checking_JobTemplates.yml +++ b/.github/workflows/_Checking_JobTemplates.yml @@ -66,7 +66,7 @@ jobs: package_name: 'myPackage' name: 'Platform' python_version_list: '' - system_list: 'ubuntu ubuntu-arm windows windows-arm macos mingw64 clang64 ucrt64' + system_list: 'ubuntu ubuntu-arm windows windows-arm macos clang64 ucrt64' documentation_steps: 'none' AppTestingParams: diff --git a/.github/workflows/_Checking_Parameters.yml b/.github/workflows/_Checking_Parameters.yml index ddb38e93..71cf7f93 100644 --- a/.github/workflows/_Checking_Parameters.yml +++ b/.github/workflows/_Checking_Parameters.yml @@ -30,7 +30,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - system_list: "windows mingw64 ucrt64" + system_list: "windows clang64 ucrt64" Params_Include: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev @@ -94,7 +94,7 @@ jobs: expected-python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' expected-systems: '["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"]' expected-exclude-jobs: '["windows-arm:3.10"]' - expected-include-jobs: '["mingw64:3.14", "ucrt64:3.14"]' + expected-include-jobs: '["ucrt64:3.14"]' generated-default-version: ${{ needs.Params_Default.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_Default.outputs.python_jobs }} @@ -122,7 +122,7 @@ jobs: expected-python-versions: '["3.12", "3.13", "pypy-3.10", "pypy-3.11"]' expected-systems: '["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"]' expected-exclude-jobs: '["windows-arm:pypy-3.10", "windows-arm:pypy-3.11"]' - expected-include-jobs: '["mingw64:3.14", "ucrt64:3.14"]' + expected-include-jobs: '["ucrt64:3.14"]' generated-default-version: ${{ needs.Params_PythonVersions.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_PythonVersions.outputs.python_jobs }} @@ -144,7 +144,7 @@ jobs: expected-python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' expected-systems: '["windows"]' expected-exclude-jobs: '[]' - expected-include-jobs: '["mingw64:3.14", "ucrt64:3.14"]' + expected-include-jobs: '["clang64:3.14", "ucrt64:3.14"]' generated-default-version: ${{ needs.Params_Systems.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_Systems.outputs.python_jobs }} diff --git a/doc/JobTemplate/AllInOne/CompletePipeline.rst b/doc/JobTemplate/AllInOne/CompletePipeline.rst index ac6bf3da..2c5b8b0f 100644 --- a/doc/JobTemplate/AllInOne/CompletePipeline.rst +++ b/doc/JobTemplate/AllInOne/CompletePipeline.rst @@ -433,7 +433,7 @@ Parameter Summary +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_python_version_list` | no | string | ``'3.10 3.11 3.12 3.13 3.14'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/unittest_system_list` | no | string | ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm mingw64 ucrt64'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/unittest_system_list` | no | string | ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_include_list` | no | string | ``''`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -664,7 +664,7 @@ unittest_system_list :Type: string :Required: no -:Default Value: ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm mingw64 ucrt64'`` +:Default Value: ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64'`` :Possible Values: A space separated list of system names. :Description: The list of space-separated systems used for unit testing. diff --git a/doc/JobTemplate/Setup/Parameters.rst b/doc/JobTemplate/Setup/Parameters.rst index 493c1ce2..8eb447a6 100644 --- a/doc/JobTemplate/Setup/Parameters.rst +++ b/doc/JobTemplate/Setup/Parameters.rst @@ -19,7 +19,7 @@ It generates output parameters containing a list of artifact names and a job mat * architecture (x64-64, aarch64) * Python versions (3.9, 3.10, ..., 3.13), * Python implementation (CPython, PyPy), and - * environments (Native, MinGW64, UCRT64, ...). + * environments (Native, UCRT64, ...). * Provide a (default) Python version for other jobs. @@ -96,7 +96,7 @@ Complex Example The following instantiation example creates 3 jobs from the same template, but with differing input parameters. The first ``UnitTestingParams`` job might be used to create a job matrix of unit tests. It creates the cross of - default systems (Windows, Ubuntu, macOS, macOS-ARM, MinGW64, UCRT64) and the given list of Python versions + default systems (Windows, Ubuntu, macOS, macOS-ARM, UCRT64) and the given list of Python versions including some mypy versions. In addition a list of excludes (marked as :deletion:`deletions`) and includes (marked as :addition:`additions`) is handed over resulting in the following combinations. @@ -118,7 +118,7 @@ Complex Example package_namespace: myFramework package_name: Extension python_version_list: '3.9 3.10 3.11 3.12 pypy-3.10 pypy-3.11' - system_list: 'ubuntu windows macos macos-arm mingw64 ucrt64' + system_list: 'ubuntu windows macos macos-arm ucrt64' include_list: 'ubuntu:3.13 macos:3.13 macos-arm:3.13' exclude_list: 'windows:pypy-3.10 windows:pypy-3.11' @@ -136,7 +136,7 @@ Complex Example package_namespace: myFramework package_name: Extension python_version_list: '3.13' - system_list: 'ubuntu windows macos macos-arm mingw64 clang64 ucrt64' + system_list: 'ubuntu windows macos macos-arm clang64 ucrt64' +--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ | Version | 3.9 ๐Ÿ”ด | 3.10 ๐ŸŸ  | 3.11 ๐ŸŸก | 3.12 ๐ŸŸข | 3.13 ๐ŸŸข | 3.14.b1 ๐ŸŸฃ | pypy-3.9 ๐Ÿ”ด | pypy-3.10 ๐ŸŸ  | pypy-3.11 ๐ŸŸก | @@ -151,8 +151,6 @@ Complex Example +--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ | Windows Server ๐ŸชŸ + MSYS ๐ŸŸช | | | | | | | | | | +--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ -| Windows Server ๐ŸชŸ + MinGW64 ๐ŸŸฆ | | | | mingw64:3.12 | | | | | | -+--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ | Windows Server ๐ŸชŸ + Clang32 ๐ŸŸซ | | | | | | | | | | +--------------------------------+----------------+-----------------+-----------------+-----------------+----------------------------+------------+-------------+-------------------------------+-------------------------------+ | Windows Server ๐ŸชŸ + Clang64 ๐ŸŸง | | | | | | | | | | @@ -185,7 +183,7 @@ Parameter Summary +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/python_version_list` | no | string | ``'3.10 3.11 3.12 3.13 3.14'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/Parameters/Input/system_list` | no | string | ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm mingw64 ucrt64'`` | +| :ref:`JOBTMPL/Parameters/Input/system_list` | no | string | ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/include_list` | no | string | ``''`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -411,7 +409,7 @@ system_list :Type: string :Required: no -:Default Value: ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm mingw64 ucrt64'`` +:Default Value: ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64'`` :Possible Values: A space separated list of system names. :Description: The list of space-separated systems used for application testing. @@ -804,7 +802,6 @@ python_jobs {"sysicon": "๐Ÿ", "system": "macos-arm", "runs-on": "macos-15", "runtime": "native", "shell": "bash", "pyicon": "๐ŸŸก", "python": "3.11", "envname": "macOS (aarch64)" }, {"sysicon": "๐Ÿ", "system": "macos-arm", "runs-on": "macos-15", "runtime": "native", "shell": "bash", "pyicon": "๐ŸŸข", "python": "3.12", "envname": "macOS (aarch64)" }, {"sysicon": "๐Ÿ", "system": "macos-arm", "runs-on": "macos-15", "runtime": "native", "shell": "bash", "pyicon": "๐ŸŸข", "python": "3.13", "envname": "macOS (aarch64)" }, - {"sysicon": "๐ŸชŸ๐ŸŸฆ", "system": "msys2", "runs-on": "windows-2025", "runtime": "MINGW64", "shell": "msys2 {0}", "pyicon": "๐ŸŸข", "python": "3.12", "envname": "Windows+MSYS2 (x86-64) - MinGW64"}, {"sysicon": "๐ŸชŸ๐ŸŸจ", "system": "msys2", "runs-on": "windows-2025", "runtime": "UCRT64", "shell": "msys2 {0}", "pyicon": "๐ŸŸข", "python": "3.12", "envname": "Windows+MSYS2 (x86-64) - UCRT64" } ] diff --git a/doc/JobTemplate/SystemList.rst b/doc/JobTemplate/SystemList.rst index 7dabc364..ac587ef3 100644 --- a/doc/JobTemplate/SystemList.rst +++ b/doc/JobTemplate/SystemList.rst @@ -1,7 +1,7 @@ .. rubric:: Possible values * Native systems: ``ubuntu``, ``ubuntu-arm``, ``windows``, ``windows-arm``, ``macos``, ``macos-arm`` -* MSYS2 runtimes: ``msys``, ``mingw64``, ``clang32``, ``clang64``, ``ucrt64`` +* MSYS2 runtimes: ``msys``, ``clang32``, ``clang64``, ``ucrt64`` The image used per system is configurable via the ``*_image`` parameters of :ref:`JOBTMPL/Parameters`. The versions listed below are the defaults. @@ -23,8 +23,6 @@ The versions listed below are the defaults. +------+-------------+-----------------------------+------------------------------+--------------------------------------+ | ๐ŸชŸ๐ŸŸช | msys | MSYS2 - MSYS | runtime of ``windows_image`` | | +------+-------------+-----------------------------+------------------------------+--------------------------------------+ -| ๐ŸชŸ๐ŸŸฆ | mingw64 | MSYS2 - MinGW64 | runtime of ``windows_image`` | on decline, superseded by ``ucrt64`` | -+------+-------------+-----------------------------+------------------------------+--------------------------------------+ | ๐ŸชŸ๐ŸŸซ | clang32 | MSYS2 - Clang32 | runtime of ``windows_image`` | deprecated | +------+-------------+-----------------------------+------------------------------+--------------------------------------+ | ๐ŸชŸ๐ŸŸง | clang64 | MSYS2 - Clang64 | runtime of ``windows_image`` | | diff --git a/doc/JobTemplate/Testing/ApplicationTesting.rst b/doc/JobTemplate/Testing/ApplicationTesting.rst index 7539d43c..2dceb5b1 100644 --- a/doc/JobTemplate/Testing/ApplicationTesting.rst +++ b/doc/JobTemplate/Testing/ApplicationTesting.rst @@ -156,8 +156,6 @@ Parameter Summary +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/ApplicationTesting/Input/windows_arm_before_script` | no | string | ``''`` | +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`JOBTMPL/ApplicationTesting/Input/mingw64_before_script` | no | string | ``''`` | -+-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/ApplicationTesting/Input/ucrt64_before_script` | no | string | ``''`` | +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/ApplicationTesting/Input/root_directory` | no | string | ``''`` | @@ -292,7 +290,7 @@ mingw_requirements :Required: no :Default Value: ``''`` :Possible Values: Any valid list of parameters for ``pip install``. -:Description: Overrides :ref:`JOBTMPL/ApplicationTesting/Input/requirements` on MSYS2 (MinGW64, UCRT64) only. |br| +:Description: Overrides :ref:`JOBTMPL/ApplicationTesting/Input/requirements` on MSYS2 only. |br| MSYS2 provides some Python packages through *pacboy*, so the pip requirements often differ there. |br| The value is resolved and its existence checked exactly like :ref:`JOBTMPL/ApplicationTesting/Input/requirements`. |br| @@ -353,17 +351,6 @@ windows_arm_before_script :Possible Values: Any valid PowerShell script. :Description: Scripts to execute on Windows (aarch64) before *pytest* is started. -.. _JOBTMPL/ApplicationTesting/Input/mingw64_before_script: - -mingw64_before_script -===================== - -:Type: string -:Required: no -:Default Value: ``''`` -:Possible Values: Any valid Bash script. -:Description: Scripts to execute on Windows within MSYS2 MinGW64 before *pytest* is started. - .. _JOBTMPL/ApplicationTesting/Input/ucrt64_before_script: ucrt64_before_script diff --git a/doc/JobTemplate/Testing/UnitTesting.rst b/doc/JobTemplate/Testing/UnitTesting.rst index 5017a533..ec147691 100644 --- a/doc/JobTemplate/Testing/UnitTesting.rst +++ b/doc/JobTemplate/Testing/UnitTesting.rst @@ -165,8 +165,6 @@ Parameter Summary +------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/UnitTesting/Input/windows_arm_before_script` | no | string | ``''`` | +------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`JOBTMPL/UnitTesting/Input/mingw64_before_script` | no | string | ``''`` | -+------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/UnitTesting/Input/ucrt64_before_script` | no | string | ``''`` | +------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/UnitTesting/Input/root_directory` | no | string | ``'.'`` | @@ -282,7 +280,7 @@ pacboy Packages are specified as a space separated list like ``'python-lxml:p python-numpy:p'``. :Description: Additional MSYS2 system dependencies to be installed through *pacboy* (*pacman*). |br| Usually, Python packages start with ``python-``. The suffix ``:p`` ensures pacboy figures out the - correct package repository prefix for MinGW64, UCRT64, ... + correct package repository prefix for UCRT64, Clang64, ... .. note:: @@ -366,7 +364,7 @@ mingw_requirements :Possible Values: Any valid list of parameters for ``pip install``. |br| Either a requirements file can be referenced using ``'-r path/to/requirements.txt'``, or a list of packages can be specified using a space separated list like ``'coverage pytest'``. -:Description: Override Python dependencies to be installed through *pip* in MSYS2 (MinGW64/UCRT64) only. |br| +:Description: Override Python dependencies to be installed through *pip* in MSYS2 only. |br| The value is resolved and its existence checked exactly like :ref:`JOBTMPL/UnitTesting/Input/requirements`. |br| If left empty, :ref:`JOBTMPL/UnitTesting/Input/requirements` is installed on MSYS2 as well. @@ -434,19 +432,6 @@ windows_arm_before_script :Possible Values: Any valid PowerShell script. :Description: Scripts to execute on Windows (aarch64) before *pytest* is started. -.. _JOBTMPL/UnitTesting/Input/mingw64_before_script: - -mingw64_before_script -===================== - -:Type: string -:Required: no -:Default Value: ``''`` -:Possible Values: Any valid *Bash* instructions as single-line or multi-line string suitable for MinGW64 on Windows. -:Description: These optional *Bash* instructions for MinGW64 on Windows are executed after setting up the - environment and installing the platform specific dependencies and before running the unit test. - - .. _JOBTMPL/UnitTesting/Input/ucrt64_before_script: ucrt64_before_script diff --git a/myFramework/Extension/__init__.py b/myFramework/Extension/__init__.py index 7ea40c67..459d5a14 100644 --- a/myFramework/Extension/__init__.py +++ b/myFramework/Extension/__init__.py @@ -100,8 +100,6 @@ def __init__(self) -> None: self._value += 3 elif platform.IsMSYSOnWindows: self._value += 11 - elif platform.IsMinGW64OnWindows: - self._value += 13 elif platform.IsUCRT64OnWindows: self._value += 14 elif platform.IsClang32OnWindows: diff --git a/myPackage/__init__.py b/myPackage/__init__.py index 70adc189..8129918d 100644 --- a/myPackage/__init__.py +++ b/myPackage/__init__.py @@ -103,8 +103,6 @@ def __init__(self) -> None: self._value += 3 elif platform.IsMSYSOnWindows: self._value += 11 - elif platform.IsMinGW64OnWindows: - self._value += 13 elif platform.IsUCRT64OnWindows: self._value += 14 elif platform.IsClang32OnWindows: diff --git a/tests/platform/Specific.py b/tests/platform/Specific.py index 3dc8c16a..79a36b61 100644 --- a/tests/platform/Specific.py +++ b/tests/platform/Specific.py @@ -67,12 +67,6 @@ def test_ApplicationOnMSYS2OnWindows(self) -> None: self.assertEqual(11, app.Value) - @mark.skipif(not CurrentPlatform.IsMinGW64OnWindows, reason="Skipped, if current platform isn't MinGW64 on Windows.") - def test_ApplicationOnMinGW64OnWindows(self) -> None: - app = Application() - - self.assertEqual(13, app.Value) - @mark.skipif(not CurrentPlatform.IsUCRT64OnWindows, reason="Skipped, if current platform isn't UCRT64 on Windows.") def test_ApplicationOnURTC64OnWindows(self) -> None: app = Application() diff --git a/tests/python_jobs.py b/tests/python_jobs.py index 06c60f11..4c5e7056 100644 --- a/tests/python_jobs.py +++ b/tests/python_jobs.py @@ -6,7 +6,7 @@ name = "example".strip() python_version = "3.12".strip() -systems = "ubuntu windows macos-arm mingw64 ucrt64".strip() +systems = "ubuntu windows macos-arm ucrt64".strip() versions = "3.8 3.9 3.10 3.11 3.12".strip() include_list = "".strip() exclude_list = "".strip() @@ -44,7 +44,7 @@ if "3.7" in versions: print("::warning title=Deprecated::Support for Python 3.7 ended in 2023.06.27.") if "msys2" in systems: - print("::warning title=Deprecated::System 'msys2' will be replaced by 'mingw64'.") + print("::warning title=Deprecated::System 'msys2' will be replaced by 'ucrt64'.") if currentAlphaVersion in versions: print(f"::notice title=Experimental::Python {currentAlphaVersion} ({currentAlphaRelease}) is a pre-release.") for disable in disabled: @@ -76,7 +76,6 @@ # Runtimes provided by MSYS2 "runtime": { "msys": {"icon": "๐ŸชŸ๐ŸŸช", "name": "Windows+MSYS2 (x86-64) - MSYS"}, - "mingw64": {"icon": "๐ŸชŸ๐ŸŸฆ", "name": "Windows+MSYS2 (x86-64) - MinGW64"}, "clang32": {"icon": "๐ŸชŸ๐ŸŸซ", "name": "Windows+MSYS2 (x86-64) - Clang32"}, "clang64": {"icon": "๐ŸชŸ๐ŸŸง", "name": "Windows+MSYS2 (x86-64) - Clang64"}, "ucrt64": {"icon": "๐ŸชŸ๐ŸŸจ", "name": "Windows+MSYS2 (x86-64) - UCRT64"}, From b109713edb88cabb5c54bcdd0ac66fb4aedd8fba Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 2 Oct 2026 21:17:40 +0000 Subject: [PATCH 04/19] Add PyPy 3.12 ('pypy-3.12', PyPy 8.0) 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 --- .github/workflows/CompletePipeline.yml | 4 ++-- .github/workflows/Parameters.yml | 9 +++++---- .github/workflows/_Checking_JobTemplates.yml | 4 ++-- .github/workflows/_Checking_Parameters.yml | 6 +++--- doc/JobTemplate/AllInOne/CompletePipeline.rst | 8 ++++---- doc/JobTemplate/PythonVersionList.rst | 10 ++++++---- doc/JobTemplate/Setup/Parameters.rst | 4 ++-- 7 files changed, 24 insertions(+), 21 deletions(-) diff --git a/.github/workflows/CompletePipeline.yml b/.github/workflows/CompletePipeline.yml index c4b6eb0d..212abb80 100644 --- a/.github/workflows/CompletePipeline.yml +++ b/.github/workflows/CompletePipeline.yml @@ -66,7 +66,7 @@ on: unittest_disable_list: description: 'Space separated list of system:python items to be disabled from the list of test.' required: false - default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11' + default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12' type: string unittest_parallel: description: 'Number of pytest-xdist workers for unit tests: ''auto'', a number, or ''false'' (serial).' @@ -106,7 +106,7 @@ on: apptest_disable_list: description: 'Space separated list of system:python items to be disabled from the list of test.' required: false - default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11' + default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12' type: string apptest_parallel: description: 'Number of pytest-xdist workers for application tests: ''auto'', a number, or ''false'' (serial).' diff --git a/.github/workflows/Parameters.yml b/.github/workflows/Parameters.yml index b2ccd168..f7000047 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -78,7 +78,7 @@ on: disable_list: description: 'Space separated list of system:python items to be disabled from the list of test.' required: false - default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11' + default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12' type: string ubuntu_image: description: 'The used GitHub Action image for Ubuntu (x86-64) based jobs.' @@ -399,9 +399,10 @@ jobs: "3.13": { "icon": "๐ŸŸข", "until": "2029.10" }, "3.14": { "icon": "๐ŸŸข", "until": "2030.10" }, "3.15": { "icon": "๐ŸŸฃ", "until": "2031.10" }, - "pypy-3.9": { "icon": "โŸฒ๐Ÿ”ด", "until": "????.??" }, - "pypy-3.10": { "icon": "โŸฒ๐ŸŸ ", "until": "????.??" }, - "pypy-3.11": { "icon": "โŸฒ๐ŸŸก", "until": "????.??" }, + "pypy-3.9": { "icon": "โŸฒโšซ", "until": "????.??" }, + "pypy-3.10": { "icon": "โŸฒ๐Ÿ”ด", "until": "????.??" }, + "pypy-3.11": { "icon": "โŸฒ๐ŸŸ ", "until": "????.??" }, + "pypy-3.12": { "icon": "โŸฒ๐ŸŸก", "until": "????.??" }, }, # Runner systems (runner images) supported by GitHub Actions "sys": { diff --git a/.github/workflows/_Checking_JobTemplates.yml b/.github/workflows/_Checking_JobTemplates.yml index 725ada5c..09e8acfd 100644 --- a/.github/workflows/_Checking_JobTemplates.yml +++ b/.github/workflows/_Checking_JobTemplates.yml @@ -56,8 +56,8 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: package_name: 'myPackage' - python_version_list: '3.11 3.12 3.13 3.14 pypy-3.11' - disable_list: 'windows-arm:pypy-3.11' + python_version_list: '3.11 3.12 3.13 3.14 pypy-3.11 pypy-3.12' + disable_list: 'windows-arm:pypy-3.11 windows-arm:pypy-3.12' documentation_steps: 'all' PlatformTestingParams: diff --git a/.github/workflows/_Checking_Parameters.yml b/.github/workflows/_Checking_Parameters.yml index 71cf7f93..9eab15f9 100644 --- a/.github/workflows/_Checking_Parameters.yml +++ b/.github/workflows/_Checking_Parameters.yml @@ -24,7 +24,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.12 3.13 pypy-3.10 pypy-3.11" # py-2, py-1, pypy-1, pypy-0 + python_version_list: "3.12 3.13 pypy-3.11 pypy-3.12" # py-2, py-1, pypy-1, pypy-0 Params_Systems: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev @@ -119,9 +119,9 @@ jobs: uses: ./.github/actions/CheckJobMatrix with: expected-default-version: '3.14' - expected-python-versions: '["3.12", "3.13", "pypy-3.10", "pypy-3.11"]' + expected-python-versions: '["3.12", "3.13", "pypy-3.11", "pypy-3.12"]' expected-systems: '["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"]' - expected-exclude-jobs: '["windows-arm:pypy-3.10", "windows-arm:pypy-3.11"]' + expected-exclude-jobs: '["windows-arm:pypy-3.11", "windows-arm:pypy-3.12"]' expected-include-jobs: '["ucrt64:3.14"]' generated-default-version: ${{ needs.Params_PythonVersions.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_PythonVersions.outputs.python_jobs }} diff --git a/doc/JobTemplate/AllInOne/CompletePipeline.rst b/doc/JobTemplate/AllInOne/CompletePipeline.rst index 2c5b8b0f..0007eaa4 100644 --- a/doc/JobTemplate/AllInOne/CompletePipeline.rst +++ b/doc/JobTemplate/AllInOne/CompletePipeline.rst @@ -439,7 +439,7 @@ Parameter Summary +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/unittest_disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/unittest_disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_parallel` | no | string | ``'auto'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -471,7 +471,7 @@ Parameter Summary +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/apptest_exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/apptest_disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/apptest_disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/apptest_parallel` | no | string | ``'auto'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -708,7 +708,7 @@ unittest_disable_list :Type: string :Required: no -:Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'`` +:Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` :Possible Values: A space separated list of ``:`` tuples. :Description: List of space-separated ``:`` tuples to be temporarily disabled from the list of unittest variants. |br| @@ -817,7 +817,7 @@ apptest_disable_list :Type: string :Required: no -:Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'`` +:Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` :Possible Values: A space separated list of ``:`` tuples. :Description: List of space-separated ``:`` tuples to be temporarily disabled from the list of application test variants. |br| diff --git a/doc/JobTemplate/PythonVersionList.rst b/doc/JobTemplate/PythonVersionList.rst index 24947698..d1aa0603 100644 --- a/doc/JobTemplate/PythonVersionList.rst +++ b/doc/JobTemplate/PythonVersionList.rst @@ -1,7 +1,7 @@ .. rubric:: Possible values * ``3.8``, ``3.9``, ``3.10`` , ``3.11``, ``3.12``, ``3.13``, ``3.14`` -* ``pypy-3.7``, ``pypy-3.8``, ``pypy-3.9``, ``pypy-3.10``, ``pypy-3.11`` +* ``pypy-3.7``, ``pypy-3.8``, ``pypy-3.9``, ``pypy-3.10``, ``pypy-3.11``, ``pypy-3.12`` +------+-----------+------------------+-----------------------------------------------+ | Icon | Version | Maintained until | Comments | @@ -24,9 +24,11 @@ +------+-----------+------------------+-----------------------------------------------+ | โŸฒโšซ | pypy-3.8 | ????.?? | | +------+-----------+------------------+-----------------------------------------------+ -| โŸฒ๐Ÿ”ด | pypy-3.9 | ????.?? | | +| โŸฒโšซ | pypy-3.9 | ????.?? | | +------+-----------+------------------+-----------------------------------------------+ -| โŸฒ๐ŸŸ  | pypy-3.10 | ????.?? | | +| โŸฒ๐Ÿ”ด | pypy-3.10 | ????.?? | | +------+-----------+------------------+-----------------------------------------------+ -| โŸฒ๐ŸŸก | pypy-3.11 | ????.?? | :green:`latest PyPy` | +| โŸฒ๐ŸŸ  | pypy-3.11 | ????.?? | | ++------+-----------+------------------+-----------------------------------------------+ +| โŸฒ๐ŸŸก | pypy-3.12 | ????.?? | :green:`latest PyPy` | +------+-----------+------------------+-----------------------------------------------+ diff --git a/doc/JobTemplate/Setup/Parameters.rst b/doc/JobTemplate/Setup/Parameters.rst index 8eb447a6..220c11c4 100644 --- a/doc/JobTemplate/Setup/Parameters.rst +++ b/doc/JobTemplate/Setup/Parameters.rst @@ -189,7 +189,7 @@ Parameter Summary +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/Parameters/Input/disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'`` | +| :ref:`JOBTMPL/Parameters/Input/disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/ubuntu_image` | no | string | ``'ubuntu-26.04'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -467,7 +467,7 @@ disable_list :Type: string :Required: no -:Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'`` +:Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` :Possible Values: A space separated list of ``:`` tuples. :Description: List of space-separated ``:`` tuples to be temporarily disabled from the list of test variants. |br| From 5694d430c010da65b57c0f3e2eb45d70c91e75d2 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 2 Oct 2026 22:15:10 +0000 Subject: [PATCH 05/19] Remove PyPy 3.9 and 3.10 '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 --- .github/workflows/CompletePipeline.yml | 4 ++-- .github/workflows/Parameters.yml | 4 +--- doc/JobTemplate/AllInOne/CompletePipeline.rst | 8 ++++---- doc/JobTemplate/PythonVersionList.rst | 10 +--------- doc/JobTemplate/Setup/Parameters.rst | 4 ++-- 5 files changed, 10 insertions(+), 20 deletions(-) diff --git a/.github/workflows/CompletePipeline.yml b/.github/workflows/CompletePipeline.yml index 212abb80..ac3ec9f9 100644 --- a/.github/workflows/CompletePipeline.yml +++ b/.github/workflows/CompletePipeline.yml @@ -66,7 +66,7 @@ on: unittest_disable_list: description: 'Space separated list of system:python items to be disabled from the list of test.' required: false - default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12' + default: 'windows-arm:pypy-3.11 windows-arm:pypy-3.12' type: string unittest_parallel: description: 'Number of pytest-xdist workers for unit tests: ''auto'', a number, or ''false'' (serial).' @@ -106,7 +106,7 @@ on: apptest_disable_list: description: 'Space separated list of system:python items to be disabled from the list of test.' required: false - default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12' + default: 'windows-arm:pypy-3.11 windows-arm:pypy-3.12' type: string apptest_parallel: description: 'Number of pytest-xdist workers for application tests: ''auto'', a number, or ''false'' (serial).' diff --git a/.github/workflows/Parameters.yml b/.github/workflows/Parameters.yml index f7000047..1a5363c6 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -78,7 +78,7 @@ on: disable_list: description: 'Space separated list of system:python items to be disabled from the list of test.' required: false - default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12' + default: 'windows-arm:pypy-3.11 windows-arm:pypy-3.12' type: string ubuntu_image: description: 'The used GitHub Action image for Ubuntu (x86-64) based jobs.' @@ -399,8 +399,6 @@ jobs: "3.13": { "icon": "๐ŸŸข", "until": "2029.10" }, "3.14": { "icon": "๐ŸŸข", "until": "2030.10" }, "3.15": { "icon": "๐ŸŸฃ", "until": "2031.10" }, - "pypy-3.9": { "icon": "โŸฒโšซ", "until": "????.??" }, - "pypy-3.10": { "icon": "โŸฒ๐Ÿ”ด", "until": "????.??" }, "pypy-3.11": { "icon": "โŸฒ๐ŸŸ ", "until": "????.??" }, "pypy-3.12": { "icon": "โŸฒ๐ŸŸก", "until": "????.??" }, }, diff --git a/doc/JobTemplate/AllInOne/CompletePipeline.rst b/doc/JobTemplate/AllInOne/CompletePipeline.rst index 0007eaa4..de1bdf76 100644 --- a/doc/JobTemplate/AllInOne/CompletePipeline.rst +++ b/doc/JobTemplate/AllInOne/CompletePipeline.rst @@ -439,7 +439,7 @@ Parameter Summary +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/unittest_disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/unittest_disable_list` | no | string | ``'windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_parallel` | no | string | ``'auto'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -471,7 +471,7 @@ Parameter Summary +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/apptest_exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/apptest_disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/apptest_disable_list` | no | string | ``'windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/apptest_parallel` | no | string | ``'auto'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -708,7 +708,7 @@ unittest_disable_list :Type: string :Required: no -:Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` +:Default Value: ``'windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` :Possible Values: A space separated list of ``:`` tuples. :Description: List of space-separated ``:`` tuples to be temporarily disabled from the list of unittest variants. |br| @@ -817,7 +817,7 @@ apptest_disable_list :Type: string :Required: no -:Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` +:Default Value: ``'windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` :Possible Values: A space separated list of ``:`` tuples. :Description: List of space-separated ``:`` tuples to be temporarily disabled from the list of application test variants. |br| diff --git a/doc/JobTemplate/PythonVersionList.rst b/doc/JobTemplate/PythonVersionList.rst index d1aa0603..e7440abc 100644 --- a/doc/JobTemplate/PythonVersionList.rst +++ b/doc/JobTemplate/PythonVersionList.rst @@ -1,7 +1,7 @@ .. rubric:: Possible values * ``3.8``, ``3.9``, ``3.10`` , ``3.11``, ``3.12``, ``3.13``, ``3.14`` -* ``pypy-3.7``, ``pypy-3.8``, ``pypy-3.9``, ``pypy-3.10``, ``pypy-3.11``, ``pypy-3.12`` +* ``pypy-3.11``, ``pypy-3.12`` +------+-----------+------------------+-----------------------------------------------+ | Icon | Version | Maintained until | Comments | @@ -20,14 +20,6 @@ +------+-----------+------------------+-----------------------------------------------+ | ๐ŸŸฃ | 3.14 | 2030.10 | Python 3.14 alpha, beta (or RC) will be used. | +------+-----------+------------------+-----------------------------------------------+ -| โŸฒโšซ | pypy-3.7 | ????.?? | | -+------+-----------+------------------+-----------------------------------------------+ -| โŸฒโšซ | pypy-3.8 | ????.?? | | -+------+-----------+------------------+-----------------------------------------------+ -| โŸฒโšซ | pypy-3.9 | ????.?? | | -+------+-----------+------------------+-----------------------------------------------+ -| โŸฒ๐Ÿ”ด | pypy-3.10 | ????.?? | | -+------+-----------+------------------+-----------------------------------------------+ | โŸฒ๐ŸŸ  | pypy-3.11 | ????.?? | | +------+-----------+------------------+-----------------------------------------------+ | โŸฒ๐ŸŸก | pypy-3.12 | ????.?? | :green:`latest PyPy` | diff --git a/doc/JobTemplate/Setup/Parameters.rst b/doc/JobTemplate/Setup/Parameters.rst index 220c11c4..033fde1f 100644 --- a/doc/JobTemplate/Setup/Parameters.rst +++ b/doc/JobTemplate/Setup/Parameters.rst @@ -189,7 +189,7 @@ Parameter Summary +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/Parameters/Input/disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +| :ref:`JOBTMPL/Parameters/Input/disable_list` | no | string | ``'windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/ubuntu_image` | no | string | ``'ubuntu-26.04'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -467,7 +467,7 @@ disable_list :Type: string :Required: no -:Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` +:Default Value: ``'windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` :Possible Values: A space separated list of ``:`` tuples. :Description: List of space-separated ``:`` tuples to be temporarily disabled from the list of test variants. |br| From 4b945418419a089bbf0ee2c97f9001fb55c06521 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 2 Oct 2026 22:20:40 +0000 Subject: [PATCH 06/19] Align the CPython rows of the version list with 'Parameters' 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 --- doc/JobTemplate/PythonVersionList.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/JobTemplate/PythonVersionList.rst b/doc/JobTemplate/PythonVersionList.rst index e7440abc..898e3fa3 100644 --- a/doc/JobTemplate/PythonVersionList.rst +++ b/doc/JobTemplate/PythonVersionList.rst @@ -1,24 +1,24 @@ .. rubric:: Possible values -* ``3.8``, ``3.9``, ``3.10`` , ``3.11``, ``3.12``, ``3.13``, ``3.14`` +* ``3.9``, ``3.10``, ``3.11``, ``3.12``, ``3.13``, ``3.14``, ``3.15`` * ``pypy-3.11``, ``pypy-3.12`` +------+-----------+------------------+-----------------------------------------------+ | Icon | Version | Maintained until | Comments | +======+===========+==================+===============================================+ -| โšซ | 3.8 | 2024.10 | :red:`outdated` | +| โšซ | 3.9 | 2025.10 | :red:`outdated` | +------+-----------+------------------+-----------------------------------------------+ -| ๐Ÿ”ด | 3.9 | 2025.10 | | +| ๐Ÿ”ด | 3.10 | 2026.10 | | +------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸ  | 3.10 | 2026.10 | | +| ๐ŸŸ  | 3.11 | 2027.10 | | +------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸก | 3.11 | 2027.10 | | +| ๐ŸŸก | 3.12 | 2028.10 | | +------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸข | 3.12 | 2028.10 | | +| ๐ŸŸข | 3.13 | 2029.10 | | +------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸข | 3.13 | 2029.10 | :green:`latest CPython` | +| ๐ŸŸข | 3.14 | 2030.10 | :green:`latest CPython` | +------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸฃ | 3.14 | 2030.10 | Python 3.14 alpha, beta (or RC) will be used. | +| ๐ŸŸฃ | 3.15 | 2031.10 | Python 3.15 alpha, beta (or RC) will be used. | +------+-----------+------------------+-----------------------------------------------+ | โŸฒ๐ŸŸ  | pypy-3.11 | ????.?? | | +------+-----------+------------------+-----------------------------------------------+ From 229a7515156760cbe4365e144dabc2e34247772d Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 2 Oct 2026 21:24:22 +0000 Subject: [PATCH 07/19] Add Python 3.15, remove Python 3.9 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 --- .github/workflows/CheckCodeQuality.yml | 2 +- .github/workflows/CheckDocumentation.yml | 2 +- .../workflows/CheckMarketplaceMetadata.yml | 2 +- .github/workflows/CheckReleaseVersion.yml | 2 +- .github/workflows/CompletePipeline.yml | 6 ++--- .github/workflows/ExtractConfiguration.yml | 2 +- .github/workflows/Package.yml | 2 +- .github/workflows/Parameters.yml | 23 +++++++++---------- .github/workflows/PublishOnPyPI.yml | 2 +- .github/workflows/SphinxDocumentation.yml | 2 +- .github/workflows/StaticTypeCheck.yml | 2 +- .github/workflows/VerifyDocs.yml | 2 +- .github/workflows/_Checking_JobTemplates.yml | 2 +- .../_Checking_NamespacePackage_Pipeline.yml | 2 +- .github/workflows/_Checking_Parameters.yml | 20 ++++++++-------- .../_Checking_SimplePackage_Pipeline.yml | 4 ++-- doc/JobTemplate/AllInOne/CompletePipeline.rst | 12 +++++----- .../Documentation/SphinxDocumentation.rst | 2 +- doc/JobTemplate/Package/Package.rst | 2 +- doc/JobTemplate/Package/PublishOnPyPI.rst | 2 +- doc/JobTemplate/PythonVersionList.rst | 16 ++++++------- doc/JobTemplate/Quality/CheckCodeQuality.rst | 2 +- .../Quality/CheckDocumentation.rst | 2 +- .../Quality/CheckMarketplaceMetadata.rst | 4 ++-- doc/JobTemplate/Quality/StaticTypeCheck.rst | 2 +- doc/JobTemplate/Quality/VerifyDocs.rst | 4 ++-- .../Release/CheckReleaseVersion.rst | 4 ++-- .../Setup/ExtractConfiguration.rst | 2 +- doc/JobTemplate/Setup/Parameters.rst | 10 ++++---- doc/JobTemplate/_python_version.rst | 2 +- 30 files changed, 70 insertions(+), 73 deletions(-) diff --git a/.github/workflows/CheckCodeQuality.yml b/.github/workflows/CheckCodeQuality.yml index 871ab3ec..add26c8e 100644 --- a/.github/workflows/CheckCodeQuality.yml +++ b/.github/workflows/CheckCodeQuality.yml @@ -32,7 +32,7 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string package_directory: description: 'The package''s directory' diff --git a/.github/workflows/CheckDocumentation.yml b/.github/workflows/CheckDocumentation.yml index e24abcf2..f737a262 100644 --- a/.github/workflows/CheckDocumentation.yml +++ b/.github/workflows/CheckDocumentation.yml @@ -32,7 +32,7 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string directory: description: 'Source code directory to check.' diff --git a/.github/workflows/CheckMarketplaceMetadata.yml b/.github/workflows/CheckMarketplaceMetadata.yml index d6782a46..fccff0bb 100644 --- a/.github/workflows/CheckMarketplaceMetadata.yml +++ b/.github/workflows/CheckMarketplaceMetadata.yml @@ -33,7 +33,7 @@ on: description: 'Python version.' type: string required: false - default: '3.14' + default: '3.15' action_file: description: | Action metadata file. GitHub Marketplace requires it at the repository root. diff --git a/.github/workflows/CheckReleaseVersion.yml b/.github/workflows/CheckReleaseVersion.yml index 4f1c5a61..aa7f84e2 100644 --- a/.github/workflows/CheckReleaseVersion.yml +++ b/.github/workflows/CheckReleaseVersion.yml @@ -32,7 +32,7 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string version: description: 'Version to be released, e.g. v1.2.3.' diff --git a/.github/workflows/CompletePipeline.yml b/.github/workflows/CompletePipeline.yml index ac3ec9f9..89eff97f 100644 --- a/.github/workflows/CompletePipeline.yml +++ b/.github/workflows/CompletePipeline.yml @@ -41,12 +41,12 @@ on: unittest_python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string unittest_python_version_list: description: 'Space separated list of Python versions to run tests with.' required: false - default: '3.10 3.11 3.12 3.13 3.14' + default: '3.11 3.12 3.13 3.14 3.15' type: string unittest_system_list: description: 'Space separated list of systems to run tests on.' @@ -81,7 +81,7 @@ on: apptest_python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string apptest_python_version_list: description: 'Space separated list of Python versions to run tests with.' diff --git a/.github/workflows/ExtractConfiguration.yml b/.github/workflows/ExtractConfiguration.yml index c3b6b527..14181d69 100644 --- a/.github/workflows/ExtractConfiguration.yml +++ b/.github/workflows/ExtractConfiguration.yml @@ -32,7 +32,7 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string coverage_config: description: 'Path to the .coveragerc file. Use pyproject.toml by default.' diff --git a/.github/workflows/Package.yml b/.github/workflows/Package.yml index afd6788d..3d828ee4 100644 --- a/.github/workflows/Package.yml +++ b/.github/workflows/Package.yml @@ -33,7 +33,7 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string requirements: description: 'Python dependencies to be installed through pip; if empty, use pyproject.toml through build.' diff --git a/.github/workflows/Parameters.yml b/.github/workflows/Parameters.yml index 1a5363c6..8d4aea9b 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -53,12 +53,12 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string python_version_list: description: 'Space separated list of Python versions to run tests with.' required: false - default: '3.10 3.11 3.12 3.13 3.14' + default: '3.11 3.12 3.13 3.14 3.15' type: string system_list: description: 'Space separated list of systems to run tests on.' @@ -348,8 +348,8 @@ jobs: disable_list = "${{ inputs.disable_list }}".strip() currentMSYS2Version = "3.14" - currentAlphaVersion = "3.15" - currentAlphaRelease = "3.15.0-a.4" + currentAlphaVersion = "3.16" + currentAlphaRelease = "3.16.0-a.1" if systems == "": print("::error title=Parameters::system_list is empty.") @@ -376,8 +376,8 @@ jobs: else: disabled = [disable.strip() for disable in disable_list.split(" ")] - if "3.9" in versions: - print("::warning title=Deprecated::Support for Python 3.9 ended in 2025.10.") + if "3.10" in versions: + print("::warning title=Deprecated::Support for Python 3.10 ended in 2026.10.") if "msys2" in systems: print("::warning title=Deprecated::System 'msys2' will be replaced by 'ucrt64'.") for removed in ("mingw32", "mingw64"): @@ -392,13 +392,12 @@ jobs: data = { # Python and PyPy versions supported by "setup-python" action "python": { - "3.9": { "icon": "โšซ", "until": "2025.10" }, - "3.10": { "icon": "๐Ÿ”ด", "until": "2026.10" }, - "3.11": { "icon": "๐ŸŸ ", "until": "2027.10" }, - "3.12": { "icon": "๐ŸŸก", "until": "2028.10" }, - "3.13": { "icon": "๐ŸŸข", "until": "2029.10" }, + "3.10": { "icon": "โšซ", "until": "2026.10" }, + "3.11": { "icon": "๐Ÿ”ด", "until": "2027.10" }, + "3.12": { "icon": "๐ŸŸ ", "until": "2028.10" }, + "3.13": { "icon": "๐ŸŸก", "until": "2029.10" }, "3.14": { "icon": "๐ŸŸข", "until": "2030.10" }, - "3.15": { "icon": "๐ŸŸฃ", "until": "2031.10" }, + "3.15": { "icon": "๐ŸŸข", "until": "2031.10" }, "pypy-3.11": { "icon": "โŸฒ๐ŸŸ ", "until": "????.??" }, "pypy-3.12": { "icon": "โŸฒ๐ŸŸก", "until": "????.??" }, }, diff --git a/.github/workflows/PublishOnPyPI.yml b/.github/workflows/PublishOnPyPI.yml index 1eebc031..6f3749f7 100644 --- a/.github/workflows/PublishOnPyPI.yml +++ b/.github/workflows/PublishOnPyPI.yml @@ -33,7 +33,7 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string requirements: description: 'Python dependencies to be installed through pip.' diff --git a/.github/workflows/SphinxDocumentation.yml b/.github/workflows/SphinxDocumentation.yml index 44252d99..da4bb67e 100644 --- a/.github/workflows/SphinxDocumentation.yml +++ b/.github/workflows/SphinxDocumentation.yml @@ -32,7 +32,7 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string requirements: description: 'Python dependencies to be installed through pip.' diff --git a/.github/workflows/StaticTypeCheck.yml b/.github/workflows/StaticTypeCheck.yml index b0f99158..d1522118 100644 --- a/.github/workflows/StaticTypeCheck.yml +++ b/.github/workflows/StaticTypeCheck.yml @@ -33,7 +33,7 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string requirements: description: 'Python dependencies to be installed through pip.' diff --git a/.github/workflows/VerifyDocs.yml b/.github/workflows/VerifyDocs.yml index 699ed0e0..51dc7df0 100644 --- a/.github/workflows/VerifyDocs.yml +++ b/.github/workflows/VerifyDocs.yml @@ -33,7 +33,7 @@ on: python_version: description: 'Python version.' required: false - default: '3.14' + default: '3.15' type: string jobs: diff --git a/.github/workflows/_Checking_JobTemplates.yml b/.github/workflows/_Checking_JobTemplates.yml index 09e8acfd..71857f79 100644 --- a/.github/workflows/_Checking_JobTemplates.yml +++ b/.github/workflows/_Checking_JobTemplates.yml @@ -56,7 +56,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: package_name: 'myPackage' - python_version_list: '3.11 3.12 3.13 3.14 pypy-3.11 pypy-3.12' + python_version_list: '3.11 3.12 3.13 3.14 3.15 pypy-3.11 pypy-3.12' disable_list: 'windows-arm:pypy-3.11 windows-arm:pypy-3.12' documentation_steps: 'all' diff --git a/.github/workflows/_Checking_NamespacePackage_Pipeline.yml b/.github/workflows/_Checking_NamespacePackage_Pipeline.yml index b7f5069b..2b18df56 100644 --- a/.github/workflows/_Checking_NamespacePackage_Pipeline.yml +++ b/.github/workflows/_Checking_NamespacePackage_Pipeline.yml @@ -20,7 +20,7 @@ jobs: with: package_namespace: 'myFramework' package_name: 'Extension' - unittest_python_version_list: '3.11' # SimplePackage covers Python 3.14, so both pipelines together still test the version range's ends. + unittest_python_version_list: '3.11' # SimplePackage covers Python 3.15, so both pipelines together still test the version range's ends. unittest_system_list: 'ubuntu ubuntu-arm' bandit: 'true' pylint: 'true' diff --git a/.github/workflows/_Checking_Parameters.yml b/.github/workflows/_Checking_Parameters.yml index 9eab15f9..bffed1a1 100644 --- a/.github/workflows/_Checking_Parameters.yml +++ b/.github/workflows/_Checking_Parameters.yml @@ -90,10 +90,10 @@ jobs: - name: Checking job matrix from 'Params_Default' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.14' - expected-python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' + expected-default-version: '3.15' + expected-python-versions: '["3.11", "3.12", "3.13", "3.14", "3.15"]' expected-systems: '["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"]' - expected-exclude-jobs: '["windows-arm:3.10"]' + expected-exclude-jobs: '[]' expected-include-jobs: '["ucrt64:3.14"]' generated-default-version: ${{ needs.Params_Default.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_Default.outputs.python_jobs }} @@ -118,7 +118,7 @@ jobs: - name: Checking job matrix from 'Params_PythonVersions' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.14' + expected-default-version: '3.15' expected-python-versions: '["3.12", "3.13", "pypy-3.11", "pypy-3.12"]' expected-systems: '["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"]' expected-exclude-jobs: '["windows-arm:pypy-3.11", "windows-arm:pypy-3.12"]' @@ -140,8 +140,8 @@ jobs: - name: Checking job matrix from 'Params_Systems' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.14' - expected-python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' + expected-default-version: '3.15' + expected-python-versions: '["3.11", "3.12", "3.13", "3.14", "3.15"]' expected-systems: '["windows"]' expected-exclude-jobs: '[]' expected-include-jobs: '["clang64:3.14", "ucrt64:3.14"]' @@ -162,7 +162,7 @@ jobs: - name: Checking job matrix from 'Params_Include' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.14' + expected-default-version: '3.15' expected-python-versions: '["3.12"]' expected-systems: '["ubuntu", "windows", "macos", "macos-arm"]' expected-exclude-jobs: '[]' @@ -184,7 +184,7 @@ jobs: - name: Checking job matrix from 'Params_Exclude' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.14' + expected-default-version: '3.15' expected-python-versions: '["3.13"]' expected-systems: '["ubuntu", "macos", "macos-arm"]' expected-exclude-jobs: '[]' @@ -206,7 +206,7 @@ jobs: - name: Checking job matrix from 'Params_Disable' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.14' + expected-default-version: '3.15' expected-python-versions: '["3.13"]' expected-systems: '["ubuntu", "windows", "macos", "macos-arm"]' expected-exclude-jobs: '["windows:3.13"]' @@ -265,7 +265,7 @@ jobs: - name: Checking job matrix from 'Params_All' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.14' + expected-default-version: '3.15' expected-python-versions: '["3.12", "3.13"]' expected-systems: '["ubuntu", "windows", "macos-arm"]' expected-exclude-jobs: '[]' diff --git a/.github/workflows/_Checking_SimplePackage_Pipeline.yml b/.github/workflows/_Checking_SimplePackage_Pipeline.yml index d0df36ee..2e631637 100644 --- a/.github/workflows/_Checking_SimplePackage_Pipeline.yml +++ b/.github/workflows/_Checking_SimplePackage_Pipeline.yml @@ -19,10 +19,10 @@ jobs: uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@dev with: package_name: 'myPackage' - unittest_python_version_list: '3.14' # NamespacePackage covers Python 3.11, so both pipelines together still test the version range's ends. + unittest_python_version_list: '3.15' # NamespacePackage covers Python 3.11, so both pipelines together still test the version range's ends. unittest_system_list: 'ubuntu ubuntu-arm' apptest: 'true' - apptest_python_version_list: '3.14' + apptest_python_version_list: '3.15' apptest_system_list: 'ubuntu ubuntu-arm' bandit: 'true' pylint: 'true' diff --git a/doc/JobTemplate/AllInOne/CompletePipeline.rst b/doc/JobTemplate/AllInOne/CompletePipeline.rst index de1bdf76..6415d91e 100644 --- a/doc/JobTemplate/AllInOne/CompletePipeline.rst +++ b/doc/JobTemplate/AllInOne/CompletePipeline.rst @@ -429,9 +429,9 @@ Parameter Summary +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/version_file` | no | string | ``'__init__.py'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/unittest_python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/unittest_python_version` | no | string | ``'3.15'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/unittest_python_version_list` | no | string | ``'3.10 3.11 3.12 3.13 3.14'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/unittest_python_version_list` | no | string | ``'3.11 3.12 3.13 3.14 3.15'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_system_list` | no | string | ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -443,7 +443,7 @@ Parameter Summary +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_parallel` | no | string | ``'auto'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/apptest_python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/apptest_python_version` | no | string | ``'3.15'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/bandit` | no | string | ``'false'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -631,7 +631,7 @@ unittest_python_version :Type: string :Required: no -:Default Value: ``'3.14'`` +:Default Value: ``'3.15'`` :Possible Values: Any valid Python version conforming to the pattern ``.`` or ``pypy-.``. |br| See `actions/python-versions - available Python versions `__ and `actions/setup-python - configurable Python versions `__. @@ -649,7 +649,7 @@ unittest_python_version_list :Type: string :Required: no -:Default Value: ``'3.10 3.11 3.12 3.13 3.14'`` +:Default Value: ``'3.11 3.12 3.13 3.14 3.15'`` :Possible Values: A space separated list of valid Python versions conforming to the pattern ``.`` or ``pypy-.``. :Description: The list of space-separated Python versions used for unit testing. @@ -737,7 +737,7 @@ apptest_python_version :Type: string :Required: no -:Default Value: ``'3.14'`` +:Default Value: ``'3.15'`` :Possible Values: Any valid Python version conforming to the pattern ``.`` or ``pypy-.``. |br| See `actions/python-versions - available Python versions `__ and `actions/setup-python - configurable Python versions `__. diff --git a/doc/JobTemplate/Documentation/SphinxDocumentation.rst b/doc/JobTemplate/Documentation/SphinxDocumentation.rst index 741d6202..08bd6078 100644 --- a/doc/JobTemplate/Documentation/SphinxDocumentation.rst +++ b/doc/JobTemplate/Documentation/SphinxDocumentation.rst @@ -122,7 +122,7 @@ Parameter Summary +=========================================================================+==========+================+===================================================================+ | :ref:`JOBTMPL/SphinxDocumentation/Input/ubuntu_image_version` | no | string | ``'26.04'`` | +-------------------------------------------------------------------------+----------+----------------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/SphinxDocumentation/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/SphinxDocumentation/Input/python_version` | no | string | ``'3.15'`` | +-------------------------------------------------------------------------+----------+----------------+-------------------------------------------------------------------+ | :ref:`JOBTMPL/SphinxDocumentation/Input/requirements` | no | string | ``'-r doc/requirements.txt'`` | +-------------------------------------------------------------------------+----------+----------------+-------------------------------------------------------------------+ diff --git a/doc/JobTemplate/Package/Package.rst b/doc/JobTemplate/Package/Package.rst index f12cbd93..5c73392d 100644 --- a/doc/JobTemplate/Package/Package.rst +++ b/doc/JobTemplate/Package/Package.rst @@ -96,7 +96,7 @@ Parameter Summary +=====================================================================+==========+==========+===================================================================+ | :ref:`JOBTMPL/Package/Input/ubuntu_image_version` | no | string | ``'26.04'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/Package/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/Package/Input/python_version` | no | string | ``'3.15'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ | :ref:`JOBTMPL/Package/Input/requirements` | no | string | ``''`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ diff --git a/doc/JobTemplate/Package/PublishOnPyPI.rst b/doc/JobTemplate/Package/PublishOnPyPI.rst index 18f88c81..63d076d0 100644 --- a/doc/JobTemplate/Package/PublishOnPyPI.rst +++ b/doc/JobTemplate/Package/PublishOnPyPI.rst @@ -122,7 +122,7 @@ Parameter Summary +=========================================================+==========+========+=======================================+ | :ref:`JOBTMPL/PublishOnPyPI/Input/ubuntu_image_version` | no | string | ``'26.04'`` | +---------------------------------------------------------+----------+--------+---------------------------------------+ -| :ref:`JOBTMPL/PublishOnPyPI/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/PublishOnPyPI/Input/python_version` | no | string | ``'3.15'`` | +---------------------------------------------------------+----------+--------+---------------------------------------+ | :ref:`JOBTMPL/PublishOnPyPI/Input/requirements` | no | string | ``'wheel twine'`` | +---------------------------------------------------------+----------+--------+---------------------------------------+ diff --git a/doc/JobTemplate/PythonVersionList.rst b/doc/JobTemplate/PythonVersionList.rst index 898e3fa3..f9cc141a 100644 --- a/doc/JobTemplate/PythonVersionList.rst +++ b/doc/JobTemplate/PythonVersionList.rst @@ -1,24 +1,22 @@ .. rubric:: Possible values -* ``3.9``, ``3.10``, ``3.11``, ``3.12``, ``3.13``, ``3.14``, ``3.15`` +* ``3.10``, ``3.11``, ``3.12``, ``3.13``, ``3.14``, ``3.15`` * ``pypy-3.11``, ``pypy-3.12`` +------+-----------+------------------+-----------------------------------------------+ | Icon | Version | Maintained until | Comments | +======+===========+==================+===============================================+ -| โšซ | 3.9 | 2025.10 | :red:`outdated` | +| โšซ | 3.10 | 2026.10 | :red:`outdated` | +------+-----------+------------------+-----------------------------------------------+ -| ๐Ÿ”ด | 3.10 | 2026.10 | | +| ๐Ÿ”ด | 3.11 | 2027.10 | | +------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸ  | 3.11 | 2027.10 | | +| ๐ŸŸ  | 3.12 | 2028.10 | | +------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸก | 3.12 | 2028.10 | | +| ๐ŸŸก | 3.13 | 2029.10 | | +------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸข | 3.13 | 2029.10 | | +| ๐ŸŸข | 3.14 | 2030.10 | | +------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸข | 3.14 | 2030.10 | :green:`latest CPython` | -+------+-----------+------------------+-----------------------------------------------+ -| ๐ŸŸฃ | 3.15 | 2031.10 | Python 3.15 alpha, beta (or RC) will be used. | +| ๐ŸŸข | 3.15 | 2031.10 | :green:`latest CPython` | +------+-----------+------------------+-----------------------------------------------+ | โŸฒ๐ŸŸ  | pypy-3.11 | ????.?? | | +------+-----------+------------------+-----------------------------------------------+ diff --git a/doc/JobTemplate/Quality/CheckCodeQuality.rst b/doc/JobTemplate/Quality/CheckCodeQuality.rst index ad78daec..52ad8076 100644 --- a/doc/JobTemplate/Quality/CheckCodeQuality.rst +++ b/doc/JobTemplate/Quality/CheckCodeQuality.rst @@ -124,7 +124,7 @@ Parameter Summary +============================================================+==========+========+===========================+ | :ref:`JOBTMPL/CheckCodeQuality/Input/ubuntu_image_version` | no | string | ``'26.04'`` | +------------------------------------------------------------+----------+--------+---------------------------+ -| :ref:`JOBTMPL/CheckCodeQuality/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/CheckCodeQuality/Input/python_version` | no | string | ``'3.15'`` | +------------------------------------------------------------+----------+--------+---------------------------+ | :ref:`JOBTMPL/CheckCodeQuality/Input/package_directory` | yes | string | โ€” โ€” โ€” โ€” | +------------------------------------------------------------+----------+--------+---------------------------+ diff --git a/doc/JobTemplate/Quality/CheckDocumentation.rst b/doc/JobTemplate/Quality/CheckDocumentation.rst index 9c4e7f1f..5e4e6b72 100644 --- a/doc/JobTemplate/Quality/CheckDocumentation.rst +++ b/doc/JobTemplate/Quality/CheckDocumentation.rst @@ -78,7 +78,7 @@ Parameter Summary +=========================================================================+==========+==========+===================================================================+ | :ref:`JOBTMPL/CheckDocumentation/Input/ubuntu_image_version` | no | string | ``'26.04'`` | +-------------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/CheckDocumentation/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/CheckDocumentation/Input/python_version` | no | string | ``'3.15'`` | +-------------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ | :ref:`JOBTMPL/CheckDocumentation/Input/directory` | yes | string | โ€” โ€” โ€” โ€” | +-------------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ diff --git a/doc/JobTemplate/Quality/CheckMarketplaceMetadata.rst b/doc/JobTemplate/Quality/CheckMarketplaceMetadata.rst index 9d6666ff..4192a29b 100644 --- a/doc/JobTemplate/Quality/CheckMarketplaceMetadata.rst +++ b/doc/JobTemplate/Quality/CheckMarketplaceMetadata.rst @@ -101,7 +101,7 @@ Parameter Summary +=================================================================+==========+========+====================+ | :ref:`JOBTMPL/CheckMarketplaceMetadata/Input/ubuntu_image` | no | string | ``'ubuntu-26.04'`` | +-----------------------------------------------------------------+----------+--------+--------------------+ -| :ref:`JOBTMPL/CheckMarketplaceMetadata/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/CheckMarketplaceMetadata/Input/python_version` | no | string | ``'3.15'`` | +-----------------------------------------------------------------+----------+--------+--------------------+ | :ref:`JOBTMPL/CheckMarketplaceMetadata/Input/action_file` | no | string | ``'action.yml'`` | +-----------------------------------------------------------------+----------+--------+--------------------+ @@ -142,7 +142,7 @@ python_version :Type: string :Required: no -:Default Value: ``'3.14'`` +:Default Value: ``'3.15'`` :Possible Values: Any Python version supported by :gh:`actions/setup-python`. :Description: Python version used to read and check the metadata file. diff --git a/doc/JobTemplate/Quality/StaticTypeCheck.rst b/doc/JobTemplate/Quality/StaticTypeCheck.rst index d7f28392..2a1c24a9 100644 --- a/doc/JobTemplate/Quality/StaticTypeCheck.rst +++ b/doc/JobTemplate/Quality/StaticTypeCheck.rst @@ -132,7 +132,7 @@ Parameter Summary +===========================================================+==========+===============+========================================================================================================================================+ | :ref:`JOBTMPL/StaticTypeCheck/Input/ubuntu_image_version` | no | string | ``'26.04'`` | +-----------------------------------------------------------+----------+---------------+----------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`JOBTMPL/StaticTypeCheck/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/StaticTypeCheck/Input/python_version` | no | string | ``'3.15'`` | +-----------------------------------------------------------+----------+---------------+----------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/StaticTypeCheck/Input/requirements` | no | string | ``'-r ./requirements.txt'`` | +-----------------------------------------------------------+----------+---------------+----------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/doc/JobTemplate/Quality/VerifyDocs.rst b/doc/JobTemplate/Quality/VerifyDocs.rst index e47c0de5..16a8a45d 100644 --- a/doc/JobTemplate/Quality/VerifyDocs.rst +++ b/doc/JobTemplate/Quality/VerifyDocs.rst @@ -57,7 +57,7 @@ The following instantiation example creates a ``VerifyDocs`` job derived from jo VerifyDocs: uses: pyTooling/Actions/.github/workflows/VerifyDocs.yml@r8 with: - python_version: '3.14' + python_version: '3.15' .. seealso:: @@ -78,7 +78,7 @@ Parameter Summary +======================================================+==========+========+=============+ | :ref:`JOBTMPL/VerifyDocs/Input/ubuntu_image_version` | no | string | ``'26.04'`` | +------------------------------------------------------+----------+--------+-------------+ -| :ref:`JOBTMPL/VerifyDocs/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/VerifyDocs/Input/python_version` | no | string | ``'3.15'`` | +------------------------------------------------------+----------+--------+-------------+ .. rubric:: Goto :ref:`secrets ` diff --git a/doc/JobTemplate/Release/CheckReleaseVersion.rst b/doc/JobTemplate/Release/CheckReleaseVersion.rst index 9f8f9c0d..3c6b8536 100644 --- a/doc/JobTemplate/Release/CheckReleaseVersion.rst +++ b/doc/JobTemplate/Release/CheckReleaseVersion.rst @@ -104,7 +104,7 @@ Parameter Summary +===============================================================+==========+========+========================+ | :ref:`JOBTMPL/CheckReleaseVersion/Input/ubuntu_image` | no | string | ``'ubuntu-26.04'`` | +---------------------------------------------------------------+----------+--------+------------------------+ -| :ref:`JOBTMPL/CheckReleaseVersion/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/CheckReleaseVersion/Input/python_version` | no | string | ``'3.15'`` | +---------------------------------------------------------------+----------+--------+------------------------+ | :ref:`JOBTMPL/CheckReleaseVersion/Input/version` | yes | string | โ€” โ€” โ€” โ€” | +---------------------------------------------------------------+----------+--------+------------------------+ @@ -151,7 +151,7 @@ python_version :Type: string :Required: no -:Default Value: ``'3.14'`` +:Default Value: ``'3.15'`` :Possible Values: Any Python version provided by :gh:`actions/setup-python`. :Description: Python version used to compare the versions. diff --git a/doc/JobTemplate/Setup/ExtractConfiguration.rst b/doc/JobTemplate/Setup/ExtractConfiguration.rst index 25edee58..e9dc98cf 100644 --- a/doc/JobTemplate/Setup/ExtractConfiguration.rst +++ b/doc/JobTemplate/Setup/ExtractConfiguration.rst @@ -112,7 +112,7 @@ Parameter Summary +=====================================================================+==========+==========+===================================================================+ | :ref:`JOBTMPL/ExtractConfiguration/Input/ubuntu_image_version` | no | string | ``'26.04'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/ExtractConfiguration/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/ExtractConfiguration/Input/python_version` | no | string | ``'3.15'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ | :ref:`JOBTMPL/ExtractConfiguration/Input/coverage_config` | no | string | ``'pyproject.toml'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ diff --git a/doc/JobTemplate/Setup/Parameters.rst b/doc/JobTemplate/Setup/Parameters.rst index 033fde1f..e9a27d00 100644 --- a/doc/JobTemplate/Setup/Parameters.rst +++ b/doc/JobTemplate/Setup/Parameters.rst @@ -179,9 +179,9 @@ Parameter Summary +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/package_name` | no | string | ``''`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/Parameters/Input/python_version` | no | string | ``'3.14'`` | +| :ref:`JOBTMPL/Parameters/Input/python_version` | no | string | ``'3.15'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/Parameters/Input/python_version_list` | no | string | ``'3.10 3.11 3.12 3.13 3.14'`` | +| :ref:`JOBTMPL/Parameters/Input/python_version_list` | no | string | ``'3.11 3.12 3.13 3.14 3.15'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/system_list` | no | string | ``'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -376,7 +376,7 @@ python_version :Type: string :Required: no -:Default Value: ``'3.14'`` +:Default Value: ``'3.15'`` :Possible Values: Any valid Python version conforming to the pattern ``.`` or ``pypy-.``. |br| See `actions/python-versions - available Python versions `__ and `actions/setup-python - configurable Python versions `__. @@ -392,7 +392,7 @@ python_version_list :Type: string :Required: no -:Default Value: ``'3.10 3.11 3.12 3.13 3.14'`` +:Default Value: ``'3.11 3.12 3.13 3.14 3.15'`` :Possible Values: A space separated list of valid Python versions conforming to the pattern ``.`` or ``pypy-.``. |br| See `actions/python-versions - available Python versions `__ @@ -607,7 +607,7 @@ python_version ============== :Type: string -:Default Value: ``'3.14'`` +:Default Value: ``'3.15'`` :Possible Values: Any valid Python version conforming to the pattern ``.`` or ``pypy-.``. :Description: Returns diff --git a/doc/JobTemplate/_python_version.rst b/doc/JobTemplate/_python_version.rst index 2507a873..a837584a 100644 --- a/doc/JobTemplate/_python_version.rst +++ b/doc/JobTemplate/_python_version.rst @@ -3,7 +3,7 @@ python_version :Type: string :Required: no -:Default Value: ``'3.14'`` +:Default Value: ``'3.15'`` :Possible Values: Any valid Python version conforming to the pattern ``.`` or ``pypy-.``. |br| See `actions/python-versions - available Python versions `__ and `actions/setup-python - configurable Python versions `__. From fe504b7d6d033966b0417b4b78a67725c1f898bf Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 2 Oct 2026 21:26:06 +0000 Subject: [PATCH 08/19] Add Python 3.16 as pre-release '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 --- .github/workflows/Parameters.yml | 3 ++- doc/JobTemplate/PythonVersionList.rst | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Parameters.yml b/.github/workflows/Parameters.yml index 8d4aea9b..a8e6aaef 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -349,7 +349,7 @@ jobs: currentMSYS2Version = "3.14" currentAlphaVersion = "3.16" - currentAlphaRelease = "3.16.0-a.1" + currentAlphaRelease = "3.16.0-alpha.1" if systems == "": print("::error title=Parameters::system_list is empty.") @@ -398,6 +398,7 @@ jobs: "3.13": { "icon": "๐ŸŸก", "until": "2029.10" }, "3.14": { "icon": "๐ŸŸข", "until": "2030.10" }, "3.15": { "icon": "๐ŸŸข", "until": "2031.10" }, + "3.16": { "icon": "๐ŸŸฃ", "until": "2032.10" }, "pypy-3.11": { "icon": "โŸฒ๐ŸŸ ", "until": "????.??" }, "pypy-3.12": { "icon": "โŸฒ๐ŸŸก", "until": "????.??" }, }, diff --git a/doc/JobTemplate/PythonVersionList.rst b/doc/JobTemplate/PythonVersionList.rst index f9cc141a..2f731afa 100644 --- a/doc/JobTemplate/PythonVersionList.rst +++ b/doc/JobTemplate/PythonVersionList.rst @@ -1,6 +1,6 @@ .. rubric:: Possible values -* ``3.10``, ``3.11``, ``3.12``, ``3.13``, ``3.14``, ``3.15`` +* ``3.10``, ``3.11``, ``3.12``, ``3.13``, ``3.14``, ``3.15``, ``3.16`` * ``pypy-3.11``, ``pypy-3.12`` +------+-----------+------------------+-----------------------------------------------+ @@ -18,6 +18,8 @@ +------+-----------+------------------+-----------------------------------------------+ | ๐ŸŸข | 3.15 | 2031.10 | :green:`latest CPython` | +------+-----------+------------------+-----------------------------------------------+ +| ๐ŸŸฃ | 3.16 | 2032.10 | Python 3.16 alpha, beta (or RC) will be used. | ++------+-----------+------------------+-----------------------------------------------+ | โŸฒ๐ŸŸ  | pypy-3.11 | ????.?? | | +------+-----------+------------------+-----------------------------------------------+ | โŸฒ๐ŸŸก | pypy-3.12 | ????.?? | :green:`latest PyPy` | From 6721134b512ef0b5cb56869b8ccfe0374b290240 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 2 Oct 2026 22:41:59 +0000 Subject: [PATCH 09/19] Shift the relative Python versions of the verifications to Python 3.15 '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 --- .github/workflows/CompletePipeline.yml | 4 +-- .github/workflows/Parameters.yml | 2 +- .../workflows/_Checking_CleanupArtifacts.yml | 2 +- .github/workflows/_Checking_Parameters.yml | 36 +++++++++---------- doc/JobTemplate/AllInOne/CompletePipeline.rst | 8 ++--- doc/JobTemplate/Setup/Parameters.rst | 4 +-- 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/CompletePipeline.yml b/.github/workflows/CompletePipeline.yml index 89eff97f..ae100310 100644 --- a/.github/workflows/CompletePipeline.yml +++ b/.github/workflows/CompletePipeline.yml @@ -61,7 +61,7 @@ on: unittest_exclude_list: description: 'Space separated list of system:python items to be excluded from the list of test.' required: false - default: 'windows-arm:3.9 windows-arm:3.10' + default: 'windows-arm:3.10' type: string unittest_disable_list: description: 'Space separated list of system:python items to be disabled from the list of test.' @@ -101,7 +101,7 @@ on: apptest_exclude_list: description: 'Space separated list of system:python items to be excluded from the list of test.' required: false - default: 'windows-arm:3.9 windows-arm:3.10' + default: 'windows-arm:3.10' type: string apptest_disable_list: description: 'Space separated list of system:python items to be disabled from the list of test.' diff --git a/.github/workflows/Parameters.yml b/.github/workflows/Parameters.yml index a8e6aaef..650b5927 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -73,7 +73,7 @@ on: exclude_list: description: 'Space separated list of system:python items to be excluded from the list of test.' required: false - default: 'windows-arm:3.9 windows-arm:3.10' + default: 'windows-arm:3.10' type: string disable_list: description: 'Space separated list of system:python items to be disabled from the list of test.' diff --git a/.github/workflows/_Checking_CleanupArtifacts.yml b/.github/workflows/_Checking_CleanupArtifacts.yml index be701662..0fcf425a 100644 --- a/.github/workflows/_Checking_CleanupArtifacts.yml +++ b/.github/workflows/_Checking_CleanupArtifacts.yml @@ -10,7 +10,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.13 3.14" # py-1, py-0 + python_version_list: "3.14 3.15" # py-1, py-0 system_list: "ubuntu windows" Testing: diff --git a/.github/workflows/_Checking_Parameters.yml b/.github/workflows/_Checking_Parameters.yml index bffed1a1..15a84b7b 100644 --- a/.github/workflows/_Checking_Parameters.yml +++ b/.github/workflows/_Checking_Parameters.yml @@ -24,7 +24,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.12 3.13 pypy-3.11 pypy-3.12" # py-2, py-1, pypy-1, pypy-0 + python_version_list: "3.13 3.14 pypy-3.11 pypy-3.12" # py-2, py-1, pypy-1, pypy-0 Params_Systems: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev @@ -36,34 +36,34 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.12" # py-2 + python_version_list: "3.13" # py-2 system_list: "ubuntu windows macos macos-arm" - include_list: "ubuntu:3.13 ubuntu:3.14 ubuntu-arm:3.12" + include_list: "ubuntu:3.14 ubuntu:3.15 ubuntu-arm:3.13" Params_Exclude: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.13" # py-1 + python_version_list: "3.14" # py-1 system_list: "ubuntu windows macos macos-arm" - exclude_list: "windows:3.13 windows:3.14" + exclude_list: "windows:3.14 windows:3.15" Params_Disable: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.13" # py-1 + python_version_list: "3.14" # py-1 system_list: "ubuntu windows macos macos-arm" - disable_list: "windows:3.13 windows:3.14" + disable_list: "windows:3.14 windows:3.15" Params_All: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.12 3.13" # py-2, py-1 + python_version_list: "3.13 3.14" # py-2, py-1 system_list: "ubuntu windows macos macos-arm" - include_list: "windows:3.10 windows:3.11 windows:3.13" - exclude_list: "macos:3.12 macos:3.13" + include_list: "windows:3.11 windows:3.12 windows:3.14" + exclude_list: "macos:3.13 macos:3.14" Params_SimplePackage: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev @@ -119,7 +119,7 @@ jobs: uses: ./.github/actions/CheckJobMatrix with: expected-default-version: '3.15' - expected-python-versions: '["3.12", "3.13", "pypy-3.11", "pypy-3.12"]' + expected-python-versions: '["3.13", "3.14", "pypy-3.11", "pypy-3.12"]' expected-systems: '["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"]' expected-exclude-jobs: '["windows-arm:pypy-3.11", "windows-arm:pypy-3.12"]' expected-include-jobs: '["ucrt64:3.14"]' @@ -163,10 +163,10 @@ jobs: uses: ./.github/actions/CheckJobMatrix with: expected-default-version: '3.15' - expected-python-versions: '["3.12"]' + expected-python-versions: '["3.13"]' expected-systems: '["ubuntu", "windows", "macos", "macos-arm"]' expected-exclude-jobs: '[]' - expected-include-jobs: '["ubuntu:3.13", "ubuntu:3.14", "ubuntu-arm:3.12"]' + expected-include-jobs: '["ubuntu:3.14", "ubuntu:3.15", "ubuntu-arm:3.13"]' generated-default-version: ${{ needs.Params_Include.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_Include.outputs.python_jobs }} @@ -185,7 +185,7 @@ jobs: uses: ./.github/actions/CheckJobMatrix with: expected-default-version: '3.15' - expected-python-versions: '["3.13"]' + expected-python-versions: '["3.14"]' expected-systems: '["ubuntu", "macos", "macos-arm"]' expected-exclude-jobs: '[]' expected-include-jobs: '[]' @@ -207,9 +207,9 @@ jobs: uses: ./.github/actions/CheckJobMatrix with: expected-default-version: '3.15' - expected-python-versions: '["3.13"]' + expected-python-versions: '["3.14"]' expected-systems: '["ubuntu", "windows", "macos", "macos-arm"]' - expected-exclude-jobs: '["windows:3.13"]' + expected-exclude-jobs: '["windows:3.14"]' expected-include-jobs: '[]' generated-default-version: ${{ needs.Params_Disable.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_Disable.outputs.python_jobs }} @@ -266,10 +266,10 @@ jobs: uses: ./.github/actions/CheckJobMatrix with: expected-default-version: '3.15' - expected-python-versions: '["3.12", "3.13"]' + expected-python-versions: '["3.13", "3.14"]' expected-systems: '["ubuntu", "windows", "macos-arm"]' expected-exclude-jobs: '[]' - expected-include-jobs: '["windows:3.10", "windows:3.11", "windows:3.13"]' + expected-include-jobs: '["windows:3.11", "windows:3.12", "windows:3.14"]' generated-default-version: ${{ needs.Params_All.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_All.outputs.python_jobs }} diff --git a/doc/JobTemplate/AllInOne/CompletePipeline.rst b/doc/JobTemplate/AllInOne/CompletePipeline.rst index 6415d91e..b30520d5 100644 --- a/doc/JobTemplate/AllInOne/CompletePipeline.rst +++ b/doc/JobTemplate/AllInOne/CompletePipeline.rst @@ -437,7 +437,7 @@ Parameter Summary +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_include_list` | no | string | ``''`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/unittest_exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/unittest_exclude_list` | no | string | ``'windows-arm:3.10'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_disable_list` | no | string | ``'windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -469,7 +469,7 @@ Parameter Summary +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/apptest_include_list` | no | string | ``''`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/apptest_exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/apptest_exclude_list` | no | string | ``'windows-arm:3.10'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/apptest_disable_list` | no | string | ``'windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +--------------------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -693,7 +693,7 @@ unittest_exclude_list :Type: string :Required: no -:Default Value: ``'windows-arm:3.9 windows-arm:3.10'`` +:Default Value: ``'windows-arm:3.10'`` :Possible Values: A space separated list of ``:`` tuples. :Description: List of space-separated ``:`` tuples to be excluded from the list of unittest variants. @@ -802,7 +802,7 @@ apptest_exclude_list :Type: string :Required: no -:Default Value: ``'windows-arm:3.9 windows-arm:3.10'`` +:Default Value: ``'windows-arm:3.10'`` :Possible Values: A space separated list of ``:`` tuples. :Description: List of space-separated ``:`` tuples to be excluded from the list of application test variants. diff --git a/doc/JobTemplate/Setup/Parameters.rst b/doc/JobTemplate/Setup/Parameters.rst index e9a27d00..59ce43e1 100644 --- a/doc/JobTemplate/Setup/Parameters.rst +++ b/doc/JobTemplate/Setup/Parameters.rst @@ -187,7 +187,7 @@ Parameter Summary +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/include_list` | no | string | ``''`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ -| :ref:`JOBTMPL/Parameters/Input/exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` | +| :ref:`JOBTMPL/Parameters/Input/exclude_list` | no | string | ``'windows-arm:3.10'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/disable_list` | no | string | ``'windows-arm:pypy-3.11 windows-arm:pypy-3.12'`` | +------------------------------------------------------+----------+--------+----------------------------------------------------------------------------+ @@ -445,7 +445,7 @@ exclude_list :Type: string :Required: no -:Default Value: ``'windows-arm:3.9 windows-arm:3.10'`` +:Default Value: ``'windows-arm:3.10'`` :Possible Values: A space separated list of ``:`` tuples. :Description: List of space-separated ``:`` tuples to be excluded from the list of test variants. From 13d3b6dd66efba3bf2f6961d10a1f043935e9504 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Sat, 3 Oct 2026 23:53:37 +0000 Subject: [PATCH 10/19] Count the page views of the published documentation with GoatCounter 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 --- doc/conf.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/conf.py b/doc/conf.py index d6e1fb17..1c58d55b 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -2,6 +2,7 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. from sys import path as sys_path +from os import environ from os.path import abspath from pathlib import Path from textwrap import dedent @@ -93,6 +94,12 @@ 'css/override.css', ] +# GoatCounter counts the page views of the published documentation, which is built on GitHub Actions. +if environ.get("GITHUB_ACTIONS") == "true": + html_js_files = [ + ("https://gc.zgo.at/count.js", {"async": "async", "data-goatcounter": "https://pytooling.goatcounter.com/count"}), + ] + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". From dcceba0fd574a76cf5a5860b97ed98108b595a83 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Thu, 8 Oct 2026 11:52:40 +0000 Subject: [PATCH 11/19] ComputePacboyPackages: pyEDAA.Reports and sphinx_reports need python-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 --- .github/actions/ComputePacboyPackages/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/ComputePacboyPackages/action.yml b/.github/actions/ComputePacboyPackages/action.yml index 3365d8cf..0bd9f464 100644 --- a/.github/actions/ComputePacboyPackages/action.yml +++ b/.github/actions/ComputePacboyPackages/action.yml @@ -101,12 +101,12 @@ runs: "pyedaa.ipxact": "python-lxml:p", "pyedaa.osvvm": "python-coverage:p python-lxml:p python-markupsafe:p python-pyaml:p python-types-pyyaml:p python-ruamel-yaml:p python-ruamel.yaml.clib:p", "pyedaa.outputfilter": "python-ruamel-yaml:p python-ruamel.yaml.clib:p", - "pyedaa.reports": "python-ruamel-yaml:p python-ruamel.yaml.clib:p python-lxml:p", + "pyedaa.reports": "python-jsonschema:p python-ruamel-yaml:p python-ruamel.yaml.clib:p python-lxml:p", "pyedaa.toolsetup": "python-ruamel-yaml:p python-ruamel.yaml.clib:p", "pyedaa.ucis": "python-lxml:p", "pyedaa.workflow": "python-ruamel-yaml:p python-ruamel.yaml.clib:p", "pyversioning": "python-ruamel-yaml:p python-ruamel.yaml.clib:p", - "sphinx_reports": "python-coverage:p python-lxml:p python-markupsafe:p python-pyaml:p python-types-pyyaml:p python-ruamel-yaml:p python-ruamel.yaml.clib:p", + "sphinx_reports": "python-coverage:p python-jsonschema:p python-lxml:p python-markupsafe:p python-pyaml:p python-types-pyyaml:p python-ruamel-yaml:p python-ruamel.yaml.clib:p", } subPackages = { "pyedaa.projectmodel": { From c52b2c5b156e6c361e9642dbb25bcf16aef3cdda Mon Sep 17 00:00:00 2001 From: Claude Code Date: Thu, 8 Oct 2026 12:09:42 +0000 Subject: [PATCH 12/19] ComputePacboyPackages: entries for pyTooling.Sphinx and its 'reports' 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 --- .github/actions/ComputePacboyPackages/action.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/actions/ComputePacboyPackages/action.yml b/.github/actions/ComputePacboyPackages/action.yml index 0bd9f464..8eed7e0d 100644 --- a/.github/actions/ComputePacboyPackages/action.yml +++ b/.github/actions/ComputePacboyPackages/action.yml @@ -105,6 +105,7 @@ runs: "pyedaa.toolsetup": "python-ruamel-yaml:p python-ruamel.yaml.clib:p", "pyedaa.ucis": "python-lxml:p", "pyedaa.workflow": "python-ruamel-yaml:p python-ruamel.yaml.clib:p", + "pytooling.sphinx": "python-aiohttp:p python-markupsafe:p", "pyversioning": "python-ruamel-yaml:p python-ruamel.yaml.clib:p", "sphinx_reports": "python-coverage:p python-jsonschema:p python-lxml:p python-markupsafe:p python-pyaml:p python-types-pyyaml:p python-ruamel-yaml:p python-ruamel.yaml.clib:p", } @@ -124,6 +125,9 @@ runs: # are pure Python and install from PyPI on MSYS2 without help. So would a 'plotly' extra: plotly needs # only narwhals and packaging. That is also why 'cli' rewrites to what 'diagram' needs: it installs the # 'diagram' and 'terminal' dependencies, and only the first of them has compiled code. + "pytooling.sphinx": { + "reports": "python-jsonschema:p python-lxml:p python-pyaml:p python-ruamel-yaml:p python-ruamel.yaml.clib:p python-types-pyyaml:p", + }, } regExp = compile(r"(?P[\w_\-\.]+)(?:\[(?P(?:\w+)(?:\s*,\s*\w+)*)\])?(?:\s*(?P[<>~=]+)\s*)(?P\d+(?:\.\d+)*)(?:-(?P\w+))?") From 1d6c19a5c76ec34087ff5fda3a89ceef5cabcb87 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Thu, 8 Oct 2026 22:48:33 +0000 Subject: [PATCH 13/19] ApplicationTesting: download artifacts the application tests read ('download_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 --- .github/workflows/ApplicationTesting.yml | 17 +++++++++ .github/workflows/_Checking_JobTemplates.yml | 17 +++++++++ .../Testing/ApplicationTesting.rst | 37 ++++++++++++++++++- tests/app/AppTest.py | 12 ++++++ 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ApplicationTesting.yml b/.github/workflows/ApplicationTesting.yml index 381d5461..d4820df6 100644 --- a/.github/workflows/ApplicationTesting.yml +++ b/.github/workflows/ApplicationTesting.yml @@ -34,6 +34,16 @@ on: required: false default: '' type: string + download_artifacts: + description: 'Glob of the names of artifacts to download before the tests run, e.g. ''Example-*''.' + required: false + default: '' + type: string + artifacts_directory: + description: 'Directory the artifacts are downloaded into, each into a subdirectory named after the artifact.' + required: false + default: 'artifacts' + type: string apt: description: 'Ubuntu dependencies to be installed through apt.' required: false @@ -251,6 +261,13 @@ jobs: run: | python -m pip install -v --disable-pip-version-check (Get-Item .\install\*.whl).FullName + - name: ๐Ÿ“ฅ Download artifacts '${{ inputs.download_artifacts }}' + if: inputs.download_artifacts != '' + uses: pyTooling/download-artifact@v8 + with: + pattern: ${{ inputs.download_artifacts }} + path: ${{ inputs.artifacts_directory }} + # Run pytests - name: โœ… Run application tests (Ubuntu/macOS) diff --git a/.github/workflows/_Checking_JobTemplates.yml b/.github/workflows/_Checking_JobTemplates.yml index 71857f79..ef985ea2 100644 --- a/.github/workflows/_Checking_JobTemplates.yml +++ b/.github/workflows/_Checking_JobTemplates.yml @@ -175,6 +175,21 @@ jobs: wheel: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} package_name: ${{ needs.UnitTestingParams.outputs.package_fullname }} + ExampleReport: + name: ๐Ÿ“„ Example report for the application tests + runs-on: ubuntu-26.04 + steps: + - name: ๐Ÿ“„ Write an example report + run: | + mkdir -p report + printf -- '%s\n' 'Report of an example job.' > report/Example.txt + + - name: ๐Ÿ“ค Upload the example report as artifact + uses: pyTooling/upload-artifact@v7 + with: + name: Example-Report + path: report/Example.txt + AppTesting: uses: pyTooling/Actions/.github/workflows/ApplicationTesting.yml@dev needs: @@ -182,9 +197,11 @@ jobs: - AppTestingParams - UnitTestingParams - Package + - ExampleReport with: jobs: ${{ needs.AppTestingParams.outputs.python_jobs }} wheel: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} + download_artifacts: 'Example-*' apptest_report_xml: ${{ needs.ConfigParams.outputs.unittest_report_xml }} apptest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).apptesting_xml }} diff --git a/doc/JobTemplate/Testing/ApplicationTesting.rst b/doc/JobTemplate/Testing/ApplicationTesting.rst index 2dceb5b1..fddb8f38 100644 --- a/doc/JobTemplate/Testing/ApplicationTesting.rst +++ b/doc/JobTemplate/Testing/ApplicationTesting.rst @@ -41,13 +41,16 @@ Configuration options for :term:`pytest` should be given via section ``[tool.pyt :ref:`JOBTMPL/ApplicationTesting/Input/ubuntu_before_script`. 5. Download the Python package artifact containing the wheel (:ref:`JOBTMPL/ApplicationTesting/Input/wheel`). 6. Install the wheel using :term:`pip`. - 7. Run the application tests using :term:`pytest` (:ref:`JOBTMPL/ApplicationTesting/Input/apptest_directory`, + 7. Download further artifacts the tests read, if requested + (:ref:`JOBTMPL/ApplicationTesting/Input/download_artifacts`, + :ref:`JOBTMPL/ApplicationTesting/Input/artifacts_directory`). + 8. Run the application tests using :term:`pytest` (:ref:`JOBTMPL/ApplicationTesting/Input/apptest_directory`, :ref:`JOBTMPL/ApplicationTesting/Input/tests_directory`, :ref:`JOBTMPL/ApplicationTesting/Input/root_directory`), in parallel if :file:`pytest-xdist` is installed (:ref:`JOBTMPL/ApplicationTesting/Input/parallel`). The environment variable ``GITHUB_TOKEN`` holds the job's token, so a program reading GitHub's REST API authenticates and isn't limited to 60 requests per hour per IP address. - 8. Upload the test report summary as an artifact (:ref:`JOBTMPL/ApplicationTesting/Input/apptest_xml_artifact`, + 9. Upload the test report summary as an artifact (:ref:`JOBTMPL/ApplicationTesting/Input/apptest_xml_artifact`, :ref:`JOBTMPL/ApplicationTesting/Input/apptest_report_xml`). .. note:: @@ -136,6 +139,10 @@ Parameter Summary +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/ApplicationTesting/Input/wheel` | no | string | ``''`` | +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ +| :ref:`JOBTMPL/ApplicationTesting/Input/download_artifacts` | no | string | ``''`` | ++-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ +| :ref:`JOBTMPL/ApplicationTesting/Input/artifacts_directory` | no | string | ``'artifacts'`` | ++-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/ApplicationTesting/Input/apt` | no | string | ``''`` | +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/ApplicationTesting/Input/brew` | no | string | ``''`` | @@ -221,6 +228,32 @@ wheel Produced by :ref:`JOBTMPL/Package`. If empty, no package is downloaded and the tests run against whatever is installed in the environment. +.. _JOBTMPL/ApplicationTesting/Input/download_artifacts: + +download_artifacts +================== + +:Type: string +:Required: no +:Default Value: ``''`` +:Possible Values: A glob pattern of artifact names, e.g. ``'Example-*'``. An empty string disables the download. +:Description: Artifacts to download before the application tests run, e.g. the reports example jobs wrote, which the + tests read with the installed package. Each artifact is extracted into a subdirectory of + :ref:`JOBTMPL/ApplicationTesting/Input/artifacts_directory` named after the artifact. |br| + The jobs uploading them must be listed in the calling job's ``needs``. + +.. _JOBTMPL/ApplicationTesting/Input/artifacts_directory: + +artifacts_directory +=================== + +:Type: string +:Required: no +:Default Value: ``'artifacts'`` +:Possible Values: Any valid directory path, relative to the repository's root. +:Description: Directory the artifacts of :ref:`JOBTMPL/ApplicationTesting/Input/download_artifacts` are downloaded + into. + .. _JOBTMPL/ApplicationTesting/Input/apt: apt diff --git a/tests/app/AppTest.py b/tests/app/AppTest.py index 14b051a9..25373658 100644 --- a/tests/app/AppTest.py +++ b/tests/app/AppTest.py @@ -30,6 +30,7 @@ # from importlib.metadata import version as get_version from json import loads as json_loads, JSONDecodeError +from pathlib import Path from re import IGNORECASE, MULTILINE from shutil import which from subprocess import CompletedProcess, run as subprocess_run, TimeoutExpired @@ -107,3 +108,14 @@ class Basic(Testcase): def test_NoArguments(self) -> None: result = self.RunEntrypoint() self.assertExitCode(result, 0) + + +class DownloadedArtifacts(TestCase): + """``ApplicationTesting.yml`` downloads the artifacts ``download_artifacts`` names into ``artifacts//``.""" + + def test_ExampleReport(self) -> None: + directory = Path("artifacts") + if not directory.exists(): + self.skipTest("No artifacts downloaded: the calling pipeline sets no 'download_artifacts'.") + + self.assertEqual("Report of an example job.\n", (directory / "Example-Report" / "Example.txt").read_text()) From 2aab8912cec8fd40d357f4562d68962534979f18 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 9 Oct 2026 11:47:51 +0000 Subject: [PATCH 14/19] ApplicationTesting: input 'download_artifacts' is named 'artifacts_pattern' Like 'unittest_artifacts_pattern' (PublishTestResults) and 'coverage_artifacts_pattern' (PublishCoverageResults). Co-Authored-By: Patrick Lehmann --- .github/workflows/ApplicationTesting.yml | 8 ++++---- .github/workflows/_Checking_JobTemplates.yml | 2 +- doc/JobTemplate/Testing/ApplicationTesting.rst | 12 ++++++------ tests/app/AppTest.py | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ApplicationTesting.yml b/.github/workflows/ApplicationTesting.yml index d4820df6..32e6e3e3 100644 --- a/.github/workflows/ApplicationTesting.yml +++ b/.github/workflows/ApplicationTesting.yml @@ -34,7 +34,7 @@ on: required: false default: '' type: string - download_artifacts: + artifacts_pattern: description: 'Glob of the names of artifacts to download before the tests run, e.g. ''Example-*''.' required: false default: '' @@ -261,11 +261,11 @@ jobs: run: | python -m pip install -v --disable-pip-version-check (Get-Item .\install\*.whl).FullName - - name: ๐Ÿ“ฅ Download artifacts '${{ inputs.download_artifacts }}' - if: inputs.download_artifacts != '' + - name: ๐Ÿ“ฅ Download artifacts '${{ inputs.artifacts_pattern }}' + if: inputs.artifacts_pattern != '' uses: pyTooling/download-artifact@v8 with: - pattern: ${{ inputs.download_artifacts }} + pattern: ${{ inputs.artifacts_pattern }} path: ${{ inputs.artifacts_directory }} # Run pytests diff --git a/.github/workflows/_Checking_JobTemplates.yml b/.github/workflows/_Checking_JobTemplates.yml index ef985ea2..d3839b6f 100644 --- a/.github/workflows/_Checking_JobTemplates.yml +++ b/.github/workflows/_Checking_JobTemplates.yml @@ -201,7 +201,7 @@ jobs: with: jobs: ${{ needs.AppTestingParams.outputs.python_jobs }} wheel: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} - download_artifacts: 'Example-*' + artifacts_pattern: 'Example-*' apptest_report_xml: ${{ needs.ConfigParams.outputs.unittest_report_xml }} apptest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).apptesting_xml }} diff --git a/doc/JobTemplate/Testing/ApplicationTesting.rst b/doc/JobTemplate/Testing/ApplicationTesting.rst index fddb8f38..0a03f8d4 100644 --- a/doc/JobTemplate/Testing/ApplicationTesting.rst +++ b/doc/JobTemplate/Testing/ApplicationTesting.rst @@ -42,7 +42,7 @@ Configuration options for :term:`pytest` should be given via section ``[tool.pyt 5. Download the Python package artifact containing the wheel (:ref:`JOBTMPL/ApplicationTesting/Input/wheel`). 6. Install the wheel using :term:`pip`. 7. Download further artifacts the tests read, if requested - (:ref:`JOBTMPL/ApplicationTesting/Input/download_artifacts`, + (:ref:`JOBTMPL/ApplicationTesting/Input/artifacts_pattern`, :ref:`JOBTMPL/ApplicationTesting/Input/artifacts_directory`). 8. Run the application tests using :term:`pytest` (:ref:`JOBTMPL/ApplicationTesting/Input/apptest_directory`, :ref:`JOBTMPL/ApplicationTesting/Input/tests_directory`, @@ -139,7 +139,7 @@ Parameter Summary +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/ApplicationTesting/Input/wheel` | no | string | ``''`` | +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`JOBTMPL/ApplicationTesting/Input/download_artifacts` | no | string | ``''`` | +| :ref:`JOBTMPL/ApplicationTesting/Input/artifacts_pattern` | no | string | ``''`` | +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/ApplicationTesting/Input/artifacts_directory` | no | string | ``'artifacts'`` | +-------------------------------------------------------------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------+ @@ -228,10 +228,10 @@ wheel Produced by :ref:`JOBTMPL/Package`. If empty, no package is downloaded and the tests run against whatever is installed in the environment. -.. _JOBTMPL/ApplicationTesting/Input/download_artifacts: +.. _JOBTMPL/ApplicationTesting/Input/artifacts_pattern: -download_artifacts -================== +artifacts_pattern +================= :Type: string :Required: no @@ -251,7 +251,7 @@ artifacts_directory :Required: no :Default Value: ``'artifacts'`` :Possible Values: Any valid directory path, relative to the repository's root. -:Description: Directory the artifacts of :ref:`JOBTMPL/ApplicationTesting/Input/download_artifacts` are downloaded +:Description: Directory the artifacts of :ref:`JOBTMPL/ApplicationTesting/Input/artifacts_pattern` are downloaded into. .. _JOBTMPL/ApplicationTesting/Input/apt: diff --git a/tests/app/AppTest.py b/tests/app/AppTest.py index 25373658..54585b27 100644 --- a/tests/app/AppTest.py +++ b/tests/app/AppTest.py @@ -111,11 +111,11 @@ def test_NoArguments(self) -> None: class DownloadedArtifacts(TestCase): - """``ApplicationTesting.yml`` downloads the artifacts ``download_artifacts`` names into ``artifacts//``.""" + """``ApplicationTesting.yml`` downloads the artifacts ``artifacts_pattern`` names into ``artifacts//``.""" def test_ExampleReport(self) -> None: directory = Path("artifacts") if not directory.exists(): - self.skipTest("No artifacts downloaded: the calling pipeline sets no 'download_artifacts'.") + self.skipTest("No artifacts downloaded: the calling pipeline sets no 'artifacts_pattern'.") self.assertEqual("Report of an example job.\n", (directory / "Example-Report" / "Example.txt").read_text()) From 2bbb49f481dae8c523002552ece4faa4f61e196d Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 9 Oct 2026 17:23:01 +0000 Subject: [PATCH 15/19] Render the documentation with pyTooling.Sphinx instead of sphinx_reports 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 --- doc/CodeCoverage.rst | 2 +- doc/DocCoverage.rst | 2 +- doc/conf.py | 11 +++++---- doc/prolog.inc | 56 +++----------------------------------------- doc/requirements.txt | 8 +++---- 5 files changed, 15 insertions(+), 64 deletions(-) diff --git a/doc/CodeCoverage.rst b/doc/CodeCoverage.rst index 217fd1e4..e812a534 100644 --- a/doc/CodeCoverage.rst +++ b/doc/CodeCoverage.rst @@ -22,4 +22,4 @@ Code Coverage Report Code coverage report generated with `pytest `__, `Coverage.py `__ and visualized by -`sphinx-reports `__. +`pyTooling.Sphinx `__. diff --git a/doc/DocCoverage.rst b/doc/DocCoverage.rst index d2ee3882..1f457410 100644 --- a/doc/DocCoverage.rst +++ b/doc/DocCoverage.rst @@ -21,4 +21,4 @@ Documentation Coverage Report ---------- Documentation coverage generated with `"""docstr-coverage""" `__ and -visualized by `sphinx-reports `__. +visualized by `pyTooling.Sphinx `__. diff --git a/doc/conf.py b/doc/conf.py index 1c58d55b..f9e37369 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -185,7 +185,8 @@ "sphinx_copybutton", "sphinx_autodoc_typehints", "autoapi.sphinx", - "sphinx_reports", +# pyTooling extensions + "pyTooling.Sphinx", # User defined extensions ] @@ -269,15 +270,15 @@ # ============================================================================== -# sphinx-reports +# pyTooling.Sphinx - reports of domain 'report' # ============================================================================== -report_unittest_testsuites = { +pyTooling_Unittest_Testsuites = { "src": { "name": f"{pythonProject}", "xml_report": "../report/unit/unittest.xml", } } -report_codecov_packages = { +pyTooling_CodeCoverage_Packages = { "src": { "name": f"{pythonProject}", "json_report": "../report/coverage/coverage.json", @@ -285,7 +286,7 @@ "levels": "default" } } -report_doccov_packages = { +pyTooling_DocCoverage_Packages = { "src": { "name": f"{pythonProject}", "directory": f"../{directoryName}", diff --git a/doc/prolog.inc b/doc/prolog.inc index 79ce733f..4a75b885 100644 --- a/doc/prolog.inc +++ b/doc/prolog.inc @@ -4,64 +4,14 @@ .. include:: .. include:: -.. # define a hard line break for HTML -.. |br| raw:: html - -
- -.. # define horizontal line for HTML -.. |hr| raw:: html - -
- -.. # define additional CSS based styles and ReST roles for HTML -.. raw:: html - - - -.. role:: bolditalic - :class: bolditalic - -.. role:: underline - :class: underline - -.. role:: strike - :class: strike - -.. role:: xlarge - :class: xlarge - -.. role:: red - :class: colorred -.. role:: green - :class: colorgreen -.. role:: blue - :class: colorblue -.. role:: purple - :class: colorpurple - -.. role:: deletion - :class: colorred strike -.. role:: addition - :class: colorgreen +.. # |degree|, |br| and |hr|, the style roles and :pycode: are registered by the + # 'pyTooling.Sphinx' extension, so they are declared once for every project instead of being + # copied into each one's prolog. .. role:: bashcode(code) :language: bash :class: highlight -.. role:: pycode(code) - :language: python - :class: highlight - .. role:: jsoncode(code) :language: json :class: highlight diff --git a/doc/requirements.txt b/doc/requirements.txt index feca078d..25e73c28 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1,6 +1,7 @@ --r ../requirements.txt - -pyTooling ~= 8.17 +# The documentation's Sphinx extension - roles, 'tree', 'shields', ... Its extra 'reports' adds the domain 'report' +# (unit tests, code and documentation coverage). It requires pyTooling 10 from GitHub, which conflicts with +# 'pyTooling ~= 8.17' in '../requirements.txt', so that file isn't included here. +pyTooling.Sphinx[reports] @ git+https://github.com/pyTooling/pyTooling.Sphinx.git@dev # Enforce latest version on ReadTheDocs sphinx ~= 9.1 @@ -16,4 +17,3 @@ autoapi >= 2.0.1 sphinx_design ~= 0.7.0 sphinx-copybutton >= 0.5.2 sphinx_autodoc_typehints ~= 3.13 -sphinx_reports ~= 0.11.0 From 81659d72c2588bb633823d4ea37627dd8a711eb6 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 9 Oct 2026 17:33:43 +0000 Subject: [PATCH 16/19] LaTeX: allow lists nested deeper than 4 levels 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 --- doc/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/conf.py b/doc/conf.py index f9e37369..7376ace8 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -142,8 +142,10 @@ "fontpkg": dedent("""\ \\usepackage[fontfamily=libertinus]{pytooling} """), + # A 'tree' is a nested bullet list in LaTeX, which allows 4 levels unless 'maxlistdepth' is set. "passoptionstopackages": dedent("""\ \\PassOptionsToPackage{verbatimvisiblespace=\\ }{sphinx} + \\PassOptionsToPackage{maxlistdepth=10}{sphinx} """), # "sphinxsetup": "verbatimvisiblespace=\\textvisiblespace" # "figure_align": "htbp", # Latex figure (float) alignment From ae7d0c90acc159376cd3d3bfd39f98b967d816db Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 9 Oct 2026 17:33:51 +0000 Subject: [PATCH 17/19] Directory structures as a 'tree' instead of indented text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- doc/JobTemplate/AllInOne/CompletePipeline.rst | 87 +++++++++++-------- doc/JobTemplate/Setup/Parameters.rst | 46 ++++++---- doc/JobTemplate/Testing/UnitTesting.rst | 22 +++-- doc/RepositoryStructure.rst | 62 ++++++------- doc/index.rst | 60 +++++++------ 5 files changed, 156 insertions(+), 121 deletions(-) diff --git a/doc/JobTemplate/AllInOne/CompletePipeline.rst b/doc/JobTemplate/AllInOne/CompletePipeline.rst index b30520d5..50b930af 100644 --- a/doc/JobTemplate/AllInOne/CompletePipeline.rst +++ b/doc/JobTemplate/AllInOne/CompletePipeline.rst @@ -386,31 +386,38 @@ version ``@r8``. It only requires the `package_name` parameter to run a full pip .. tab-item:: Simple Package :sync: Simple - .. code-block:: + .. tree:: + :root-icon: ๐Ÿ“‚ + :node-icon: ๐Ÿ“‚ + :leaf-icon: ๐Ÿ + :icons: * ๐Ÿ“ฆ - ๐Ÿ“‚ProjectRoot/ - ๐Ÿ“‚myFramework/ - - ๐Ÿ“ฆSubPackage/ - ๐Ÿ__init__.py - ๐ŸSubModuleA.py - ๐Ÿ__init__.py - ๐ŸModuleB.py + - :file:`ProjectRoot/` + - :file:`myFramework/` + * :file:`SubPackage/` + - :file:`__init__.py` + - :file:`SubModuleA.py` + - :file:`__init__.py` + - :file:`ModuleB.py` .. tab-item:: Namespace Package :sync: Namespace - .. code-block:: + .. tree:: + :root-icon: ๐Ÿ“‚ + :node-icon: ๐Ÿ“‚ + :leaf-icon: ๐Ÿ + :icons: * ๐Ÿ“ฆ - ๐Ÿ“‚ProjectRoot/ - ๐Ÿ“‚myFramework/ - ๐Ÿ“‚Extension/ - ๐Ÿ“ฆSubPackage/ - ๐Ÿ__init__.py - ๐ŸSubModuleA.py - ๐Ÿ__init__.py - ๐ŸModuleB.py + - :file:`ProjectRoot/` + - :file:`myFramework/` + - :file:`Extension/` + * :file:`SubPackage/` + - :file:`__init__.py` + - :file:`SubModuleA.py` + - :file:`__init__.py` + - :file:`ModuleB.py` .. _JOBTMPL/CompletePipeline/Parameters: @@ -549,16 +556,20 @@ package_namespace .. rubric:: Example Directory Structure - .. code-block:: + .. tree:: + :root-icon: ๐Ÿ“‚ + :node-icon: ๐Ÿ“‚ + :leaf-icon: ๐Ÿ + :icons: * ๐Ÿ“ฆ - ๐Ÿ“‚ProjectRoot/ - ๐Ÿ“‚myFramework/ - ๐Ÿ“‚Extension/ - ๐Ÿ“ฆSubPackage/ - ๐Ÿ__init__.py - ๐ŸSubModuleA.py - ๐Ÿ__init__.py - ๐ŸModuleB.py + - :file:`ProjectRoot/` + - :file:`myFramework/` + - :file:`Extension/` + * :file:`SubPackage/` + - :file:`__init__.py` + - :file:`SubModuleA.py` + - :file:`__init__.py` + - :file:`ModuleB.py` .. _JOBTMPL/CompletePipeline/Input/package_name: @@ -596,15 +607,19 @@ package_name .. rubric:: Example Directory Structure - .. code-block:: - - ๐Ÿ“‚ProjectRoot/ - ๐Ÿ“‚myFramework/ - ๐Ÿ“ฆSubPackage/ - ๐Ÿ__init__.py - ๐ŸSubModuleA.py - ๐Ÿ__init__.py - ๐ŸModuleB.py + .. tree:: + :root-icon: ๐Ÿ“‚ + :node-icon: ๐Ÿ“‚ + :leaf-icon: ๐Ÿ + :icons: * ๐Ÿ“ฆ + + - :file:`ProjectRoot/` + - :file:`myFramework/` + * :file:`SubPackage/` + - :file:`__init__.py` + - :file:`SubModuleA.py` + - :file:`__init__.py` + - :file:`ModuleB.py` .. _JOBTMPL/CompletePipeline/Input/version_file: diff --git a/doc/JobTemplate/Setup/Parameters.rst b/doc/JobTemplate/Setup/Parameters.rst index 59ce43e1..95a5962c 100644 --- a/doc/JobTemplate/Setup/Parameters.rst +++ b/doc/JobTemplate/Setup/Parameters.rst @@ -310,16 +310,20 @@ package_namespace .. rubric:: Example Directory Structure - .. code-block:: - - ๐Ÿ“‚ProjectRoot/ - ๐Ÿ“‚myFramework/ - ๐Ÿ“‚Extension/ - ๐Ÿ“ฆSubPackage/ - ๐Ÿ__init__.py - ๐ŸSubModuleA.py - ๐Ÿ__init__.py - ๐ŸModuleB.py + .. tree:: + :root-icon: ๐Ÿ“‚ + :node-icon: ๐Ÿ“‚ + :leaf-icon: ๐Ÿ + :icons: * ๐Ÿ“ฆ + + - :file:`ProjectRoot/` + - :file:`myFramework/` + - :file:`Extension/` + * :file:`SubPackage/` + - :file:`__init__.py` + - :file:`SubModuleA.py` + - :file:`__init__.py` + - :file:`ModuleB.py` .. _JOBTMPL/Parameters/Input/package_name: @@ -358,15 +362,19 @@ package_name .. rubric:: Example Directory Structure - .. code-block:: - - ๐Ÿ“‚ProjectRoot/ - ๐Ÿ“‚myFramework/ - ๐Ÿ“ฆSubPackage/ - ๐Ÿ__init__.py - ๐ŸSubModuleA.py - ๐Ÿ__init__.py - ๐ŸModuleB.py + .. tree:: + :root-icon: ๐Ÿ“‚ + :node-icon: ๐Ÿ“‚ + :leaf-icon: ๐Ÿ + :icons: * ๐Ÿ“ฆ + + - :file:`ProjectRoot/` + - :file:`myFramework/` + * :file:`SubPackage/` + - :file:`__init__.py` + - :file:`SubModuleA.py` + - :file:`__init__.py` + - :file:`ModuleB.py` .. _JOBTMPL/Parameters/Input/python_version: diff --git a/doc/JobTemplate/Testing/UnitTesting.rst b/doc/JobTemplate/Testing/UnitTesting.rst index ec147691..1a1f8b60 100644 --- a/doc/JobTemplate/Testing/UnitTesting.rst +++ b/doc/JobTemplate/Testing/UnitTesting.rst @@ -472,15 +472,19 @@ ucrt64_before_script .. card:: Directory Structure - .. code-block:: - - / - doc/ - myPackage/ - __init__.py - tests/ - unit/ - myTests.py + .. tree:: + :root-icon: ๐Ÿ“‚ + :node-icon: ๐Ÿ“‚ + :leaf-icon: ๐Ÿ + :icons: > ๐Ÿ“‚ + + - :file:`/` + > :file:`doc/` + - :file:`myPackage/` + - :file:`__init__.py` + - :file:`tests/` + - :file:`unit/` + - :file:`myTests.py` .. grid-item:: :columns: 3 diff --git a/doc/RepositoryStructure.rst b/doc/RepositoryStructure.rst index 29a9212d..de79f639 100644 --- a/doc/RepositoryStructure.rst +++ b/doc/RepositoryStructure.rst @@ -30,32 +30,36 @@ structure. * Packages are build with ``build`` instead of ``setuptools``. * A repository overview is given in a ``README.md``. -.. code-block:: - - / - .github/ - workflows/ - Pipeline.yml - dependabot.yml - .vscode/ - settings.json - build/ - requirements.txt - dist/ - requirements.txt - doc/ - conf.py - index.rst - requirements.txt - - __init__.py - tests/ - unit/ - requirements.txt - .editorconfig - .gitignore - LICENSE.md - pyproject.toml - README.md - requirements.txt - setup.py +.. tree:: + :root-icon: ๐Ÿ“‚ + :node-icon: ๐Ÿ“‚ + :leaf-icon: ๐Ÿ“„ + :icons: > ๐Ÿ“‚, + ๐Ÿ + + - :file:`/` + - :file:`.github/` + - :file:`workflows/` + - :file:`Pipeline.yml` + - :file:`dependabot.yml` + - :file:`.vscode/` + - :file:`settings.json` + - :file:`build/` + - :file:`requirements.txt` + - :file:`dist/` + - :file:`requirements.txt` + - :file:`doc/` + + :file:`conf.py` + - :file:`index.rst` + - :file:`requirements.txt` + - :file:`/` + + :file:`__init__.py` + - :file:`tests/` + > :file:`unit/` + - :file:`requirements.txt` + - :file:`.editorconfig` + - :file:`.gitignore` + - :file:`LICENSE.md` + - :file:`pyproject.toml` + - :file:`README.md` + - :file:`requirements.txt` + + :file:`setup.py` diff --git a/doc/index.rst b/doc/index.rst index 81fed656..53075ceb 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -78,34 +78,38 @@ Example Pipelines .. tab-item:: Directory Structure - .. code-block:: - - / - .github/ - workflows/ - Pipeline.yml - dist/ - requirements.txt - docs/ - conf.py - index.rst - requirements.txt - myPackage/ - ModuleA.py - __init__.py - py.typed - tests/ - unit/ - TestA.py - requirements.txt - requirements.txt - .editorconfig - .gitignore - LICENSE.md - pyproject.toml - README.md - requirements.txt - setup.py + .. tree:: + :root-icon: ๐Ÿ“‚ + :node-icon: ๐Ÿ“‚ + :leaf-icon: ๐Ÿ“„ + :icons: + ๐Ÿ + + - :file:`/` + - :file:`.github/` + - :file:`workflows/` + - :file:`Pipeline.yml` + - :file:`dist/` + - :file:`requirements.txt` + - :file:`doc/` + + :file:`conf.py` + - :file:`index.rst` + - :file:`requirements.txt` + - :file:`myPackage/` + + :file:`ModuleA.py` + + :file:`__init__.py` + - :file:`py.typed` + - :file:`tests/` + - :file:`unit/` + + :file:`TestA.py` + - :file:`requirements.txt` + - :file:`requirements.txt` + - :file:`.editorconfig` + - :file:`.gitignore` + - :file:`LICENSE.md` + - :file:`pyproject.toml` + - :file:`README.md` + - :file:`requirements.txt` + + :file:`setup.py` .. tab-item:: Simple Package :selected: From 0de1be870a69161cbbf760d592f73fcd696258db Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 9 Oct 2026 17:33:51 +0000 Subject: [PATCH 18/19] CompletePipeline: the hierarchy of workflows and actions as a 'tree' 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 --- doc/JobTemplate/AllInOne/CompletePipeline.rst | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/doc/JobTemplate/AllInOne/CompletePipeline.rst b/doc/JobTemplate/AllInOne/CompletePipeline.rst index 50b930af..f897a9be 100644 --- a/doc/JobTemplate/AllInOne/CompletePipeline.rst +++ b/doc/JobTemplate/AllInOne/CompletePipeline.rst @@ -110,6 +110,126 @@ It can be used for simple Python packages as well as namespace packages. .. image:: ../../_static/pyTooling-Actions-SimplePackage.png +.. topic:: Workflow Hierarchy + + The jobs of :file:`CompletePipeline.yml` in job order, each with the reusable workflow it calls, and the actions + that workflow uses: ๐Ÿ“„ a workflow, ๐Ÿงฉ a composite action with the actions it uses, ๐Ÿ”— a third-party action, ๐Ÿณ a + container image. + + .. tree:: + :root-icon: ๐Ÿ“„ + :node-icon: ๐Ÿ“„ + :leaf-icon: ๐Ÿ“„ + :icons: + ๐Ÿงฉ, > ๐Ÿ”—, = ๐Ÿณ + :expanded-levels: 1 + + - :file:`CompletePipeline.yml` + - :ref:`PrepareJob.yml ` | job ``Prepare`` + > :gh:`actions/checkout@v7 ` + - :ref:`ExtractConfiguration.yml ` | job ``ConfigParams`` + > :gh:`actions/checkout@v7 ` + > :gh:`actions/setup-python@v7 ` + - :ref:`Parameters.yml ` | job ``UnitTestingParams`` + > :gh:`actions/checkout@v7 ` + > :gh:`actions/setup-python@v7 ` + - :ref:`Parameters.yml ` | job ``AppTestingParams`` + > :gh:`actions/checkout@v7 ` + > :gh:`actions/setup-python@v7 ` + - :ref:`Parameters.yml ` | job ``InstallParams`` + > :gh:`actions/checkout@v7 ` + > :gh:`actions/setup-python@v7 ` + - :ref:`CheckReleaseVersion.yml ` | job ``VersionCheck`` + > :gh:`actions/setup-python@v7 ` + - :ref:`UnitTesting.yml ` | job ``UnitTesting`` + > :gh:`actions/checkout@v7 ` + + :ghsrc:`ComputeRequirements <.github/actions/ComputeRequirements>` | Compute paths to requirements files + + :ghsrc:`ComputePacboyPackages <.github/actions/ComputePacboyPackages>` | Compute pacman/pacboy packages + > :gh:`msys2/setup-msys2@v2 ` + > :gh:`actions/setup-python@v7 ` + + :gh:`pyTooling/upload-artifact@v7 ` + > :gh:`actions/upload-artifact@v7 ` + - :ref:`StaticTypeCheck.yml ` | job ``StaticTypeCheck`` + > :gh:`actions/checkout@v7 ` + > :gh:`actions/setup-python@v7 ` + + :ghsrc:`ComputeRequirements <.github/actions/ComputeRequirements>` | Compute paths to requirements files + + :gh:`pyTooling/upload-artifact@v7 ` + > :gh:`actions/upload-artifact@v7 ` + - :ref:`CheckCodeQuality.yml ` | job ``CodeQuality`` + > :gh:`actions/checkout@v7 ` + > :gh:`actions/setup-python@v7 ` + > :gh:`dorny/test-reporter@v3 ` + - :ref:`CheckDocumentation.yml ` | job ``DocCoverage`` + > :gh:`actions/checkout@v7 ` + > :gh:`actions/setup-python@v7 ` + - :ref:`Package.yml ` | job ``Package`` + > :gh:`actions/checkout@v7 ` + > :gh:`actions/setup-python@v7 ` + + :gh:`pyTooling/upload-artifact@v7 ` + > :gh:`actions/upload-artifact@v7 ` + - :ref:`InstallPackage.yml ` | job ``Install`` + + :gh:`pyTooling/download-artifact@v8 ` + > :gh:`actions/download-artifact@v8 ` + > :gh:`msys2/setup-msys2@v2 ` + > :gh:`actions/setup-python@v7 ` + - :ref:`ApplicationTesting.yml ` | job ``AppTesting`` + > :gh:`actions/checkout@v7 ` + + :ghsrc:`ComputeRequirements <.github/actions/ComputeRequirements>` | Compute paths to requirements files + + :ghsrc:`ComputePacboyPackages <.github/actions/ComputePacboyPackages>` | Compute pacman/pacboy packages + > :gh:`msys2/setup-msys2@v2 ` + > :gh:`actions/setup-python@v7 ` + + :gh:`pyTooling/download-artifact@v8 ` + > :gh:`actions/download-artifact@v8 ` + + :gh:`pyTooling/upload-artifact@v7 ` + > :gh:`actions/upload-artifact@v7 ` + - :ref:`PublishCoverageResults.yml ` | job ``PublishCoverageResults`` + > :gh:`actions/checkout@v7 ` + + :gh:`pyTooling/download-artifact@v8 ` + > :gh:`actions/download-artifact@v8 ` + + :gh:`pyTooling/upload-artifact@v7 ` + > :gh:`actions/upload-artifact@v7 ` + > :gh:`codecov/codecov-action@v7 ` + > :gh:`codacy/codacy-coverage-reporter-action@v1 ` + - :ref:`PublishTestResults.yml ` | job ``PublishTestResults`` + > :gh:`actions/checkout@v7 ` + + :gh:`pyTooling/download-artifact@v8 ` + > :gh:`actions/download-artifact@v8 ` + > :gh:`dorny/test-reporter@v3 ` + > :gh:`codecov/codecov-action@v7 ` + + :gh:`pyTooling/upload-artifact@v7 ` + > :gh:`actions/upload-artifact@v7 ` + - :ref:`SphinxDocumentation.yml ` | job ``Documentation`` + > :gh:`actions/checkout@v7 ` + > :gh:`actions/setup-python@v7 ` + + :gh:`pyTooling/download-artifact@v8 ` + > :gh:`actions/download-artifact@v8 ` + + :gh:`pyTooling/upload-artifact@v7 ` + > :gh:`actions/upload-artifact@v7 ` + - :ref:`CleanupArtifacts.yml ` | job ``IntermediateCleanUp`` + > :gh:`geekyeggo/delete-artifact@v6 ` + - :ref:`LaTeXDocumentation.yml ` | job ``PDFDocumentation`` + = :dockerhub:`pytooling/miktex:sphinx ` | container image + + :gh:`pyTooling/download-artifact@v8 ` + > :gh:`actions/download-artifact@v8 ` + + :gh:`pyTooling/upload-artifact@v7 ` + > :gh:`actions/upload-artifact@v7 ` + - :ref:`PublishToGitHubPages.yml ` | job ``PublishToGitHubPages`` + + :gh:`pyTooling/download-artifact@v8 ` + > :gh:`actions/download-artifact@v8 ` + > :gh:`geekyeggo/delete-artifact@v6 ` + > :gh:`actions/upload-pages-artifact@v5 ` + > :gh:`actions/deploy-pages@v5 ` + - :ref:`TagReleaseCommit.yml ` | job ``TriggerTaggedRelease`` + > :gh:`actions/github-script@v9 ` + - :ref:`PublishReleaseNotes.yml ` | job ``ReleasePage`` + > :gh:`actions/checkout@v7 ` + - :ref:`PublishOnPyPI.yml ` | job ``PublishOnPyPI`` + + :gh:`pyTooling/download-artifact@v8 ` + > :gh:`actions/download-artifact@v8 ` + > :gh:`actions/setup-python@v7 ` + > :gh:`geekyeggo/delete-artifact@v6 ` + - :ref:`CleanupArtifacts.yml ` | job ``ArtifactCleanUp`` + > :gh:`geekyeggo/delete-artifact@v6 ` + .. topic:: Dependencies .. dropdown:: Expand List From 5586de7f78b7edda73d83c1b3fc5e3ddd2152009 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Sun, 11 Oct 2026 13:08:03 +0000 Subject: [PATCH 19/19] AppTest: the example report is in 'report/' inside its artifact directory. pyTooling/upload-artifact keeps the uploaded file's path, 'report/Example.txt'. Co-Authored-By: Patrick Lehmann --- tests/app/AppTest.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/app/AppTest.py b/tests/app/AppTest.py index 54585b27..5da130a5 100644 --- a/tests/app/AppTest.py +++ b/tests/app/AppTest.py @@ -118,4 +118,5 @@ def test_ExampleReport(self) -> None: if not directory.exists(): self.skipTest("No artifacts downloaded: the calling pipeline sets no 'artifacts_pattern'.") - self.assertEqual("Report of an example job.\n", (directory / "Example-Report" / "Example.txt").read_text()) + report = directory / "Example-Report" / "report" / "Example.txt" + self.assertEqual("Report of an example job.\n", report.read_text())