Reduced code duplications when checking job-matrix and artifact names by using local Actions.

This commit is contained in:
Patrick Lehmann
2025-10-18 23:30:10 +02:00
parent 7e6bb82ae8
commit 6432741888
4 changed files with 245 additions and 482 deletions

View File

@@ -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)

View File

@@ -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)