Adding and testing ubuntu-arm and windows-arm support.

This commit is contained in:
Patrick Lehmann
2025-08-23 19:56:51 +02:00
parent 99c3752847
commit 817c84af2e
10 changed files with 237 additions and 127 deletions

View File

@@ -225,7 +225,7 @@ jobs:
python -m pip install --disable-pip-version-check -U install/*.whl python -m pip install --disable-pip-version-check -U install/*.whl
- name: ✅ Run application tests (Ubuntu/macOS) - name: ✅ Run application tests (Ubuntu/macOS)
if: matrix.system != 'windows' if: ( matrix.system != 'windows' && matrix.system != 'windows-arm' )
run: | run: |
export ENVIRONMENT_NAME="${{ matrix.envname }}" export ENVIRONMENT_NAME="${{ matrix.envname }}"
@@ -240,7 +240,7 @@ jobs:
fi fi
- name: ✅ Run application tests (Windows) - name: ✅ Run application tests (Windows)
if: matrix.system == 'windows' if: ( matrix.system == 'windows' || matrix.system == 'windows-arm' )
run: | run: |
$env:ENVIRONMENT_NAME = "${{ matrix.envname }}" $env:ENVIRONMENT_NAME = "${{ matrix.envname }}"

View File

@@ -46,7 +46,7 @@ on:
unittest_system_list: unittest_system_list:
description: 'Space separated list of systems to run tests on.' description: 'Space separated list of systems to run tests on.'
required: false required: false
default: 'ubuntu windows macos macos-arm mingw64 ucrt64' default: 'ubuntu ubuntu-arm windows windows-arm macos macos-arm mingw64 ucrt64'
type: string type: string
unittest_include_list: unittest_include_list:
description: 'Space separated list of system:python items to be included into the list of test.' description: 'Space separated list of system:python items to be included into the list of test.'
@@ -56,12 +56,12 @@ on:
unittest_exclude_list: unittest_exclude_list:
description: 'Space separated list of system:python items to be excluded from the list of test.' description: 'Space separated list of system:python items to be excluded from the list of test.'
required: false required: false
default: '' default: 'windows-arm:3.9 windows-arm:3.10'
type: string type: string
unittest_disable_list: unittest_disable_list:
description: 'Space separated list of system:python items to be disabled from the list of test.' description: 'Space separated list of system:python items to be disabled from the list of test.'
required: false required: false
default: '' default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11'
type: string type: string
apptest_python_version: apptest_python_version:
description: 'Python version.' description: 'Python version.'
@@ -76,7 +76,7 @@ on:
apptest_system_list: apptest_system_list:
description: 'Space separated list of systems to run tests on.' description: 'Space separated list of systems to run tests on.'
required: false required: false
default: 'ubuntu windows macos macos-arm ucrt64' default: 'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64'
type: string type: string
apptest_include_list: apptest_include_list:
description: 'Space separated list of system:python items to be included into the list of test.' description: 'Space separated list of system:python items to be included into the list of test.'
@@ -86,12 +86,12 @@ on:
apptest_exclude_list: apptest_exclude_list:
description: 'Space separated list of system:python items to be excluded from the list of test.' description: 'Space separated list of system:python items to be excluded from the list of test.'
required: false required: false
default: '' default: 'windows-arm:3.9 windows-arm:3.10'
type: string type: string
apptest_disable_list: apptest_disable_list:
description: 'Space separated list of system:python items to be disabled from the list of test.' description: 'Space separated list of system:python items to be disabled from the list of test.'
required: false required: false
default: '' default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11'
type: string type: string
codecov: codecov:
description: 'Publish merged coverage and unittest reports to Codecov.' description: 'Publish merged coverage and unittest reports to Codecov.'

View File

@@ -84,17 +84,17 @@ jobs:
python -m pip install --disable-pip-version-check -U wheel python -m pip install --disable-pip-version-check -U wheel
- name: 🔧 Install wheel from artifact (Ubuntu/macOS) - name: 🔧 Install wheel from artifact (Ubuntu/macOS)
if: matrix.system != 'windows' if: ( matrix.system != 'windows' && matrix.system != 'windows-arm' )
run: | run: |
python -m pip install --disable-pip-version-check -U install/*.whl python -m pip install --disable-pip-version-check -U install/*.whl
- name: 🔧 Install wheel from artifact (Windows) - name: 🔧 Install wheel from artifact (Windows)
if: matrix.system == 'windows' if: ( matrix.system == 'windows' || matrix.system == 'windows-arm' )
run: | run: |
python -m pip install -v --disable-pip-version-check (Get-Item .\install\*.whl).FullName python -m pip install -v --disable-pip-version-check (Get-Item .\install\*.whl).FullName
- name: 📦 Run application tests (Ubuntu/macOS) - name: 📦 Run application tests (Ubuntu/macOS)
if: matrix.system != 'windows' if: ( matrix.system != 'windows' && matrix.system != 'windows-arm' )
run: | run: |
set +e set +e
@@ -117,7 +117,7 @@ jobs:
fi fi
- name: 📦 Run application tests (Windows) - name: 📦 Run application tests (Windows)
if: matrix.system == 'windows' if: ( matrix.system == 'windows' || matrix.system == 'windows-arm' )
run: | run: |
$result=$(python -c "from ${{ inputs.package_name }} import __version__; print(f""Package version: {__version__}"")") $result=$(python -c "from ${{ inputs.package_name }} import __version__; print(f""Package version: {__version__}"")")
Write-Host $result Write-Host $result

View File

@@ -58,7 +58,7 @@ on:
system_list: system_list:
description: 'Space separated list of systems to run tests on.' description: 'Space separated list of systems to run tests on.'
required: false required: false
default: 'ubuntu windows macos macos-arm mingw64 ucrt64' default: 'ubuntu ubuntu-arm windows windows-arm macos macos-arm mingw64 ucrt64'
type: string type: string
include_list: include_list:
description: 'Space separated list of system:python items to be included into the list of test.' description: 'Space separated list of system:python items to be included into the list of test.'
@@ -68,23 +68,33 @@ on:
exclude_list: exclude_list:
description: 'Space separated list of system:python items to be excluded from the list of test.' description: 'Space separated list of system:python items to be excluded from the list of test.'
required: false required: false
default: '' default: 'windows-arm:3.9 windows-arm:3.10'
type: string type: string
disable_list: disable_list:
description: 'Space separated list of system:python items to be disabled from the list of test.' description: 'Space separated list of system:python items to be disabled from the list of test.'
required: false required: false
default: '' default: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11'
type: string type: string
ubuntu_image: ubuntu_image:
description: 'The used GitHub Action image for Ubuntu based jobs.' description: 'The used GitHub Action image for Ubuntu (x86-64) based jobs.'
required: false required: false
default: 'ubuntu-24.04' default: 'ubuntu-24.04'
type: string type: string
ubuntu_arm_image:
description: 'The used GitHub Action image for Ubuntu (aarch64) based jobs.'
required: false
default: 'ubuntu-24.04-arm'
type: string
windows_image: windows_image:
description: 'The used GitHub Action image for Windows based jobs.' description: 'The used GitHub Action image for Windows Server (x86-64) based jobs.'
required: false required: false
default: 'windows-2025' default: 'windows-2025'
type: string type: string
windows_arm_image:
description: 'The used GitHub Action image for Windows (aarch64) based jobs.'
required: false
default: 'windows-11-arm'
type: string
macos_intel_image: macos_intel_image:
description: 'The used GitHub Action image for macOS (Intel x86-64) based jobs.' description: 'The used GitHub Action image for macOS (Intel x86-64) based jobs.'
required: false required: false
@@ -93,7 +103,7 @@ on:
macos_arm_image: macos_arm_image:
description: 'The used GitHub Action image for macOS (ARM aarch64) based jobs.' description: 'The used GitHub Action image for macOS (ARM aarch64) based jobs.'
required: false required: false
default: 'macos-14' default: 'macos-15'
type: string type: string
pipeline-delay: pipeline-delay:
description: 'Slow down this job, to delay the startup of the GitHub Action pipline.' description: 'Slow down this job, to delay the startup of the GitHub Action pipline.'
@@ -160,7 +170,7 @@ jobs:
currentMSYS2Version = "3.12" currentMSYS2Version = "3.12"
currentAlphaVersion = "3.14" currentAlphaVersion = "3.14"
currentAlphaRelease = "3.14.0-alpha.1" currentAlphaRelease = "3.14.0-rc.2"
if systems == "": if systems == "":
print("::error title=Parameter::system_list is empty.") print("::error title=Parameter::system_list is empty.")
@@ -194,7 +204,7 @@ jobs:
if currentAlphaVersion in versions: if currentAlphaVersion in versions:
print(f"::notice title=Experimental::Python {currentAlphaVersion} ({currentAlphaRelease}) is a pre-release.") print(f"::notice title=Experimental::Python {currentAlphaVersion} ({currentAlphaRelease}) is a pre-release.")
for disable in disabled: for disable in disabled:
print(f"::warning title=Disabled Python Job::System '{disable}' temporarily disabled.") print(f"::warning title=Disabled Python Job::{name}: Job combination '{disable}' temporarily disabled.")
# see https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json # see https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json
data = { data = {
@@ -216,7 +226,9 @@ jobs:
# Runner systems (runner images) supported by GitHub Actions # Runner systems (runner images) supported by GitHub Actions
"sys": { "sys": {
"ubuntu": { "icon": "🐧", "runs-on": "${{ inputs.ubuntu_image }}", "shell": "bash", "name": "Linux (x86-64)" }, "ubuntu": { "icon": "🐧", "runs-on": "${{ inputs.ubuntu_image }}", "shell": "bash", "name": "Linux (x86-64)" },
"ubuntu-arm": { "icon": "⛄", "runs-on": "${{ inputs.ubuntu_arm_image }}", "shell": "bash", "name": "Linux (aarch64)" },
"windows": { "icon": "🪟", "runs-on": "${{ inputs.windows_image }}", "shell": "pwsh", "name": "Windows (x86-64)" }, "windows": { "icon": "🪟", "runs-on": "${{ inputs.windows_image }}", "shell": "pwsh", "name": "Windows (x86-64)" },
"windows-arm": { "icon": "🏢", "runs-on": "${{ inputs.windows_arm_image }}", "shell": "pwsh", "name": "Windows (aarch64)" },
"macos": { "icon": "🍎", "runs-on": "${{ inputs.macos_intel_image }}", "shell": "bash", "name": "macOS (x86-64)" }, "macos": { "icon": "🍎", "runs-on": "${{ inputs.macos_intel_image }}", "shell": "bash", "name": "macOS (x86-64)" },
"macos-arm": { "icon": "🍏", "runs-on": "${{ inputs.macos_arm_image }}", "shell": "bash", "name": "macOS (aarch64)" }, "macos-arm": { "icon": "🍏", "runs-on": "${{ inputs.macos_arm_image }}", "shell": "bash", "name": "macOS (aarch64)" },
}, },

View File

@@ -192,7 +192,7 @@ jobs:
run: brew install ${{ inputs.brew }} run: brew install ${{ inputs.brew }}
- name: 🔧 Install apt dependencies on Ubuntu - name: 🔧 Install apt dependencies on Ubuntu
if: matrix.system == 'ubuntu' && inputs.apt != '' if: ( matrix.system == 'ubuntu' || matrix.system == 'ubuntu-arm' ) && inputs.apt != ''
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get install -y --no-install-recommends ${{ inputs.apt }} sudo apt-get install -y --no-install-recommends ${{ inputs.apt }}
@@ -346,7 +346,7 @@ jobs:
run: ${{ inputs.macos_arm_before_script }} run: ${{ inputs.macos_arm_before_script }}
- name: 🐧 Ubuntu before scripts - name: 🐧 Ubuntu before scripts
if: matrix.system == 'ubuntu' && inputs.ubuntu_before_script != '' if: ( matrix.system == 'ubuntu' || matrix.system == 'ubuntu-arm' ) && inputs.ubuntu_before_script != ''
run: ${{ inputs.ubuntu_before_script }} run: ${{ inputs.ubuntu_before_script }}
# Windows before script # Windows before script
@@ -363,7 +363,7 @@ jobs:
- name: ✅ Run unit tests (Ubuntu/macOS) - name: ✅ Run unit tests (Ubuntu/macOS)
id: pytest_bash id: pytest_bash
if: matrix.system != 'windows' if: ( matrix.system != 'windows' && matrix.system != 'windows-arm' )
continue-on-error: true continue-on-error: true
run: | run: |
export ENVIRONMENT_NAME="${{ matrix.envname }}" export ENVIRONMENT_NAME="${{ matrix.envname }}"
@@ -381,7 +381,7 @@ jobs:
- name: ✅ Run unit tests (Windows) - name: ✅ Run unit tests (Windows)
id: pytest_posh id: pytest_posh
if: matrix.system == 'windows' if: ( matrix.system == 'windows' || matrix.system == 'windows-arm' )
continue-on-error: true continue-on-error: true
run: | run: |
$env:ENVIRONMENT_NAME = "${{ matrix.envname }}" $env:ENVIRONMENT_NAME = "${{ matrix.envname }}"

View File

@@ -23,15 +23,15 @@ jobs:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: pyDummy name: pyDummy
python_version_list: "3.9 3.10 3.11 3.12 3.13 pypy-3.9 pypy-3.10" python_version_list: '3.9 3.10 3.11 3.12 3.13 pypy-3.10 pypy-3.11'
# disable_list: "windows:pypy-3.10" disable_list: 'windows-arm:pypy-3.10 windows-arm:pypy-3.11'
PlatformTestingParams: PlatformTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Platform name: Platform
python_version_list: "" python_version_list: ''
system_list: "ubuntu windows macos mingw64 clang64 ucrt64" system_list: 'ubuntu ubuntu-arm windows windows-arm macos mingw64 clang64 ucrt64'
UnitTesting: UnitTesting:
uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@dev uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@dev

View File

@@ -14,7 +14,7 @@ jobs:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.11 3.12 pypy-3.9 pypy-3.10" python_version_list: "3.12 3.13 pypy-3.10 pypy-3.11"
Params_Systems: Params_Systems:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
@@ -26,25 +26,25 @@ jobs:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.11" python_version_list: "3.12"
system_list: "ubuntu windows macos macos-arm" system_list: "ubuntu windows macos macos-arm"
include_list: "ubuntu:3.12 ubuntu:3.13" include_list: "ubuntu:3.13 ubuntu:3.14 ubuntu-arm:3.12"
Params_Exclude: Params_Exclude:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.12" python_version_list: "3.13"
system_list: "ubuntu windows macos macos-arm" system_list: "ubuntu windows macos macos-arm"
exclude_list: "windows:3.12 windows:3.13" exclude_list: "windows:3.13 windows:3.14"
Params_Disable: Params_Disable:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.12" python_version_list: "3.13"
system_list: "ubuntu windows macos macos-arm" system_list: "ubuntu windows macos macos-arm"
disable_list: "windows:3.12 windows:3.13" disable_list: "windows:3.13 windows:3.14"
Params_All: Params_All:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
@@ -55,15 +55,9 @@ jobs:
include_list: "windows:3.10 windows:3.11 windows:3.13" include_list: "windows:3.10 windows:3.11 windows:3.13"
exclude_list: "macos:3.12 macos:3.13" exclude_list: "macos:3.12 macos:3.13"
Params_Check: Params_Check_Default:
needs: needs:
- Params_Default - Params_Default
- Params_PythonVersions
- Params_Systems
- Params_Include
- Params_Exclude
- Params_Disable
- Params_All
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
defaults: defaults:
run: run:
@@ -72,7 +66,7 @@ jobs:
- name: Install dependencies - name: Install dependencies
shell: bash shell: bash
run: pip install --disable-pip-version-check --break-system-packages pyTooling run: pip install --disable-pip-version-check --break-system-packages pyTooling
# Params_Default
- name: Checking results from 'Params_Default' - name: Checking results from 'Params_Default'
run: | run: |
from json import loads as json_loads from json import loads as json_loads
@@ -82,8 +76,10 @@ jobs:
expectedPythonVersion = "3.13" expectedPythonVersion = "3.13"
expectedPythons = ["3.9", "3.10", "3.11", "3.12", "3.13"] expectedPythons = ["3.9", "3.10", "3.11", "3.12", "3.13"]
expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"] expectedSystems = ["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["mingw64:3.12", "ucrt64:3.11"] 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" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",
@@ -135,7 +131,18 @@ jobs:
print(f"All checks PASSED.") print(f"All checks PASSED.")
exit(errors) exit(errors)
# Params_PythonVersions Params_Check_PythonVersions:
needs:
- Params_PythonVersions
runs-on: ubuntu-24.04
defaults:
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_PythonVersions' - name: Checking results from 'Params_PythonVersions'
run: | run: |
from json import loads as json_loads from json import loads as json_loads
@@ -144,9 +151,11 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.13" expectedPythonVersion = "3.13"
expectedPythons = ["3.11", "3.12", "pypy-3.9", "pypy-3.10"] expectedPythons = ["3.12", "3.13", "pypy-3.10", "pypy-3.11"]
expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"] expectedSystems = ["ubuntu", "ubuntu-arm", "windows", "windows-arm", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["mingw64:3.12", "ucrt64:3.11"] 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" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",
@@ -198,7 +207,18 @@ jobs:
print(f"All checks PASSED.") print(f"All checks PASSED.")
exit(errors) exit(errors)
# Params_Systems Params_Check_Systems:
needs:
- Params_Systems
runs-on: ubuntu-24.04
defaults:
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_Systems' - name: Checking results from 'Params_Systems'
run: | run: |
from json import loads as json_loads from json import loads as json_loads
@@ -209,7 +229,9 @@ jobs:
expectedPythonVersion = "3.13" expectedPythonVersion = "3.13"
expectedPythons = ["3.9", "3.10", "3.11", "3.12", "3.13"] expectedPythons = ["3.9", "3.10", "3.11", "3.12", "3.13"]
expectedSystems = ["windows"] expectedSystems = ["windows"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["mingw32:3.12", "mingw64:3.11"] 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" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",
@@ -261,7 +283,18 @@ jobs:
print(f"All checks PASSED.") print(f"All checks PASSED.")
exit(errors) exit(errors)
# Params_Include Params_Check_Include:
needs:
- Params_Include
runs-on: ubuntu-24.04
defaults:
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_Include' - name: Checking results from 'Params_Include'
run: | run: |
from json import loads as json_loads from json import loads as json_loads
@@ -272,7 +305,9 @@ jobs:
expectedPythonVersion = "3.13" expectedPythonVersion = "3.13"
expectedPythons = ["3.12"] expectedPythons = ["3.12"]
expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"] expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["ubuntu:3.11", "ubuntu:3.12"] 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" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",
@@ -324,7 +359,18 @@ jobs:
print(f"All checks PASSED.") print(f"All checks PASSED.")
exit(errors) exit(errors)
# Params_Exclude Params_Check_Exclude:
needs:
- Params_Exclude
runs-on: ubuntu-24.04
defaults:
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_Exclude' - name: Checking results from 'Params_Exclude'
run: | run: |
from json import loads as json_loads from json import loads as json_loads
@@ -333,9 +379,11 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.13" expectedPythonVersion = "3.13"
expectedPythons = ["3.12"] expectedPythons = ["3.13"]
expectedSystems = ["ubuntu", "macos", "macos-arm"] expectedSystems = ["ubuntu", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] excludedJobs = []
includeJobs = []
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons if f"{system}:{python}" not in excludedJobs] + includeJobs
expectedName = "Example" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",
@@ -387,7 +435,18 @@ jobs:
print(f"All checks PASSED.") print(f"All checks PASSED.")
exit(errors) exit(errors)
# Params_Disable Params_Check_Disable:
needs:
- Params_Disable
runs-on: ubuntu-24.04
defaults:
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_Disable' - name: Checking results from 'Params_Disable'
run: | run: |
from json import loads as json_loads from json import loads as json_loads
@@ -396,9 +455,11 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.13" expectedPythonVersion = "3.13"
expectedPythons = ["3.12"] expectedPythons = ["3.13"]
expectedSystems = ["ubuntu", "macos", "macos-arm"] expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] 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" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",
@@ -417,9 +478,9 @@ jobs:
"documentation_pdf": f"{expectedName}-Documentation-PDF", "documentation_pdf": f"{expectedName}-Documentation-PDF",
} }
actualPythonVersion = """${{ needs.Params_Exclude.outputs.python_version }}""" actualPythonVersion = """${{ needs.Params_Disable.outputs.python_version }}"""
actualPythonJobs = json_loads("""${{ needs.Params_Exclude.outputs.python_jobs }}""".replace("'", '"')) actualPythonJobs = json_loads("""${{ needs.Params_Disable.outputs.python_jobs }}""".replace("'", '"'))
actualArtifactNames = json_loads("""${{ needs.Params_Exclude.outputs.artifact_names }}""".replace("'", '"')) actualArtifactNames = json_loads("""${{ needs.Params_Disable.outputs.artifact_names }}""".replace("'", '"'))
errors = 0 errors = 0
if actualPythonVersion != expectedPythonVersion: if actualPythonVersion != expectedPythonVersion:
@@ -450,7 +511,18 @@ jobs:
print(f"All checks PASSED.") print(f"All checks PASSED.")
exit(errors) exit(errors)
# Params_All Params_Check_All:
needs:
- Params_All
runs-on: ubuntu-24.04
defaults:
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' - name: Checking results from 'Params_All'
run: | run: |
from json import loads as json_loads from json import loads as json_loads
@@ -461,7 +533,9 @@ jobs:
expectedPythonVersion = "3.13" expectedPythonVersion = "3.13"
expectedPythons = ["3.12", "3.13"] expectedPythons = ["3.12", "3.13"]
expectedSystems = ["ubuntu", "macos-arm", "windows"] expectedSystems = ["ubuntu", "macos-arm", "windows"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["windows:3.10", "windows:3.11", "windows:3.13"] 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" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",

View File

@@ -218,45 +218,45 @@ Parameter Summary
.. rubric:: Goto :ref:`input parameters <JOBTMPL/CompletePipeline/Inputs>` .. rubric:: Goto :ref:`input parameters <JOBTMPL/CompletePipeline/Inputs>`
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| Parameter Name | Required | Type | Default | | Parameter Name | Required | Type | Default |
+=====================================================================+==========+==========+==============================================+ +=====================================================================+==========+==========+=================================================+
| :ref:`JOBTMPL/CompletePipeline/Input/package_namespace` | no | string | ``''`` | | :ref:`JOBTMPL/CompletePipeline/Input/package_namespace` | no | string | ``''`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/package_name` | yes | string | — — — — | | :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.13'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :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.9 3.10 3.11 3.12 3.13'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/unittest_system_list` | no | string | ``'ubuntu windows macos macos-arm ucrt64'`` | | :ref:`JOBTMPL/CompletePipeline/Input/unittest_system_list` | no | string | ``'ubuntu windows macos macos-arm ucrt64'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/unittest_include_list` | no | string | ``''`` | | :ref:`JOBTMPL/CompletePipeline/Input/unittest_include_list` | no | string | ``''`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/unittest_exclude_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_disable_list` | no | string | ``''`` | | :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.13'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/apptest_python_version_list` | no | string | ``''`` | | :ref:`JOBTMPL/CompletePipeline/Input/apptest_python_version_list` | no | string | ``''`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/apptest_system_list` | no | string | ``'ubuntu windows macos macos-arm ucrt64'`` | | :ref:`JOBTMPL/CompletePipeline/Input/apptest_system_list` | no | string | ``'ubuntu windows macos macos-arm ucrt64'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/apptest_include_list` | no | string | ``''`` | | :ref:`JOBTMPL/CompletePipeline/Input/apptest_include_list` | no | string | ``''`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/apptest_exclude_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_disable_list` | no | string | ``''`` | | :ref:`JOBTMPL/CompletePipeline/Input/apptest_disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/codecov` | no | string | ``'false'`` | | :ref:`JOBTMPL/CompletePipeline/Input/codecov` | no | string | ``'false'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/codacy` | no | string | ``'false'`` | | :ref:`JOBTMPL/CompletePipeline/Input/codacy` | no | string | ``'false'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/dorny` | no | string | ``'false'`` | | :ref:`JOBTMPL/CompletePipeline/Input/dorny` | no | string | ``'false'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
| :ref:`JOBTMPL/CompletePipeline/Input/cleanup` | no | string | ``'true'`` | | :ref:`JOBTMPL/CompletePipeline/Input/cleanup` | no | string | ``'true'`` |
+---------------------------------------------------------------------+----------+----------+----------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------+
.. rubric:: Goto Goto :ref:`secrets <JOBTMPL/CompletePipeline/Secrets>` .. rubric:: Goto Goto :ref:`secrets <JOBTMPL/CompletePipeline/Secrets>`
@@ -441,7 +441,7 @@ unittest_exclude_list
:Type: string :Type: string
:Required: no :Required: no
:Default Value: ``''`` :Default Value: ``'windows-arm:3.9 windows-arm:3.10'``
:Possible Values: A space separated list of ``<system>:<python_version>`` tuples. :Possible Values: A space separated list of ``<system>:<python_version>`` tuples.
:Description: :Description:
@@ -453,7 +453,7 @@ unittest_disable_list
:Type: string :Type: string
:Required: no :Required: no
:Default Value: ``''`` :Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'``
:Possible Values: A space separated list of ``<system>:<python_version>`` tuples. :Possible Values: A space separated list of ``<system>:<python_version>`` tuples.
:Description: :Description:
@@ -527,7 +527,7 @@ apptest_exclude_list
:Type: string :Type: string
:Required: no :Required: no
:Default Value: ``''`` :Default Value: ``'windows-arm:3.9 windows-arm:3.10'``
:Possible Values: A space separated list of ``<system>:<python_version>`` tuples. :Possible Values: A space separated list of ``<system>:<python_version>`` tuples.
:Description: :Description:
@@ -539,7 +539,7 @@ apptest_disable_list
:Type: string :Type: string
:Required: no :Required: no
:Default Value: ``''`` :Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'``
:Possible Values: A space separated list of ``<system>:<python_version>`` tuples. :Possible Values: A space separated list of ``<system>:<python_version>`` tuples.
:Description: :Description:

View File

@@ -168,9 +168,9 @@ Parameter Summary
+---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+
| :ref:`JOBTMPL/Parameters/Input/include_list` | no | string | ``''`` | | :ref:`JOBTMPL/Parameters/Input/include_list` | no | string | ``''`` |
+---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+
| :ref:`JOBTMPL/Parameters/Input/exclude_list` | no | string | ``''`` | | :ref:`JOBTMPL/Parameters/Input/exclude_list` | no | string | ``'windows-arm:3.9 windows-arm:3.10'`` |
+---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+
| :ref:`JOBTMPL/Parameters/Input/disable_list` | no | string | ``''`` | | :ref:`JOBTMPL/Parameters/Input/disable_list` | no | string | ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'`` |
+---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+
| :ref:`JOBTMPL/Parameters/Input/ubuntu_image` | no | string | ``'ubuntu-24.04'`` | | :ref:`JOBTMPL/Parameters/Input/ubuntu_image` | no | string | ``'ubuntu-24.04'`` |
+---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+
@@ -182,7 +182,7 @@ Parameter Summary
+---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+
| :ref:`JOBTMPL/Parameters/Input/macos_intel_image` | no | string | ``'macos-13'`` | | :ref:`JOBTMPL/Parameters/Input/macos_intel_image` | no | string | ``'macos-13'`` |
+---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+
| :ref:`JOBTMPL/Parameters/Input/macos_arm_image` | no | string | ``'macos-14'`` | | :ref:`JOBTMPL/Parameters/Input/macos_arm_image` | no | string | ``'macos-15'`` |
+---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+
| :ref:`JOBTMPL/Parameters/Input/pipeline-delay` | no | number | ``0`` | | :ref:`JOBTMPL/Parameters/Input/pipeline-delay` | no | number | ``0`` |
+---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+ +---------------------------------------------------------------------+----------+----------+-------------------------------------------------------------------+
@@ -418,7 +418,7 @@ exclude_list
:Type: string :Type: string
:Required: no :Required: no
:Default Value: ``''`` :Default Value: ``'windows-arm:3.9 windows-arm:3.10'``
:Possible Values: A space separated list of ``<system>:<python_version>`` tuples. :Possible Values: A space separated list of ``<system>:<python_version>`` tuples.
:Description: List of space-separated ``<system>:<python_version>`` tuples to be excluded from the list of test :Description: List of space-separated ``<system>:<python_version>`` tuples to be excluded from the list of test
variants. variants.
@@ -440,7 +440,7 @@ disable_list
:Type: string :Type: string
:Required: no :Required: no
:Default Value: ``''`` :Default Value: ``'windows-arm:pypy-3.10 windows-arm:pypy-3.11'``
:Possible Values: A space separated list of ``<system>:<python_version>`` tuples. :Possible Values: A space separated list of ``<system>:<python_version>`` tuples.
:Description: List of space-separated ``<system>:<python_version>`` tuples to be temporarily disabled from the list :Description: List of space-separated ``<system>:<python_version>`` tuples to be temporarily disabled from the list
of test variants. |br| of test variants. |br|
@@ -471,6 +471,18 @@ ubuntu_image
:Description: Name of the Ubuntu x86-64 image and version used to run a Ubuntu jobs when selected via :ref:`JOBTMPL/Parameters/Input/system_list`. :Description: Name of the Ubuntu x86-64 image and version used to run a Ubuntu jobs when selected via :ref:`JOBTMPL/Parameters/Input/system_list`.
.. _JOBTMPL/Parameters/Input/ubuntu_arm_image:
ubuntu_arm_image
================
:Type: string
:Required: no
:Default Value: ``'ubuntu-24.04-arm'``
:Possible Values: See `actions/partner-runner-images - Available Images <https://github.com/actions/partner-runner-images?tab=readme-ov-file#available-images>`__
:Description: Name of the Ubuntu aarch64 image and version used to run a Ubuntu ARM jobs when selected via :ref:`JOBTMPL/Parameters/Input/system_list`.
.. _JOBTMPL/Parameters/Input/windows_image: .. _JOBTMPL/Parameters/Input/windows_image:
windows_image windows_image
@@ -483,6 +495,18 @@ windows_image
:Description: Name of the Windows Server x86-64 image and version used to run a Widnows jobs when selected via :ref:`JOBTMPL/Parameters/Input/system_list`. :Description: Name of the Windows Server x86-64 image and version used to run a Widnows jobs when selected via :ref:`JOBTMPL/Parameters/Input/system_list`.
.. _JOBTMPL/Parameters/Input/windows_arm_image:
windows_arm_image
=================
:Type: string
:Required: no
:Default Value: ``'windows-11-arm'``
:Possible Values: See `actions/partner-runner-images - Available Images <https://github.com/actions/partner-runner-images?tab=readme-ov-file#available-images>`__
:Description: Name of the Windows aarch64 image and version used to run a Windows ARM jobs when selected via :ref:`JOBTMPL/Parameters/Input/system_list`.
.. _JOBTMPL/Parameters/Input/macos_intel_image: .. _JOBTMPL/Parameters/Input/macos_intel_image:
macos_intel_image macos_intel_image
@@ -647,11 +671,11 @@ python_jobs
{"sysicon": "🍎", "system": "macos", "runs-on": "macos-13", "runtime": "native", "shell": "bash", "pyicon": "🟡", "python": "3.11", "envname": "macOS (x86-64)" }, {"sysicon": "🍎", "system": "macos", "runs-on": "macos-13", "runtime": "native", "shell": "bash", "pyicon": "🟡", "python": "3.11", "envname": "macOS (x86-64)" },
{"sysicon": "🍎", "system": "macos", "runs-on": "macos-13", "runtime": "native", "shell": "bash", "pyicon": "🟢", "python": "3.12", "envname": "macOS (x86-64)" }, {"sysicon": "🍎", "system": "macos", "runs-on": "macos-13", "runtime": "native", "shell": "bash", "pyicon": "🟢", "python": "3.12", "envname": "macOS (x86-64)" },
{"sysicon": "🍎", "system": "macos", "runs-on": "macos-13", "runtime": "native", "shell": "bash", "pyicon": "🟢", "python": "3.13", "envname": "macOS (x86-64)" }, {"sysicon": "🍎", "system": "macos", "runs-on": "macos-13", "runtime": "native", "shell": "bash", "pyicon": "🟢", "python": "3.13", "envname": "macOS (x86-64)" },
{"sysicon": "🍏", "system": "macos-arm", "runs-on": "macos-14", "runtime": "native", "shell": "bash", "pyicon": "🔴", "python": "3.9", "envname": "macOS (aarch64)" }, {"sysicon": "🍏", "system": "macos-arm", "runs-on": "macos-15", "runtime": "native", "shell": "bash", "pyicon": "🔴", "python": "3.9", "envname": "macOS (aarch64)" },
{"sysicon": "🍏", "system": "macos-arm", "runs-on": "macos-14", "runtime": "native", "shell": "bash", "pyicon": "🟠", "python": "3.10", "envname": "macOS (aarch64)" }, {"sysicon": "🍏", "system": "macos-arm", "runs-on": "macos-15", "runtime": "native", "shell": "bash", "pyicon": "🟠", "python": "3.10", "envname": "macOS (aarch64)" },
{"sysicon": "🍏", "system": "macos-arm", "runs-on": "macos-14", "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.11", "envname": "macOS (aarch64)" },
{"sysicon": "🍏", "system": "macos-arm", "runs-on": "macos-14", "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.12", "envname": "macOS (aarch64)" },
{"sysicon": "🍏", "system": "macos-arm", "runs-on": "macos-14", "runtime": "native", "shell": "bash", "pyicon": "🟢", "python": "3.13", "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": "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" } {"sysicon": "🪟🟨", "system": "msys2", "runs-on": "windows-2025", "runtime": "UCRT64", "shell": "msys2 {0}", "pyicon": "🟢", "python": "3.12", "envname": "Windows+MSYS2 (x86-64) - UCRT64" }
] ]