From cf7a98730eeee55f98f2e7c2336d7347913a8d7b Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sun, 5 Oct 2025 15:37:39 +0200 Subject: [PATCH 1/7] Activated bandit and pylint. [skip ci] --- .github/workflows/_Checking_JobTemplates.yml | 4 +++- .../_Checking_NamespacePackage_Pipeline.yml | 13 ++++++++----- .../workflows/_Checking_SimplePackage_Pipeline.yml | 12 +++++++----- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/.github/workflows/_Checking_JobTemplates.yml b/.github/workflows/_Checking_JobTemplates.yml index 68f28d2..e057334 100644 --- a/.github/workflows/_Checking_JobTemplates.yml +++ b/.github/workflows/_Checking_JobTemplates.yml @@ -88,7 +88,9 @@ jobs: with: python_version: ${{ needs.UnitTestingParams.outputs.python_version }} package_directory: ${{ needs.UnitTestingParams.outputs.package_directory }} - artifact: CodeQuality + bandit: 'true' + pylint: 'true' + artifact: 'CodeQuality' DocCoverage: uses: pyTooling/Actions/.github/workflows/CheckDocumentation.yml@dev diff --git a/.github/workflows/_Checking_NamespacePackage_Pipeline.yml b/.github/workflows/_Checking_NamespacePackage_Pipeline.yml index f59baaa..b937c9e 100644 --- a/.github/workflows/_Checking_NamespacePackage_Pipeline.yml +++ b/.github/workflows/_Checking_NamespacePackage_Pipeline.yml @@ -8,11 +8,14 @@ jobs: NamespacePackage: uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@dev with: - package_namespace: myFramework - package_name: Extension - codecov: true - codacy: true - dorny: true + package_namespace: 'myFramework' + package_name: 'Extension' + bandit: 'true' + pylint: 'true' + codecov: 'true' + codacy: 'true' + dorny: 'true' + cleanup: 'false' secrets: PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/_Checking_SimplePackage_Pipeline.yml b/.github/workflows/_Checking_SimplePackage_Pipeline.yml index 714c04d..9e8c670 100644 --- a/.github/workflows/_Checking_SimplePackage_Pipeline.yml +++ b/.github/workflows/_Checking_SimplePackage_Pipeline.yml @@ -8,11 +8,13 @@ jobs: SimplePackage: uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@dev with: - package_name: myPackage - codecov: true - codacy: true - dorny: true - cleanup: false + package_name: 'myPackage' + bandit: 'true' + pylint: 'true' + codecov: 'true' + codacy: 'true' + dorny: 'true' + cleanup: 'false' secrets: PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} From 7e6bb82ae8961ea65b04c64041581a304d98b163 Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sat, 18 Oct 2025 22:20:06 +0200 Subject: [PATCH 2/7] Removed Python 3.9 from preselected list of Python versions and added Python 3.14. --- .github/workflows/CheckCodeQuality.yml | 2 +- .github/workflows/CheckDocumentation.yml | 2 +- .github/workflows/CompletePipeline.yml | 6 +++--- .github/workflows/ExtractConfiguration.yml | 2 +- .github/workflows/Package.yml | 2 +- .github/workflows/Parameters.yml | 4 ++-- .github/workflows/PublishOnPyPI.yml | 2 +- .github/workflows/SphinxDocumentation.yml | 2 +- .github/workflows/StaticTypeCheck.yml | 2 +- .github/workflows/VerifyDocs.yml | 2 +- tests/requirements.txt | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/CheckCodeQuality.yml b/.github/workflows/CheckCodeQuality.yml index ce32362..7666fd4 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.13' + default: '3.14' type: string package_directory: description: 'The package''s directory' diff --git a/.github/workflows/CheckDocumentation.yml b/.github/workflows/CheckDocumentation.yml index d519687..5b71d5e 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.13' + default: '3.14' type: string directory: description: 'Source code directory to check.' diff --git a/.github/workflows/CompletePipeline.yml b/.github/workflows/CompletePipeline.yml index b7cecf0..bfdc4cc 100644 --- a/.github/workflows/CompletePipeline.yml +++ b/.github/workflows/CompletePipeline.yml @@ -36,12 +36,12 @@ on: unittest_python_version: description: 'Python version.' required: false - default: '3.13' + default: '3.14' type: string unittest_python_version_list: description: 'Space separated list of Python versions to run tests with.' required: false - default: '3.9 3.10 3.11 3.12 3.13' + default: '3.10 3.11 3.12 3.13 3.14' type: string unittest_system_list: description: 'Space separated list of systems to run tests on.' @@ -66,7 +66,7 @@ on: apptest_python_version: description: 'Python version.' required: false - default: '3.13' + default: '3.14' 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 a52b043..d84bfc5 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.13' + default: '3.14' 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 365c4ee..dd5b563 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.13' + default: '3.14' 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 5d6b91f..a40cb54 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -48,12 +48,12 @@ on: python_version: description: 'Python version.' required: false - default: '3.13' + default: '3.14' type: string python_version_list: description: 'Space separated list of Python versions to run tests with.' required: false - default: '3.9 3.10 3.11 3.12 3.13' + default: '3.10 3.11 3.12 3.13 3.14' type: string system_list: description: 'Space separated list of systems to run tests on.' diff --git a/.github/workflows/PublishOnPyPI.yml b/.github/workflows/PublishOnPyPI.yml index cae9dfa..ef50c14 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.13' + default: '3.14' type: string requirements: description: 'Python dependencies to be installed through pip.' diff --git a/.github/workflows/SphinxDocumentation.yml b/.github/workflows/SphinxDocumentation.yml index 997faed..371ce90 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.13' + default: '3.14' type: string requirements: description: 'Python dependencies to be installed through pip.' diff --git a/.github/workflows/StaticTypeCheck.yml b/.github/workflows/StaticTypeCheck.yml index 431d239..a93e80b 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.13' + default: '3.14' type: string requirements: description: 'Python dependencies to be installed through pip.' diff --git a/.github/workflows/VerifyDocs.yml b/.github/workflows/VerifyDocs.yml index 637c457..4e89d0e 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.13' + default: '3.14' type: string jobs: diff --git a/tests/requirements.txt b/tests/requirements.txt index c8b94c7..e40a119 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -1,7 +1,7 @@ -r ../requirements.txt # Coverage collection -Coverage ~= 7.10 +Coverage ~= 7.11 # Test Runner pytest ~= 8.4 From 64327418881d742e862c6d68281b54c924191fd6 Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sat, 18 Oct 2025 23:30:10 +0200 Subject: [PATCH 3/7] Reduced code duplications when checking job-matrix and artifact names by using local Actions. --- .github/actions/CheckArtifactNames/action.yml | 67 ++ .github/actions/CheckJobMatrix/action.yml | 82 +++ .../workflows/_Checking_ArtifactCleanup.yml | 2 +- .github/workflows/_Checking_Parameters.yml | 576 +++--------------- 4 files changed, 245 insertions(+), 482 deletions(-) create mode 100644 .github/actions/CheckArtifactNames/action.yml create mode 100644 .github/actions/CheckJobMatrix/action.yml diff --git a/.github/actions/CheckArtifactNames/action.yml b/.github/actions/CheckArtifactNames/action.yml new file mode 100644 index 0000000..eaffd79 --- /dev/null +++ b/.github/actions/CheckArtifactNames/action.yml @@ -0,0 +1,67 @@ +name: Check artifact names +branding: + icon: check-square + color: green +description: Check generated artifact names. +author: Patrick Lehmann (@Paebbels) + +inputs: + prefix: + description: + type: string + required: true + generated-names: + description: + type: string + required: true + +runs: + using: composite + steps: + - name: Install dependencies + shell: bash + run: pip install --disable-pip-version-check --break-system-packages pyTooling + + - name: Check artifact names + id: check + shell: python + working-directory: ${{ inputs.path }} + run: | + from pyTooling.Common import zipdicts + + expectedName = "Example" + expectedArtifacts = { + "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", + "unittesting_html": f"{expectedName}-UnitTestReportSummary-HTML", + "perftesting_xml": f"{expectedName}-PerformanceTestReportSummary-XML", + "benchtesting_xml": f"{expectedName}-BenchmarkTestReportSummary-XML", + "apptesting_xml": f"{expectedName}-ApplicationTestReportSummary-XML", + "codecoverage_sqlite": f"{expectedName}-CodeCoverage-SQLite", + "codecoverage_xml": f"{expectedName}-CodeCoverage-XML", + "codecoverage_json": f"{expectedName}-CodeCoverage-JSON", + "codecoverage_html": f"{expectedName}-CodeCoverage-HTML", + "statictyping_cobertura": f"{expectedName}-StaticTyping-Cobertura-XML", + "statictyping_junit": f"{expectedName}-StaticTyping-JUnit-XML", + "statictyping_html": f"{expectedName}-StaticTyping-HTML", + "package_all": f"{expectedName}-Packages", + "documentation_html": f"{expectedName}-Documentation-HTML", + "documentation_latex": f"{expectedName}-Documentation-LaTeX", + "documentation_pdf": f"{expectedName}-Documentation-PDF", + } + + actualArtifactNames = json_loads("""${{ inputs }}""".replace("'", '"')) + errors = 0 + + if len(actualArtifactNames) != len(expectedArtifacts): + print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") + errors += 1 + else: + for key, actual, expected in zipdicts(actualArtifactNames, expectedArtifacts): + if actual != expected: + print(f"Artifact name '{key}' does not match: {actual} != {expected}.") + errors += 1 + + if errors == 0: + print(f"All checks PASSED.") + + exit(errors) diff --git a/.github/actions/CheckJobMatrix/action.yml b/.github/actions/CheckJobMatrix/action.yml new file mode 100644 index 0000000..51ac89e --- /dev/null +++ b/.github/actions/CheckJobMatrix/action.yml @@ -0,0 +1,82 @@ +name: Check job matrix +branding: + icon: check-square + color: green +description: Check generated job matrix. +author: Patrick Lehmann (@Paebbels) + +inputs: + expected-default-version: + description: + type: string + required: true + expected-python-versions: + description: + type: string + required: true + expected-systems: + description: + type: string + required: true + expected-exclude-jobs: + description: + type: string + required: true + expected-include-jobs: + description: + type: string + required: true + generated-default-version: + description: + type: string + required: true + generated-jobmatrix: + description: + type: string + required: true + +runs: + using: composite + steps: + - name: Check parameters + id: check + shell: python + run: | + from json import loads as json_loads + from sys import exit + + expectedPythonVersion = """${{ inputs.expected-default-version }}""" + expectedPythons = json_loads("""${{ inputs.expected-python-versions }}""".replace("'", '"')) + expectedSystems = json_loads("""${{ inputs.expected-systems }}""".replace("'", '"')) + excludedJobs = json_loads("""${{ inputs.expected-exclude-jobs }}""".replace("'", '"')) + includeJobs = json_loads("""${{ inputs.expected-include-jobs }}""".replace("'", '"')) + expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs + + actualPythonVersion = """${{ inputs.generated-default-version }}""" + actualPythonJobs = json_loads("""${{ inputs.generated-jobmatrix }}""".replace("'", '"')) + errors = 0 + + if actualPythonVersion != expectedPythonVersion: + print(f"'python_version' does not match: '{actualPythonVersion}' != '{expectedPythonVersion}'.") + errors += 1 + + if len(actualPythonJobs) != len(expectedJobs): + print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") + print("Actual jobs:") + for job in actualPythonJobs: + if job['system'] == "msys2": + print(f" {job['runtime'].lower()}:{job['python']}") + else: + print(f" {job['system']}:{job['python']}") + + print("Expected jobs:") + for job in expectedJobs: + print(f" {job}") + errors += 1 + else: + print("❌ Checking job matrix is not implemented") + + if errors == 0: + print(f"All checks PASSED.") + + exit(errors) diff --git a/.github/workflows/_Checking_ArtifactCleanup.yml b/.github/workflows/_Checking_ArtifactCleanup.yml index 0d40516..8a0ff19 100644 --- a/.github/workflows/_Checking_ArtifactCleanup.yml +++ b/.github/workflows/_Checking_ArtifactCleanup.yml @@ -9,7 +9,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.12 3.13" + python_version_list: "3.13 3.14" # py-1, py-0 system_list: "ubuntu windows" Testing: diff --git a/.github/workflows/_Checking_Parameters.yml b/.github/workflows/_Checking_Parameters.yml index 78fd649..27ba22c 100644 --- a/.github/workflows/_Checking_Parameters.yml +++ b/.github/workflows/_Checking_Parameters.yml @@ -14,7 +14,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" + python_version_list: "3.12 3.13 pypy-3.10 pypy-3.11" # py-2, py-1, pypy-1, pypy-0 Params_Systems: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev @@ -26,7 +26,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.12" + python_version_list: "3.12" # py-2 system_list: "ubuntu windows macos macos-arm" include_list: "ubuntu:3.13 ubuntu:3.14 ubuntu-arm:3.12" @@ -34,7 +34,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.13" + python_version_list: "3.13" # py-1 system_list: "ubuntu windows macos macos-arm" exclude_list: "windows:3.13 windows:3.14" @@ -42,7 +42,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.13" + python_version_list: "3.13" # py-1 system_list: "ubuntu windows macos macos-arm" disable_list: "windows:3.13 windows:3.14" @@ -50,7 +50,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: name: Example - python_version_list: "3.12 3.13" + python_version_list: "3.12 3.13" # 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" @@ -63,75 +63,25 @@ jobs: run: shell: python steps: - - name: Install dependencies - shell: bash - run: pip install --disable-pip-version-check --break-system-packages pyTooling + - name: Checkout repository to access local Action + uses: actions/checkout@v5 - - name: Checking results from 'Params_Default' - run: | - from json import loads as json_loads - from sys import exit + - 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-systems: '["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"]' + expected-exclude-jobs: '["windows-arm:3.10"]' + expected-include-jobs: '["mingw64:3.12", "ucrt64:3.12"]' + generated-default-version: ${{ needs.Params_Default.outputs.python_version }} + generated-jobmatrix: ${{ needs.Params_Default.outputs.python_jobs }} - from pyTooling.Common import zipdicts - - expectedPythonVersion = "3.13" - expectedPythons = ["3.9", "3.10", "3.11", "3.12", "3.13"] - expectedSystems = ["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"] - excludedJobs = ["windows-arm:3.9", "windows-arm:3.10"] - includeJobs = ["mingw64:3.12", "ucrt64:3.12"] - expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs - expectedName = "Example" - expectedArtifacts = { - "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", - "unittesting_html": f"{expectedName}-UnitTestReportSummary-HTML", - "perftesting_xml": f"{expectedName}-PerformanceTestReportSummary-XML", - "benchtesting_xml": f"{expectedName}-BenchmarkTestReportSummary-XML", - "apptesting_xml": f"{expectedName}-ApplicationTestReportSummary-XML", - "codecoverage_sqlite": f"{expectedName}-CodeCoverage-SQLite", - "codecoverage_xml": f"{expectedName}-CodeCoverage-XML", - "codecoverage_json": f"{expectedName}-CodeCoverage-JSON", - "codecoverage_html": f"{expectedName}-CodeCoverage-HTML", - "statictyping_cobertura": f"{expectedName}-StaticTyping-Cobertura-XML", - "statictyping_junit": f"{expectedName}-StaticTyping-JUnit-XML", - "statictyping_html": f"{expectedName}-StaticTyping-HTML", - "package_all": f"{expectedName}-Packages", - "documentation_html": f"{expectedName}-Documentation-HTML", - "documentation_latex": f"{expectedName}-Documentation-LaTeX", - "documentation_pdf": f"{expectedName}-Documentation-PDF", - } - - actualPythonVersion = """${{ needs.Params_Default.outputs.python_version }}""" - actualPythonJobs = json_loads("""${{ needs.Params_Default.outputs.python_jobs }}""".replace("'", '"')) - actualArtifactNames = json_loads("""${{ needs.Params_Default.outputs.artifact_names }}""".replace("'", '"')) - errors = 0 - - if actualPythonVersion != expectedPythonVersion: - print(f"'python_version' does not match: '{actualPythonVersion}' != '{expectedPythonVersion}'.") - errors += 1 - if len(actualPythonJobs) != len(expectedJobs): - print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") - print("Actual jobs:") - for job in actualPythonJobs: - if job['system'] == "msys2": - print(f" {job['runtime'].lower()}:{job['python']}") - else: - print(f" {job['system']}:{job['python']}") - print("Expected jobs:") - for job in expectedJobs: - print(f" {job}") - errors += 1 - if len(actualArtifactNames) != len(expectedArtifacts): - print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") - errors += 1 - else: - for key, actual, expected in zipdicts(actualArtifactNames, expectedArtifacts): - if actual != expected: - print(f"Artifact name '{key}' does not match: {actual} != {expected}.") - errors += 1 - - if errors == 0: - print(f"All checks PASSED.") - exit(errors) + - name: Checking artifact names from 'Params_Default' + uses: ./.github/actions/CheckArtifactNames + with: + prefix: 'Example' + generated-names: ${{ needs.Params_Default.outputs.artifact_names }} Params_Check_PythonVersions: needs: @@ -141,75 +91,19 @@ jobs: run: shell: python steps: - - name: Install dependencies - shell: bash - run: pip install --disable-pip-version-check --break-system-packages pyTooling + - name: Checkout repository to access local Action + uses: actions/checkout@v5 - - name: Checking results from 'Params_PythonVersions' - run: | - from json import loads as json_loads - from sys import exit - - from pyTooling.Common import zipdicts - - expectedPythonVersion = "3.13" - expectedPythons = ["3.12", "3.13", "pypy-3.10", "pypy-3.11"] - expectedSystems = ["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"] - excludedJobs = ["windows-arm:pypy-3.10", "windows-arm:pypy-3.11"] - includeJobs = ["mingw64:3.12", "ucrt64:3.12"] - expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs - expectedName = "Example" - expectedArtifacts = { - "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", - "unittesting_html": f"{expectedName}-UnitTestReportSummary-HTML", - "perftesting_xml": f"{expectedName}-PerformanceTestReportSummary-XML", - "benchtesting_xml": f"{expectedName}-BenchmarkTestReportSummary-XML", - "apptesting_xml": f"{expectedName}-ApplicationTestReportSummary-XML", - "codecoverage_sqlite": f"{expectedName}-CodeCoverage-SQLite", - "codecoverage_xml": f"{expectedName}-CodeCoverage-XML", - "codecoverage_json": f"{expectedName}-CodeCoverage-JSON", - "codecoverage_html": f"{expectedName}-CodeCoverage-HTML", - "statictyping_cobertura": f"{expectedName}-StaticTyping-Cobertura-XML", - "statictyping_junit": f"{expectedName}-StaticTyping-JUnit-XML", - "statictyping_html": f"{expectedName}-StaticTyping-HTML", - "package_all": f"{expectedName}-Packages", - "documentation_html": f"{expectedName}-Documentation-HTML", - "documentation_latex": f"{expectedName}-Documentation-LaTeX", - "documentation_pdf": f"{expectedName}-Documentation-PDF", - } - - actualPythonVersion = """${{ needs.Params_PythonVersions.outputs.python_version }}""" - actualPythonJobs = json_loads("""${{ needs.Params_PythonVersions.outputs.python_jobs }}""".replace("'", '"')) - actualArtifactNames = json_loads("""${{ needs.Params_PythonVersions.outputs.artifact_names }}""".replace("'", '"')) - errors = 0 - - if actualPythonVersion != expectedPythonVersion: - print(f"'python_version' does not match: '{actualPythonVersion}' != '{expectedPythonVersion}'.") - errors += 1 - if len(actualPythonJobs) != len(expectedJobs): - print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") - print("Actual jobs:") - for job in actualPythonJobs: - if job['system'] == "msys2": - print(f" {job['runtime'].lower()}:{job['python']}") - else: - print(f" {job['system']}:{job['python']}") - print("Expected jobs:") - for job in expectedJobs: - print(f" {job}") - errors += 1 - if len(actualArtifactNames) != len(expectedArtifacts): - print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") - errors += 1 - else: - for key, actual, expected in zipdicts(actualArtifactNames, expectedArtifacts): - if actual != expected: - print(f"Artifact name '{key}' does not match: {actual} != {expected}.") - errors += 1 - - if errors == 0: - print(f"All checks PASSED.") - exit(errors) + - name: Checking job matrix from 'Params_PythonVersions' + uses: ./.github/actions/CheckJobMatrix + with: + expected-default-version: '3.13' + 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.12", "ucrt64:3.12"]' + generated-default-version: ${{ needs.Params_PythonVersions.outputs.python_version }} + generated-jobmatrix: ${{ needs.Params_PythonVersions.outputs.python_jobs }} Params_Check_Systems: needs: @@ -219,75 +113,19 @@ jobs: run: shell: python steps: - - name: Install dependencies - shell: bash - run: pip install --disable-pip-version-check --break-system-packages pyTooling + - name: Checkout repository to access local Action + uses: actions/checkout@v5 - - name: Checking results from 'Params_Systems' - run: | - from json import loads as json_loads - from sys import exit - - from pyTooling.Common import zipdicts - - expectedPythonVersion = "3.13" - expectedPythons = ["3.9", "3.10", "3.11", "3.12", "3.13"] - expectedSystems = ["windows"] - excludedJobs = [] - includeJobs = ["mingw64:3.12", "ucrt64:3.12"] - expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs - expectedName = "Example" - expectedArtifacts = { - "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", - "unittesting_html": f"{expectedName}-UnitTestReportSummary-HTML", - "perftesting_xml": f"{expectedName}-PerformanceTestReportSummary-XML", - "benchtesting_xml": f"{expectedName}-BenchmarkTestReportSummary-XML", - "apptesting_xml": f"{expectedName}-ApplicationTestReportSummary-XML", - "codecoverage_sqlite": f"{expectedName}-CodeCoverage-SQLite", - "codecoverage_xml": f"{expectedName}-CodeCoverage-XML", - "codecoverage_json": f"{expectedName}-CodeCoverage-JSON", - "codecoverage_html": f"{expectedName}-CodeCoverage-HTML", - "statictyping_cobertura": f"{expectedName}-StaticTyping-Cobertura-XML", - "statictyping_junit": f"{expectedName}-StaticTyping-JUnit-XML", - "statictyping_html": f"{expectedName}-StaticTyping-HTML", - "package_all": f"{expectedName}-Packages", - "documentation_html": f"{expectedName}-Documentation-HTML", - "documentation_latex": f"{expectedName}-Documentation-LaTeX", - "documentation_pdf": f"{expectedName}-Documentation-PDF", - } - - actualPythonVersion = """${{ needs.Params_Systems.outputs.python_version }}""" - actualPythonJobs = json_loads("""${{ needs.Params_Systems.outputs.python_jobs }}""".replace("'", '"')) - actualArtifactNames = json_loads("""${{ needs.Params_Systems.outputs.artifact_names }}""".replace("'", '"')) - errors = 0 - - if actualPythonVersion != expectedPythonVersion: - print(f"'python_version' does not match: '{actualPythonVersion}' != '{expectedPythonVersion}'.") - errors += 1 - if len(actualPythonJobs) != len(expectedJobs): - print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") - print("Actual jobs:") - for job in actualPythonJobs: - if job['system'] == "msys2": - print(f" {job['runtime'].lower()}:{job['python']}") - else: - print(f" {job['system']}:{job['python']}") - print("Expected jobs:") - for job in expectedJobs: - print(f" {job}") - errors += 1 - if len(actualArtifactNames) != len(expectedArtifacts): - print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") - errors += 1 - else: - for key, actual, expected in zipdicts(actualArtifactNames, expectedArtifacts): - if actual != expected: - print(f"Artifact name '{key}' does not match: {actual} != {expected}.") - errors += 1 - - if errors == 0: - print(f"All checks PASSED.") - exit(errors) + - name: Checking job matrix from 'Params_Systems' + uses: ./.github/actions/CheckJobMatrix + with: + expected-default-version: '3.13' + expected-python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]' + expected-systems: '["windows"]' + expected-exclude-jobs: '[]' + expected-include-jobs: '["mingw64:3.12", "ucrt64:3.12"]' + generated-default-version: ${{ needs.Params_Systems.outputs.python_version }} + generated-jobmatrix: ${{ needs.Params_Systems.outputs.python_jobs }} Params_Check_Include: needs: @@ -297,75 +135,19 @@ jobs: run: shell: python steps: - - name: Install dependencies - shell: bash - run: pip install --disable-pip-version-check --break-system-packages pyTooling + - name: Checkout repository to access local Action + uses: actions/checkout@v5 - - name: Checking results from 'Params_Include' - run: | - from json import loads as json_loads - from sys import exit - - from pyTooling.Common import zipdicts - - expectedPythonVersion = "3.13" - expectedPythons = ["3.12"] - expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"] - excludedJobs = [] - includeJobs = ["ubuntu:3.13", "ubuntu:3.14", "ubuntu-arm:3.12"] - expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs - expectedName = "Example" - expectedArtifacts = { - "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", - "unittesting_html": f"{expectedName}-UnitTestReportSummary-HTML", - "perftesting_xml": f"{expectedName}-PerformanceTestReportSummary-XML", - "benchtesting_xml": f"{expectedName}-BenchmarkTestReportSummary-XML", - "apptesting_xml": f"{expectedName}-ApplicationTestReportSummary-XML", - "codecoverage_sqlite": f"{expectedName}-CodeCoverage-SQLite", - "codecoverage_xml": f"{expectedName}-CodeCoverage-XML", - "codecoverage_json": f"{expectedName}-CodeCoverage-JSON", - "codecoverage_html": f"{expectedName}-CodeCoverage-HTML", - "statictyping_cobertura": f"{expectedName}-StaticTyping-Cobertura-XML", - "statictyping_junit": f"{expectedName}-StaticTyping-JUnit-XML", - "statictyping_html": f"{expectedName}-StaticTyping-HTML", - "package_all": f"{expectedName}-Packages", - "documentation_html": f"{expectedName}-Documentation-HTML", - "documentation_latex": f"{expectedName}-Documentation-LaTeX", - "documentation_pdf": f"{expectedName}-Documentation-PDF", - } - - actualPythonVersion = """${{ needs.Params_Include.outputs.python_version }}""" - actualPythonJobs = json_loads("""${{ needs.Params_Include.outputs.python_jobs }}""".replace("'", '"')) - actualArtifactNames = json_loads("""${{ needs.Params_Include.outputs.artifact_names }}""".replace("'", '"')) - errors = 0 - - if actualPythonVersion != expectedPythonVersion: - print(f"'python_version' does not match: '{actualPythonVersion}' != '{expectedPythonVersion}'.") - errors += 1 - if len(actualPythonJobs) != len(expectedJobs): - print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") - print("Actual jobs:") - for job in actualPythonJobs: - if job['system'] == "msys2": - print(f" {job['runtime'].lower()}:{job['python']}") - else: - print(f" {job['system']}:{job['python']}") - print("Expected jobs:") - for job in expectedJobs: - print(f" {job}") - errors += 1 - if len(actualArtifactNames) != len(expectedArtifacts): - print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") - errors += 1 - else: - for key, actual, expected in zipdicts(actualArtifactNames, expectedArtifacts): - if actual != expected: - print(f"Artifact name '{key}' does not match: {actual} != {expected}.") - errors += 1 - - if errors == 0: - print(f"All checks PASSED.") - exit(errors) + - name: Checking job matrix from 'Params_Include' + uses: ./.github/actions/CheckJobMatrix + with: + expected-default-version: '3.13' + expected-python-versions: '["3.12"]' + expected-systems: '["ubuntu", "windows", "macos", "macos-arm"]' + expected-exclude-jobs: '[]' + expected-include-jobs: '["ubuntu:3.13", "ubuntu:3.14", "ubuntu-arm:3.12"]' + generated-default-version: ${{ needs.Params_Include.outputs.python_version }} + generated-jobmatrix: ${{ needs.Params_Include.outputs.python_jobs }} Params_Check_Exclude: needs: @@ -375,75 +157,19 @@ jobs: run: shell: python steps: - - name: Install dependencies - shell: bash - run: pip install --disable-pip-version-check --break-system-packages pyTooling + - name: Checkout repository to access local Action + uses: actions/checkout@v5 - - name: Checking results from 'Params_Exclude' - run: | - from json import loads as json_loads - from sys import exit - - from pyTooling.Common import zipdicts - - expectedPythonVersion = "3.13" - expectedPythons = ["3.13"] - expectedSystems = ["ubuntu", "macos", "macos-arm"] - excludedJobs = [] - includeJobs = [] - expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs - expectedName = "Example" - expectedArtifacts = { - "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", - "unittesting_html": f"{expectedName}-UnitTestReportSummary-HTML", - "perftesting_xml": f"{expectedName}-PerformanceTestReportSummary-XML", - "benchtesting_xml": f"{expectedName}-BenchmarkTestReportSummary-XML", - "apptesting_xml": f"{expectedName}-ApplicationTestReportSummary-XML", - "codecoverage_sqlite": f"{expectedName}-CodeCoverage-SQLite", - "codecoverage_xml": f"{expectedName}-CodeCoverage-XML", - "codecoverage_json": f"{expectedName}-CodeCoverage-JSON", - "codecoverage_html": f"{expectedName}-CodeCoverage-HTML", - "statictyping_cobertura": f"{expectedName}-StaticTyping-Cobertura-XML", - "statictyping_junit": f"{expectedName}-StaticTyping-JUnit-XML", - "statictyping_html": f"{expectedName}-StaticTyping-HTML", - "package_all": f"{expectedName}-Packages", - "documentation_html": f"{expectedName}-Documentation-HTML", - "documentation_latex": f"{expectedName}-Documentation-LaTeX", - "documentation_pdf": f"{expectedName}-Documentation-PDF", - } - - actualPythonVersion = """${{ needs.Params_Exclude.outputs.python_version }}""" - actualPythonJobs = json_loads("""${{ needs.Params_Exclude.outputs.python_jobs }}""".replace("'", '"')) - actualArtifactNames = json_loads("""${{ needs.Params_Exclude.outputs.artifact_names }}""".replace("'", '"')) - errors = 0 - - if actualPythonVersion != expectedPythonVersion: - print(f"'python_version' does not match: '{actualPythonVersion}' != '{expectedPythonVersion}'.") - errors += 1 - if len(actualPythonJobs) != len(expectedJobs): - print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") - print("Actual jobs:") - for job in actualPythonJobs: - if job['system'] == "msys2": - print(f" {job['runtime'].lower()}:{job['python']}") - else: - print(f" {job['system']}:{job['python']}") - print("Expected jobs:") - for job in expectedJobs: - print(f" {job}") - errors += 1 - if len(actualArtifactNames) != len(expectedArtifacts): - print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") - errors += 1 - else: - for key, actual, expected in zipdicts(actualArtifactNames, expectedArtifacts): - if actual != expected: - print(f"Artifact name '{key}' does not match: {actual} != {expected}.") - errors += 1 - - if errors == 0: - print(f"All checks PASSED.") - exit(errors) + - name: Checking job matrix from 'Params_Exclude' + uses: ./.github/actions/CheckJobMatrix + with: + expected-default-version: '3.13' + expected-python-versions: '["3.13"]' + expected-systems: '["ubuntu", "macos", "macos-arm"]' + expected-exclude-jobs: '[]' + expected-include-jobs: '[]' + generated-default-version: ${{ needs.Params_Exclude.outputs.python_version }} + generated-jobmatrix: ${{ needs.Params_Exclude.outputs.python_jobs }} Params_Check_Disable: needs: @@ -453,75 +179,19 @@ jobs: run: shell: python steps: - - name: Install dependencies - shell: bash - run: pip install --disable-pip-version-check --break-system-packages pyTooling + - name: Checkout repository to access local Action + uses: actions/checkout@v5 - - name: Checking results from 'Params_Disable' - run: | - from json import loads as json_loads - from sys import exit - - from pyTooling.Common import zipdicts - - expectedPythonVersion = "3.13" - expectedPythons = ["3.13"] - expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"] - excludedJobs = ["windows:3.13"] - includeJobs = [] - expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs - expectedName = "Example" - expectedArtifacts = { - "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", - "unittesting_html": f"{expectedName}-UnitTestReportSummary-HTML", - "perftesting_xml": f"{expectedName}-PerformanceTestReportSummary-XML", - "benchtesting_xml": f"{expectedName}-BenchmarkTestReportSummary-XML", - "apptesting_xml": f"{expectedName}-ApplicationTestReportSummary-XML", - "codecoverage_sqlite": f"{expectedName}-CodeCoverage-SQLite", - "codecoverage_xml": f"{expectedName}-CodeCoverage-XML", - "codecoverage_json": f"{expectedName}-CodeCoverage-JSON", - "codecoverage_html": f"{expectedName}-CodeCoverage-HTML", - "statictyping_cobertura": f"{expectedName}-StaticTyping-Cobertura-XML", - "statictyping_junit": f"{expectedName}-StaticTyping-JUnit-XML", - "statictyping_html": f"{expectedName}-StaticTyping-HTML", - "package_all": f"{expectedName}-Packages", - "documentation_html": f"{expectedName}-Documentation-HTML", - "documentation_latex": f"{expectedName}-Documentation-LaTeX", - "documentation_pdf": f"{expectedName}-Documentation-PDF", - } - - actualPythonVersion = """${{ needs.Params_Disable.outputs.python_version }}""" - actualPythonJobs = json_loads("""${{ needs.Params_Disable.outputs.python_jobs }}""".replace("'", '"')) - actualArtifactNames = json_loads("""${{ needs.Params_Disable.outputs.artifact_names }}""".replace("'", '"')) - errors = 0 - - if actualPythonVersion != expectedPythonVersion: - print(f"'python_version' does not match: '{actualPythonVersion}' != '{expectedPythonVersion}'.") - errors += 1 - if len(actualPythonJobs) != len(expectedJobs): - print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") - print("Actual jobs:") - for job in actualPythonJobs: - if job['system'] == "msys2": - print(f" {job['runtime'].lower()}:{job['python']}") - else: - print(f" {job['system']}:{job['python']}") - print("Expected jobs:") - for job in expectedJobs: - print(f" {job}") - errors += 1 - if len(actualArtifactNames) != len(expectedArtifacts): - print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") - errors += 1 - else: - for key, actual, expected in zipdicts(actualArtifactNames, expectedArtifacts): - if actual != expected: - print(f"Artifact name '{key}' does not match: {actual} != {expected}.") - errors += 1 - - if errors == 0: - print(f"All checks PASSED.") - exit(errors) + - name: Checking job matrix from 'Params_Disable' + uses: ./.github/actions/CheckJobMatrix + with: + expected-default-version: '3.13' + expected-python-versions: '["3.13"]' + expected-systems: '["ubuntu", "windows", "macos", "macos-arm"]' + expected-exclude-jobs: '["windows:3.13"]' + expected-include-jobs: '[]' + generated-default-version: ${{ needs.Params_Disable.outputs.python_version }} + generated-jobmatrix: ${{ needs.Params_Disable.outputs.python_jobs }} Params_Check_All: needs: @@ -531,72 +201,16 @@ jobs: run: shell: python steps: - - name: Install dependencies - shell: bash - run: pip install --disable-pip-version-check --break-system-packages pyTooling - - - name: Checking results from 'Params_All' - run: | - from json import loads as json_loads - from sys import exit - - from pyTooling.Common import zipdicts - - expectedPythonVersion = "3.13" - expectedPythons = ["3.12", "3.13"] - expectedSystems = ["ubuntu", "macos-arm", "windows"] - excludedJobs = [] - includeJobs = ["windows:3.10", "windows:3.11", "windows:3.13"] - expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs - expectedName = "Example" - expectedArtifacts = { - "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", - "unittesting_html": f"{expectedName}-UnitTestReportSummary-HTML", - "perftesting_xml": f"{expectedName}-PerformanceTestReportSummary-XML", - "benchtesting_xml": f"{expectedName}-BenchmarkTestReportSummary-XML", - "apptesting_xml": f"{expectedName}-ApplicationTestReportSummary-XML", - "codecoverage_sqlite": f"{expectedName}-CodeCoverage-SQLite", - "codecoverage_xml": f"{expectedName}-CodeCoverage-XML", - "codecoverage_json": f"{expectedName}-CodeCoverage-JSON", - "codecoverage_html": f"{expectedName}-CodeCoverage-HTML", - "statictyping_cobertura": f"{expectedName}-StaticTyping-Cobertura-XML", - "statictyping_junit": f"{expectedName}-StaticTyping-JUnit-XML", - "statictyping_html": f"{expectedName}-StaticTyping-HTML", - "package_all": f"{expectedName}-Packages", - "documentation_html": f"{expectedName}-Documentation-HTML", - "documentation_latex": f"{expectedName}-Documentation-LaTeX", - "documentation_pdf": f"{expectedName}-Documentation-PDF", - } - - actualPythonVersion = """${{ needs.Params_All.outputs.python_version }}""" - actualPythonJobs = json_loads("""${{ needs.Params_All.outputs.python_jobs }}""".replace("'", '"')) - actualArtifactNames = json_loads("""${{ needs.Params_All.outputs.artifact_names }}""".replace("'", '"')) - errors = 0 - - if actualPythonVersion != expectedPythonVersion: - print(f"'python_version' does not match: '{actualPythonVersion}' != '{expectedPythonVersion}'.") - errors += 1 - if len(actualPythonJobs) != len(expectedJobs): - print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") - print("Actual jobs:") - for job in actualPythonJobs: - if job['system'] == "msys2": - print(f" {job['runtime'].lower()}:{job['python']}") - else: - print(f" {job['system']}:{job['python']}") - print("Expected jobs:") - for job in expectedJobs: - print(f" {job}") - errors += 1 - if len(actualArtifactNames) != len(expectedArtifacts): - print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") - errors += 1 - else: - for key, actual, expected in zipdicts(actualArtifactNames, expectedArtifacts): - if actual != expected: - print(f"Artifact name '{key}' does not match: {actual} != {expected}.") - errors += 1 - - if errors == 0: - print(f"All checks PASSED.") - exit(errors) + - name: Checkout repository to access local Action + uses: actions/checkout@v5 + + - name: Checking job matrix from 'Params_All' + uses: ./.github/actions/CheckJobMatrix + with: + expected-default-version: '3.13' + expected-python-versions: '["3.12", "3.13"]' + expected-systems: '["ubuntu", "windows", "macos-arm"]' + expected-exclude-jobs: '[]' + expected-include-jobs: '["windows:3.10", "windows:3.11", "windows:3.13"]' + generated-default-version: ${{ needs.Params_All.outputs.python_version }} + generated-jobmatrix: ${{ needs.Params_All.outputs.python_jobs }} From 77ed5bb3432bd8b5c22d09e13fc855048d2715ca Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sat, 18 Oct 2025 23:41:43 +0200 Subject: [PATCH 4/7] Check job matrix. --- .github/actions/CheckArtifactNames/action.yml | 7 ++-- .github/actions/CheckJobMatrix/action.yml | 36 ++++++++++++------- .github/workflows/_Checking_JobTemplates.yml | 3 +- .../_Checking_NamespacePackage_Pipeline.yml | 1 + .github/workflows/_Checking_Parameters.yml | 14 ++++---- .../_Checking_SimplePackage_Pipeline.yml | 1 + 6 files changed, 37 insertions(+), 25 deletions(-) diff --git a/.github/actions/CheckArtifactNames/action.yml b/.github/actions/CheckArtifactNames/action.yml index eaffd79..688da72 100644 --- a/.github/actions/CheckArtifactNames/action.yml +++ b/.github/actions/CheckArtifactNames/action.yml @@ -25,11 +25,12 @@ runs: - name: Check artifact names id: check shell: python - working-directory: ${{ inputs.path }} run: | from pyTooling.Common import zipdicts - expectedName = "Example" + actualArtifactNames = json_loads("""${{ inputs.generated-names }}""".replace("'", '"')) + + expectedName = "${{ inputs.prefix }}" expectedArtifacts = { "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_html": f"{expectedName}-UnitTestReportSummary-HTML", @@ -49,9 +50,7 @@ runs: "documentation_pdf": f"{expectedName}-Documentation-PDF", } - actualArtifactNames = json_loads("""${{ inputs }}""".replace("'", '"')) errors = 0 - if len(actualArtifactNames) != len(expectedArtifacts): print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") errors += 1 diff --git a/.github/actions/CheckJobMatrix/action.yml b/.github/actions/CheckJobMatrix/action.yml index 51ac89e..54c475d 100644 --- a/.github/actions/CheckJobMatrix/action.yml +++ b/.github/actions/CheckJobMatrix/action.yml @@ -45,23 +45,23 @@ runs: from json import loads as json_loads from sys import exit - expectedPythonVersion = """${{ inputs.expected-default-version }}""" - expectedPythons = json_loads("""${{ inputs.expected-python-versions }}""".replace("'", '"')) - expectedSystems = json_loads("""${{ inputs.expected-systems }}""".replace("'", '"')) - excludedJobs = json_loads("""${{ inputs.expected-exclude-jobs }}""".replace("'", '"')) - includeJobs = json_loads("""${{ inputs.expected-include-jobs }}""".replace("'", '"')) - expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs - actualPythonVersion = """${{ inputs.generated-default-version }}""" actualPythonJobs = json_loads("""${{ inputs.generated-jobmatrix }}""".replace("'", '"')) - errors = 0 + expectedPythonVersion = """${{ inputs.expected-default-version }}""" + expectedPythons = json_loads("""${{ inputs.expected-python-versions }}""".replace("'", '"')) + expectedSystems = json_loads("""${{ inputs.expected-systems }}""".replace("'", '"')) + excludedJobs = json_loads("""${{ inputs.expected-exclude-jobs }}""".replace("'", '"')) + includeJobs = json_loads("""${{ inputs.expected-include-jobs }}""".replace("'", '"')) + expectedJobs = sorted([f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs) + + errors = 0 if actualPythonVersion != expectedPythonVersion: print(f"'python_version' does not match: '{actualPythonVersion}' != '{expectedPythonVersion}'.") errors += 1 if len(actualPythonJobs) != len(expectedJobs): - print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") + print(f"❌ Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") print("Actual jobs:") for job in actualPythonJobs: if job['system'] == "msys2": @@ -74,9 +74,19 @@ runs: print(f" {job}") errors += 1 else: - print("❌ Checking job matrix is not implemented") + print("✅ Number of 'python_jobs' as expected.") + print("Checking job combinations ...") + + actualJobs = sorted([f"{job['system'] if job['system'] != 'msys2' else job['runtime'].lower()}:{job['python']}" for job in actualPythonJobs]) + for actual, expected in zip(actualJobs, expectedJobs): + if actual != expected: + print(f" ❌ Job does not match: {actual} != {expected}.") + errors += 1 + else: + print(f" ☑ Job as expected: {actual}.") if errors == 0: - print(f"All checks PASSED.") - - exit(errors) + print("✅ All checks PASSED.") + else: + print(f"❌ Counted {errors} errors.") + exit(errors) diff --git a/.github/workflows/_Checking_JobTemplates.yml b/.github/workflows/_Checking_JobTemplates.yml index e057334..9339017 100644 --- a/.github/workflows/_Checking_JobTemplates.yml +++ b/.github/workflows/_Checking_JobTemplates.yml @@ -15,7 +15,8 @@ jobs: uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev with: package_name: 'myPackage' - python_version_list: '3.9 3.10 3.11 3.12 3.13 3.14 pypy-3.10 pypy-3.11' + python_version: '3.13' # workaround to use Sphinx in Python 3.13 for sphinx_reports not yet supporting lxml 6.0 + python_version_list: '3.10 3.11 3.12 3.13 3.14 pypy-3.10 pypy-3.11' disable_list: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11' PlatformTestingParams: diff --git a/.github/workflows/_Checking_NamespacePackage_Pipeline.yml b/.github/workflows/_Checking_NamespacePackage_Pipeline.yml index b937c9e..f12f00a 100644 --- a/.github/workflows/_Checking_NamespacePackage_Pipeline.yml +++ b/.github/workflows/_Checking_NamespacePackage_Pipeline.yml @@ -10,6 +10,7 @@ jobs: with: package_namespace: 'myFramework' package_name: 'Extension' + unittest_python_version: '3.13' # workaround to use Sphinx in Python 3.13 for sphinx_reports not yet supporting lxml 6.0 bandit: 'true' pylint: 'true' codecov: 'true' diff --git a/.github/workflows/_Checking_Parameters.yml b/.github/workflows/_Checking_Parameters.yml index 27ba22c..d83b6e0 100644 --- a/.github/workflows/_Checking_Parameters.yml +++ b/.github/workflows/_Checking_Parameters.yml @@ -97,7 +97,7 @@ jobs: - name: Checking job matrix from 'Params_PythonVersions' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.13' + expected-default-version: '3.14' 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"]' @@ -119,7 +119,7 @@ jobs: - name: Checking job matrix from 'Params_Systems' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.13' + expected-default-version: '3.14' expected-python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]' expected-systems: '["windows"]' expected-exclude-jobs: '[]' @@ -141,7 +141,7 @@ jobs: - name: Checking job matrix from 'Params_Include' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.13' + expected-default-version: '3.14' expected-python-versions: '["3.12"]' expected-systems: '["ubuntu", "windows", "macos", "macos-arm"]' expected-exclude-jobs: '[]' @@ -163,7 +163,7 @@ jobs: - name: Checking job matrix from 'Params_Exclude' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.13' + expected-default-version: '3.14' expected-python-versions: '["3.13"]' expected-systems: '["ubuntu", "macos", "macos-arm"]' expected-exclude-jobs: '[]' @@ -185,7 +185,7 @@ jobs: - name: Checking job matrix from 'Params_Disable' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.13' + expected-default-version: '3.14' expected-python-versions: '["3.13"]' expected-systems: '["ubuntu", "windows", "macos", "macos-arm"]' expected-exclude-jobs: '["windows:3.13"]' @@ -203,11 +203,11 @@ jobs: steps: - name: Checkout repository to access local Action uses: actions/checkout@v5 - + - name: Checking job matrix from 'Params_All' uses: ./.github/actions/CheckJobMatrix with: - expected-default-version: '3.13' + expected-default-version: '3.14' 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 9e8c670..c5d8290 100644 --- a/.github/workflows/_Checking_SimplePackage_Pipeline.yml +++ b/.github/workflows/_Checking_SimplePackage_Pipeline.yml @@ -9,6 +9,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@dev with: package_name: 'myPackage' + unittest_python_version: '3.13' # workaround to use Sphinx in Python 3.13 for sphinx_reports not yet supporting lxml 6.0 bandit: 'true' pylint: 'true' codecov: 'true' From 0edc7c4ca78c0cccb25a0db8db74c42f4bc4eb68 Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sun, 19 Oct 2025 00:24:32 +0200 Subject: [PATCH 5/7] Set Python alpha version to 3.15 --- .github/workflows/Parameters.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Parameters.yml b/.github/workflows/Parameters.yml index a40cb54..3fe0e1f 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -259,8 +259,8 @@ jobs: disable_list = "${{ inputs.disable_list }}".strip() currentMSYS2Version = "3.12" - currentAlphaVersion = "3.14" - currentAlphaRelease = "3.14.0-rc.3" + currentAlphaVersion = "3.15" + currentAlphaRelease = "3.15.0-a.1" if systems == "": print("::error title=Parameter::system_list is empty.") From 29b1e2d8eb0e516c91641000d9620df120f10d64 Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sun, 19 Oct 2025 00:30:25 +0200 Subject: [PATCH 6/7] Fixed artifact name checking. --- .github/actions/CheckArtifactNames/action.yml | 19 ++++++++++++++----- .github/workflows/_Checking_Parameters.yml | 4 ++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.github/actions/CheckArtifactNames/action.yml b/.github/actions/CheckArtifactNames/action.yml index 688da72..173addd 100644 --- a/.github/actions/CheckArtifactNames/action.yml +++ b/.github/actions/CheckArtifactNames/action.yml @@ -26,6 +26,9 @@ runs: id: check shell: python run: | + from json import loads as json_loads + from sys import exit + from pyTooling.Common import zipdicts actualArtifactNames = json_loads("""${{ inputs.generated-names }}""".replace("'", '"')) @@ -52,15 +55,21 @@ runs: errors = 0 if len(actualArtifactNames) != len(expectedArtifacts): - print(f"Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") + print(f"❌ Number of 'artifact_names' does not match: {len(actualArtifactNames)} != {len(expectedArtifacts)}.") errors += 1 else: + print("✅ Number of 'artifact_names' as expected.") + print("Checking artifact names ...") + for key, actual, expected in zipdicts(actualArtifactNames, expectedArtifacts): if actual != expected: - print(f"Artifact name '{key}' does not match: {actual} != {expected}.") + print(f" ❌ Artifact name '{key}' does not match: {actual} != {expected}.") errors += 1 + else: + print(f" ☑ Artifact name as expected: {key} ⇢ {actual}.") if errors == 0: - print(f"All checks PASSED.") - - exit(errors) + print("✅ All checks PASSED.") + else: + print(f"❌ Counted {errors} errors.") + exit(errors) diff --git a/.github/workflows/_Checking_Parameters.yml b/.github/workflows/_Checking_Parameters.yml index d83b6e0..e180e58 100644 --- a/.github/workflows/_Checking_Parameters.yml +++ b/.github/workflows/_Checking_Parameters.yml @@ -120,10 +120,10 @@ jobs: uses: ./.github/actions/CheckJobMatrix with: expected-default-version: '3.14' - expected-python-versions: '["3.9", "3.10", "3.11", "3.12", "3.13"]' + expected-python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' expected-systems: '["windows"]' expected-exclude-jobs: '[]' - expected-include-jobs: '["mingw64:3.12", "ucrt64:3.12"]' + expected-include-jobs: '["mingw32:3.12", "mingw64:3.12"]' generated-default-version: ${{ needs.Params_Systems.outputs.python_version }} generated-jobmatrix: ${{ needs.Params_Systems.outputs.python_jobs }} From 10c10d9566ea22081307c972e12794896f6b72df Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sun, 19 Oct 2025 01:04:46 +0200 Subject: [PATCH 7/7] Updated documentation accordingly. --- doc/JobTemplate/AllInOne/CompletePipeline.rst | 12 ++++++------ .../Documentation/SphinxDocumentation.rst | 2 +- doc/JobTemplate/Package/Package.rst | 2 +- doc/JobTemplate/Package/PublishOnPyPI.rst | 2 +- doc/JobTemplate/Quality/CheckDocumentation.rst | 2 +- doc/JobTemplate/Quality/StaticTypeCheck.rst | 2 +- doc/JobTemplate/Setup/ExtractConfiguration.rst | 2 +- doc/JobTemplate/Setup/Parameters.rst | 10 +++++----- doc/JobTemplate/_python_version.rst | 2 +- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/doc/JobTemplate/AllInOne/CompletePipeline.rst b/doc/JobTemplate/AllInOne/CompletePipeline.rst index 2b0ac8f..afacc2d 100644 --- a/doc/JobTemplate/AllInOne/CompletePipeline.rst +++ b/doc/JobTemplate/AllInOne/CompletePipeline.rst @@ -375,9 +375,9 @@ Parameter Summary +---------------------------------------------------------------------+----------+----------+---------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/package_name` | yes | string | — — — — | +---------------------------------------------------------------------+----------+----------+---------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/unittest_python_version` | no | string | ``'3.13'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/unittest_python_version` | no | string | ``'3.14'`` | +---------------------------------------------------------------------+----------+----------+---------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/unittest_python_version_list` | no | string | ``'3.9 3.10 3.11 3.12 3.13'`` | +| :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 windows macos macos-arm ucrt64'`` | +---------------------------------------------------------------------+----------+----------+---------------------------------------------------+ @@ -387,7 +387,7 @@ Parameter Summary +---------------------------------------------------------------------+----------+----------+---------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/unittest_disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'`` | +---------------------------------------------------------------------+----------+----------+---------------------------------------------------+ -| :ref:`JOBTMPL/CompletePipeline/Input/apptest_python_version` | no | string | ``'3.13'`` | +| :ref:`JOBTMPL/CompletePipeline/Input/apptest_python_version` | no | string | ``'3.14'`` | +---------------------------------------------------------------------+----------+----------+---------------------------------------------------+ | :ref:`JOBTMPL/CompletePipeline/Input/apptest_python_version_list` | no | string | ``''`` | +---------------------------------------------------------------------+----------+----------+---------------------------------------------------+ @@ -532,7 +532,7 @@ unittest_python_version :Type: string :Required: no -:Default Value: ``'3.13'`` +:Default Value: ``'3.14'`` :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 `__. @@ -550,7 +550,7 @@ unittest_python_version_list :Type: string :Required: no -:Default Value: ``'3.9 3.10 3.11 3.12 3.13'`` +:Default Value: ``'3.10 3.11 3.12 3.13 3.14'`` :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. @@ -625,7 +625,7 @@ apptest_python_version :Type: string :Required: no -:Default Value: ``'3.13'`` +:Default Value: ``'3.14'`` :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 29a903a..00e54b1 100644 --- a/doc/JobTemplate/Documentation/SphinxDocumentation.rst +++ b/doc/JobTemplate/Documentation/SphinxDocumentation.rst @@ -98,7 +98,7 @@ Parameter Summary +=========================================================================+==========+================+===================================================================+ | :ref:`JOBTMPL/SphinxDocumentation/Input/ubuntu_image_version` | no | string | ``'24.04'`` | +-------------------------------------------------------------------------+----------+----------------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/SphinxDocumentation/Input/python_version` | no | string | ``'3.13'`` | +| :ref:`JOBTMPL/SphinxDocumentation/Input/python_version` | no | string | ``'3.14'`` | +-------------------------------------------------------------------------+----------+----------------+-------------------------------------------------------------------+ | :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 fd6b4f9..fabb248 100644 --- a/doc/JobTemplate/Package/Package.rst +++ b/doc/JobTemplate/Package/Package.rst @@ -91,7 +91,7 @@ Parameter Summary +=====================================================================+==========+==========+===================================================================+ | :ref:`JOBTMPL/Package/Input/ubuntu_image_version` | no | string | ``'24.04'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/Package/Input/python_version` | no | string | ``'3.13'`` | +| :ref:`JOBTMPL/Package/Input/python_version` | no | string | ``'3.14'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ | :ref:`JOBTMPL/Package/Input/requirements` | no | string | ``''`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ diff --git a/doc/JobTemplate/Package/PublishOnPyPI.rst b/doc/JobTemplate/Package/PublishOnPyPI.rst index 219e075..a038ba3 100644 --- a/doc/JobTemplate/Package/PublishOnPyPI.rst +++ b/doc/JobTemplate/Package/PublishOnPyPI.rst @@ -116,7 +116,7 @@ Parameter Summary +=====================================================================+==========+==========+===================================================================+ | :ref:`JOBTMPL/PublishOnPyPI/Input/ubuntu_image_version` | no | string | ``'24.04'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/PublishOnPyPI/Input/python_version` | no | string | ``'3.13'`` | +| :ref:`JOBTMPL/PublishOnPyPI/Input/python_version` | no | string | ``'3.14'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ | :ref:`JOBTMPL/PublishOnPyPI/Input/requirements` | no | string | ``'wheel twine'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ diff --git a/doc/JobTemplate/Quality/CheckDocumentation.rst b/doc/JobTemplate/Quality/CheckDocumentation.rst index b8d292f..c8ca80c 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 | ``'24.04'`` | +-------------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/CheckDocumentation/Input/python_version` | no | string | ``'3.13'`` | +| :ref:`JOBTMPL/CheckDocumentation/Input/python_version` | no | string | ``'3.14'`` | +-------------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ | :ref:`JOBTMPL/CheckDocumentation/Input/directory` | yes | string | — — — — | +-------------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ diff --git a/doc/JobTemplate/Quality/StaticTypeCheck.rst b/doc/JobTemplate/Quality/StaticTypeCheck.rst index 7b237f0..cecedab 100644 --- a/doc/JobTemplate/Quality/StaticTypeCheck.rst +++ b/doc/JobTemplate/Quality/StaticTypeCheck.rst @@ -123,7 +123,7 @@ Parameter Summary +=====================================================================+==========+================+==========================================================================================================================================+ | :ref:`JOBTMPL/StaticTypeCheck/Input/ubuntu_image_version` | no | string | ``'24.04'`` | +---------------------------------------------------------------------+----------+----------------+------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`JOBTMPL/StaticTypeCheck/Input/python_version` | no | string | ``'3.13'`` | +| :ref:`JOBTMPL/StaticTypeCheck/Input/python_version` | no | string | ``'3.14'`` | +---------------------------------------------------------------------+----------+----------------+------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`JOBTMPL/StaticTypeCheck/Input/requirements` | no | string | ``'-r tests/requirements.txt'`` | +---------------------------------------------------------------------+----------+----------------+------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/doc/JobTemplate/Setup/ExtractConfiguration.rst b/doc/JobTemplate/Setup/ExtractConfiguration.rst index 4b78d84..1b8c0c5 100644 --- a/doc/JobTemplate/Setup/ExtractConfiguration.rst +++ b/doc/JobTemplate/Setup/ExtractConfiguration.rst @@ -107,7 +107,7 @@ Parameter Summary +=====================================================================+==========+==========+===================================================================+ | :ref:`JOBTMPL/ExtractConfiguration/Input/ubuntu_image_version` | no | string | ``'24.04'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/ExtractConfiguration/Input/python_version` | no | string | ``'3.13'`` | +| :ref:`JOBTMPL/ExtractConfiguration/Input/python_version` | no | string | ``'3.14'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ | :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 51cbc2c..fe08054 100644 --- a/doc/JobTemplate/Setup/Parameters.rst +++ b/doc/JobTemplate/Setup/Parameters.rst @@ -169,9 +169,9 @@ Parameter Summary +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ | :ref:`JOBTMPL/Parameters/Input/package_name` | no | string | ``''`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/Parameters/Input/python_version` | no | string | ``'3.13'`` | +| :ref:`JOBTMPL/Parameters/Input/python_version` | no | string | ``'3.14'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ -| :ref:`JOBTMPL/Parameters/Input/python_version_list` | no | string | ``'3.9 3.10 3.11 3.12 3.13'`` | +| :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 windows macos macos-arm mingw64 ucrt64'`` | +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ @@ -348,7 +348,7 @@ python_version :Type: string :Required: no -:Default Value: ``'3.13'`` +:Default Value: ``'3.14'`` :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 `__. @@ -364,7 +364,7 @@ python_version_list :Type: string :Required: no -:Default Value: ``'3.9 3.10 3.11 3.12 3.13'`` +:Default Value: ``'3.10 3.11 3.12 3.13 3.14'`` :Possible Values: A space separated list of valid Python versions conforming to the pattern ``.`` or ``pypy-.``. |br| See `actions/python-versions - available Python versions `__ @@ -563,7 +563,7 @@ python_version ============== :Type: string -:Default Value: ``'3.13'`` +:Default Value: ``'3.14'`` :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 f137334..2507a87 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.13'`` +:Default Value: ``'3.14'`` :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 `__.