Compare commits

...

63 Commits
v4.1.0 ... r4

Author SHA1 Message Date
Patrick Lehmann
a1509493ae Updating r4 from main@v4.3.0 2025-04-18 12:47:20 +02:00
Patrick Lehmann
33edd82e6f v4.3.0 2025-04-18 10:39:54 +02:00
Patrick Lehmann
d08f312904 Allow control where to publish reports (Codecov, Codacy, Dorny Test-Reporter). 2025-04-18 10:27:33 +02:00
Patrick Lehmann
731d0d2369 Provide secrets for testing. 2025-04-18 01:02:45 +02:00
Patrick Lehmann
de400ae2db Fixed publishing code coverage results. 2025-04-18 00:35:25 +02:00
Patrick Lehmann
cb3c338df6 [Dependabot]: Bump dorny/test-reporter from v1 to v2. 2025-04-17 01:35:48 +02:00
dependabot[bot]
79c8526437 [Dependabot]: Bump dorny/test-reporter from 1 to 2
Bumps [dorny/test-reporter](https://github.com/dorny/test-reporter) from 1 to 2.
- [Release notes](https://github.com/dorny/test-reporter/releases)
- [Changelog](https://github.com/dorny/test-reporter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dorny/test-reporter/compare/v1...v2)

---
updated-dependencies:
- dependency-name: dorny/test-reporter
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-16 23:02:45 +00:00
Patrick Lehmann
0f7d062c38 Replaced getVariables by ExtractConfiguration and package coverage XML/JSON correctly. 2025-04-16 14:55:57 +02:00
Patrick Lehmann
d5635a8842 Allow disabling cleanups. 2025-04-16 13:35:11 +02:00
Patrick Lehmann
6aa6af95ee Activated more investigations after artifact-download. 2025-04-16 13:34:37 +02:00
Patrick Lehmann
15bf375fe6 Bumped versions. Updated python version to 3.13. 2025-04-16 13:33:45 +02:00
Patrick Lehmann
a1b03cfe2a Extract pyedaa-reports settings for merged unittesting results. 2025-03-24 08:41:16 +01:00
Patrick Lehmann
79620e267d Collect results even when tests (partially) failed. 2025-03-19 19:01:14 +01:00
Patrick Lehmann
fffef5c814 Used merged unittest XML in Sphinx documentation. 2025-03-19 07:53:06 +01:00
Patrick Lehmann
1c22a8805e Updating r4 from main@v4.2.2 2025-03-07 21:15:35 +01:00
Patrick Lehmann
42e17fae05 v4.2.2 2025-03-07 21:12:53 +01:00
Patrick Lehmann
9b7032a585 Use doc_directory instead of hard-coded paths for workarounds. 2025-03-07 21:02:00 +01:00
Patrick Lehmann
9110c85738 Do not require 'coverage_report_json_directory' in SphinxDocumentation.yml. 2025-03-07 21:01:29 +01:00
Patrick Lehmann
c55ff4d83f Updating r4 from main@v4.2.1 2025-03-02 15:58:26 +01:00
Patrick Lehmann
c81d139080 v4.2.1 2025-03-02 15:55:14 +01:00
Patrick Lehmann
c64e054bcd Allow comments in the list of assets. 2025-03-02 11:30:32 +01:00
Patrick Lehmann
a2f2a6c0d4 Updating r4 from main@v4.2.0 2025-02-28 23:08:47 +01:00
Patrick Lehmann
78fdb584aa v4.2.0 2025-02-28 22:59:27 +01:00
Patrick Lehmann
a456635686 Increment on errors. 2025-02-28 22:43:49 +01:00
Patrick Lehmann
befc59f22d Fixed check for previous errors. 2025-02-28 22:40:25 +01:00
Patrick Lehmann
d6fc0efd47 Improved indentation for error messages. 2025-02-28 22:39:47 +01:00
Patrick Lehmann
c018acc3c1 Bumped dependencies and fixed Bash coding style. 2025-02-26 18:19:37 +01:00
Patrick Lehmann
d74c610bb4 Fixed Bash syntax. 2025-02-21 00:10:27 +01:00
Patrick Lehmann
edc4ab3e86 Bumped copyright year to 2025. 2025-02-21 00:10:10 +01:00
Patrick Lehmann
0a338ae8b7 Fixed badge URLS. 2025-01-25 21:59:55 +01:00
Patrick Lehmann
4069da0a74 Bumped dependencies. 2025-01-25 21:59:34 +01:00
Patrick Lehmann
9f4321b7e7 v4.1.0 2025-01-16 21:51:02 +01:00
Patrick Lehmann
0db52d7abc v4.0.1 2025-01-14 21:19:59 +01:00
Patrick Lehmann
5128522ede v4.0.0 2025-01-14 17:39:43 +01:00
Patrick Lehmann
899a5f53bc v3.1.1 2024-12-08 23:46:42 +01:00
Patrick Lehmann
5925101578 v3.1.0 2024-12-08 21:30:48 +01:00
Patrick Lehmann
1b0acf206c v3.0.0 2024-12-08 11:03:28 +01:00
Patrick Lehmann
a0c016bf79 v2.1.1 2024-11-10 21:17:21 +01:00
Patrick Lehmann
40217006fd v2.1.0 2024-11-10 19:07:31 +01:00
Patrick Lehmann
99f30dab53 v2.0.0 2024-11-10 11:23:27 +01:00
Patrick Lehmann
1c42072471 v1.1.0 2024-09-27 22:00:06 +02:00
Patrick Lehmann
74afc5a42a Merge branch 'main' into r1 2024-08-06 10:33:22 +02:00
Patrick Lehmann
2e5a79e0c2 Merge remote-tracking branch 'github/main' into r1 2024-07-30 07:35:49 +02:00
Patrick Lehmann
db99e35dec v1.0.5 2024-04-24 23:07:34 +02:00
Patrick Lehmann
6cfc6e0f8f Merge branch 'main' into r1 2024-04-24 00:42:05 +02:00
Patrick Lehmann
5adddda1a1 Merge remote-tracking branch 'github/main' into r1 2024-04-24 00:32:50 +02:00
Patrick Lehmann
91289c4257 v1.0.1 2024-02-01 00:24:24 +01:00
Patrick Lehmann
527e94b245 v1.0.0 2024-01-19 01:18:27 +01:00
umarcor
f11c335674 v0.4.6 2023-02-26 17:46:26 +01:00
umarcor
5bed864443 v0.4.5 2022-11-08 03:26:27 +01:00
Unai Martinez-Corral
37ec436eb4 v0.4.4 2022-11-08 00:06:47 +00:00
umarcor
6a7a4212c3 v0.4.3 2022-03-02 23:51:16 +01:00
umarcor
f5b6f17d4e v0.4.2 2022-02-22 21:48:31 +01:00
umarcor
883238547a v0.4.1 2022-01-17 01:30:55 +01:00
umarcor
7cd852db58 v0.4.0 2022-01-09 20:58:38 +01:00
umarcor
ce0d30fe3f v0.3.0 2021-12-26 01:45:35 +01:00
umarcor
34dacf7bcf v0.2.3 2021-12-21 01:03:20 +01:00
umarcor
48090e113d v0.2.2 2021-12-20 20:47:43 +01:00
umarcor
e082d77e7a v0.2.1 2021-12-16 07:40:36 +01:00
umarcor
181035b0ba v0.2.0 2021-12-16 07:18:39 +01:00
Patrick Lehmann
643f95bbb6 v0.1.0 2021-12-07 20:50:03 +01:00
umarcor
424b75ca96 v0.0.1 2021-12-07 03:39:33 +01:00
umarcor
f0610331b9 v0.0.0 2021-12-01 00:03:09 +01:00
46 changed files with 388 additions and 272 deletions

View File

@@ -32,7 +32,7 @@ on:
python_version: python_version:
description: 'Python version.' description: 'Python version.'
required: false required: false
default: '3.12' default: '3.13'
type: string type: string
directory: directory:
description: 'Source code directory to check.' description: 'Source code directory to check.'

View File

@@ -93,23 +93,46 @@ on:
required: false required: false
default: '' default: ''
type: string type: string
codecov:
description: 'Publish merged coverage and unittest reports to Codecov.'
required: false
default: false
type: boolean
codacy:
description: 'Publish merged coverage report to Codacy.'
required: false
default: false
type: boolean
dorny:
description: 'Publish merged unittest report via Dorny Test-Reporter.'
required: false
default: false
type: boolean
cleanup:
description: 'Cleanup artifacts afterwards.'
required: false
default: true
type: boolean
secrets: secrets:
PYPI_TOKEN: PYPI_TOKEN:
description: "Token for pushing releases to PyPI." description: "Token for pushing releases to PyPI."
required: false required: false
CODECOV_TOKEN:
description: "Token for pushing coverage and unittest results to Codecov."
required: false
CODACY_PROJECT_TOKEN: CODACY_PROJECT_TOKEN:
description: "Token for pushing coverage results to Codacy." description: "Token for pushing coverage results to Codacy."
required: false required: false
jobs: jobs:
ConfigParams: ConfigParams:
uses: pyTooling/Actions/.github/workflows/ExtractConfiguration.yml@main uses: pyTooling/Actions/.github/workflows/ExtractConfiguration.yml@r4
with: with:
package_namespace: ${{ inputs.package_namespace }} package_namespace: ${{ inputs.package_namespace }}
package_name: ${{ inputs.package_name }} package_name: ${{ inputs.package_name }}
UnitTestingParams: UnitTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
package_namespace: ${{ inputs.package_namespace }} package_namespace: ${{ inputs.package_namespace }}
package_name: ${{ inputs.package_name }} package_name: ${{ inputs.package_name }}
@@ -121,7 +144,7 @@ jobs:
disable_list: ${{ inputs.unittest_disable_list }} disable_list: ${{ inputs.unittest_disable_list }}
AppTestingParams: AppTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
package_namespace: ${{ inputs.package_namespace }} package_namespace: ${{ inputs.package_namespace }}
package_name: ${{ inputs.package_name }} package_name: ${{ inputs.package_name }}
@@ -133,7 +156,7 @@ jobs:
disable_list: ${{ inputs.apptest_disable_list }} disable_list: ${{ inputs.apptest_disable_list }}
UnitTesting: UnitTesting:
uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@main uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@r4
needs: needs:
- ConfigParams - ConfigParams
- UnitTestingParams - UnitTestingParams
@@ -148,7 +171,7 @@ jobs:
coverage_sqlite_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }} coverage_sqlite_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }}
StaticTypeCheck: StaticTypeCheck:
uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@main uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@r4
needs: needs:
- ConfigParams - ConfigParams
- UnitTestingParams - UnitTestingParams
@@ -161,7 +184,7 @@ jobs:
html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }}
DocCoverage: DocCoverage:
uses: pyTooling/Actions/.github/workflows/CheckDocumentation.yml@main uses: pyTooling/Actions/.github/workflows/CheckDocumentation.yml@r4
needs: needs:
- ConfigParams - ConfigParams
- UnitTestingParams - UnitTestingParams
@@ -171,7 +194,7 @@ jobs:
# fail_below: 70 # fail_below: 70
Package: Package:
uses: pyTooling/Actions/.github/workflows/Package.yml@main uses: pyTooling/Actions/.github/workflows/Package.yml@r4
needs: needs:
- UnitTestingParams - UnitTestingParams
- UnitTesting - UnitTesting
@@ -180,7 +203,7 @@ jobs:
artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }}
# AppTesting: # AppTesting:
# uses: pyTooling/Actions/.github/workflows/ApplicationTesting.yml@main # uses: pyTooling/Actions/.github/workflows/ApplicationTesting.yml@r4
# needs: # needs:
# - AppTestingParams # - AppTestingParams
# - UnitTestingParams # - UnitTestingParams
@@ -191,36 +214,53 @@ jobs:
# apptest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).apptesting_xml }} # apptest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).apptesting_xml }}
PublishCoverageResults: PublishCoverageResults:
uses: pyTooling/Actions/.github/workflows/PublishCoverageResults.yml@main uses: pyTooling/Actions/.github/workflows/PublishCoverageResults.yml@r4
needs: needs:
- ConfigParams
- UnitTestingParams - UnitTestingParams
- UnitTesting - UnitTesting
with: with:
# coverage_sqlite_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }} # coverage_sqlite_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }}
# coverage_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_xml }} # coverage_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_xml }}
# coverage_report_xml_directory: ${{ needs.ConfigParams.outputs.coverage_report_xml_directory }}
# coverage_report_xml_filename: ${{ needs.ConfigParams.outputs.coverage_report_xml_filename }}
coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }}
coverage_report_json_directory: ${{ needs.ConfigParams.outputs.coverage_report_json_directory }}
coverage_report_json_filename: ${{ needs.ConfigParams.outputs.coverage_report_json_filename }}
coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }}
coverage_report_html_directory: ${{ needs.ConfigParams.outputs.coverage_report_html_directory }}
codecov: ${{ inputs.codecov }}
codacy: ${{ inputs.codacy }}
secrets: secrets:
codacy_token: ${{ secrets.CODACY_PROJECT_TOKEN }} CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
CODACY_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
PublishTestResults: PublishTestResults:
uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@main uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@r4
needs: needs:
- ConfigParams
- UnitTestingParams - UnitTestingParams
- UnitTesting - UnitTesting
with: with:
additional_merge_args: '-d "--pytest=rewrite-dunder-init;reduce-depth:pytest.tests.unit"' additional_merge_args: '-d "--pytest=rewrite-dunder-init;reduce-depth:pytest.tests.unit"'
testsuite-summary-name: ${{ inputs.package_name }}
merged_junit_filename: ${{ needs.ConfigParams.outputs.unittest_merged_report_xml_filename }}
merged_junit_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} merged_junit_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}
dorny: ${{ inputs.dorny }}
codecov: ${{ inputs.codecov }}
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
# VerifyDocs: # VerifyDocs:
# uses: pyTooling/Actions/.github/workflows/VerifyDocs.yml@main # uses: pyTooling/Actions/.github/workflows/VerifyDocs.yml@r4
# needs: # needs:
# - UnitTestingParams # - UnitTestingParams
# with: # with:
# python_version: ${{ needs.UnitTestingParams.outputs.python_version }} # python_version: ${{ needs.UnitTestingParams.outputs.python_version }}
Documentation: Documentation:
uses: pyTooling/Actions/.github/workflows/SphinxDocumentation.yml@main uses: pyTooling/Actions/.github/workflows/SphinxDocumentation.yml@r4
needs: needs:
- ConfigParams - ConfigParams
- UnitTestingParams - UnitTestingParams
@@ -230,24 +270,25 @@ jobs:
with: with:
python_version: ${{ needs.UnitTestingParams.outputs.python_version }} python_version: ${{ needs.UnitTestingParams.outputs.python_version }}
coverage_report_json_directory: ${{ needs.ConfigParams.outputs.coverage_report_json_directory }} coverage_report_json_directory: ${{ needs.ConfigParams.outputs.coverage_report_json_directory }}
unittest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}-ubuntu-native-3.12 unittest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}
coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }}
html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }} html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }}
latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }} latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }}
IntermediateCleanUp: IntermediateCleanUp:
uses: pyTooling/Actions/.github/workflows/IntermediateCleanUp.yml@main uses: pyTooling/Actions/.github/workflows/IntermediateCleanUp.yml@r4
needs: needs:
- UnitTestingParams - UnitTestingParams
- PublishCoverageResults - PublishCoverageResults
- PublishTestResults - PublishTestResults
- Documentation - Documentation
if: ${{ inputs.cleanup }}
with: with:
sqlite_coverage_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }}- sqlite_coverage_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }}-
xml_unittest_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}- xml_unittest_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}-
# PDFDocumentation: # PDFDocumentation:
# uses: pyTooling/Actions/.github/workflows/LaTeXDocumentation.yml@main # uses: pyTooling/Actions/.github/workflows/LaTeXDocumentation.yml@r4
# needs: # needs:
# - UnitTestingParams # - UnitTestingParams
# - Documentation # - Documentation
@@ -257,7 +298,7 @@ jobs:
# pdf_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_pdf }} # pdf_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_pdf }}
PublishToGitHubPages: PublishToGitHubPages:
uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@main uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@r4
needs: needs:
- UnitTestingParams - UnitTestingParams
- Documentation - Documentation
@@ -270,7 +311,7 @@ jobs:
typing: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} typing: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }}
ReleasePage: ReleasePage:
uses: pyTooling/Actions/.github/workflows/Release.yml@main uses: pyTooling/Actions/.github/workflows/Release.yml@r4
if: startsWith(github.ref, 'refs/tags') if: startsWith(github.ref, 'refs/tags')
needs: needs:
- Package - Package
@@ -278,7 +319,7 @@ jobs:
- PublishToGitHubPages - PublishToGitHubPages
PublishOnPyPI: PublishOnPyPI:
uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@main uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@r4
if: startsWith(github.ref, 'refs/tags') if: startsWith(github.ref, 'refs/tags')
needs: needs:
- UnitTestingParams - UnitTestingParams
@@ -291,7 +332,7 @@ jobs:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
ArtifactCleanUp: ArtifactCleanUp:
uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@main uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@r4
needs: needs:
- UnitTestingParams - UnitTestingParams
- UnitTesting - UnitTesting
@@ -303,6 +344,7 @@ jobs:
- PublishToGitHubPages - PublishToGitHubPages
# - PublishOnPyPI # - PublishOnPyPI
- IntermediateCleanUp - IntermediateCleanUp
if: ${{ inputs.cleanup }}
with: with:
package: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} package: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }}
remaining: | remaining: |

View File

@@ -32,7 +32,7 @@ on:
python_version: python_version:
description: 'Python version.' description: 'Python version.'
required: false required: false
default: '3.12' default: '3.13'
type: string type: string
package_namespace: package_namespace:
description: 'Name of the tool''s namespace.' description: 'Name of the tool''s namespace.'
@@ -68,6 +68,15 @@ on:
unittest_report_xml: unittest_report_xml:
description: "" description: ""
value: ${{ jobs.Extract.outputs.unittest_report_xml }} value: ${{ jobs.Extract.outputs.unittest_report_xml }}
unittest_merged_report_xml_directory:
description: ""
value: ${{ jobs.Extract.outputs.unittest_merged_report_xml_directory }}
unittest_merged_report_xml_filename:
description: ""
value: ${{ jobs.Extract.outputs.unittest_merged_report_xml_filename }}
unittest_merged_report_xml:
description: ""
value: ${{ jobs.Extract.outputs.unittest_merged_report_xml }}
coverage_report_html_directory: coverage_report_html_directory:
description: "" description: ""
value: ${{ jobs.Extract.outputs.coverage_report_html_directory }} value: ${{ jobs.Extract.outputs.coverage_report_html_directory }}
@@ -101,6 +110,9 @@ jobs:
unittest_report_xml_directory: ${{ steps.getVariables.outputs.unittest_report_xml_directory }} unittest_report_xml_directory: ${{ steps.getVariables.outputs.unittest_report_xml_directory }}
unittest_report_xml_filename: ${{ steps.getVariables.outputs.unittest_report_xml_filename }} unittest_report_xml_filename: ${{ steps.getVariables.outputs.unittest_report_xml_filename }}
unittest_report_xml: ${{ steps.getVariables.outputs.unittest_report_xml }} unittest_report_xml: ${{ steps.getVariables.outputs.unittest_report_xml }}
unittest_merged_report_xml_directory: ${{ steps.getVariables.outputs.unittest_merged_report_xml_directory }}
unittest_merged_report_xml_filename: ${{ steps.getVariables.outputs.unittest_merged_report_xml_filename }}
unittest_merged_report_xml: ${{ steps.getVariables.outputs.unittest_merged_report_xml }}
coverage_report_html_directory: ${{ steps.getVariables.outputs.coverage_report_html_directory }} coverage_report_html_directory: ${{ steps.getVariables.outputs.coverage_report_html_directory }}
coverage_report_xml_directory: ${{ steps.getVariables.outputs.coverage_report_xml_directory }} coverage_report_xml_directory: ${{ steps.getVariables.outputs.coverage_report_xml_directory }}
coverage_report_xml_filename: ${{ steps.getVariables.outputs.coverage_report_xml_filename }} coverage_report_xml_filename: ${{ steps.getVariables.outputs.coverage_report_xml_filename }}
@@ -178,6 +190,7 @@ jobs:
pyProjectSettings = tomli_load(file) pyProjectSettings = tomli_load(file)
unittestXMLFile = Path(pyProjectSettings["tool"]["pytest"]["junit_xml"]) unittestXMLFile = Path(pyProjectSettings["tool"]["pytest"]["junit_xml"])
mergedUnittestXMLFile = Path(pyProjectSettings["tool"]["pyedaa-reports"]["junit_xml"])
coverageHTMLDirectory = Path(pyProjectSettings["tool"]["coverage"]["html"]["directory"]) coverageHTMLDirectory = Path(pyProjectSettings["tool"]["coverage"]["html"]["directory"])
coverageXMLFile = Path(pyProjectSettings["tool"]["coverage"]["xml"]["output"]) coverageXMLFile = Path(pyProjectSettings["tool"]["coverage"]["xml"]["output"])
coverageJSONFile= Path(pyProjectSettings["tool"]["coverage"]["json"]["output"]) coverageJSONFile= Path(pyProjectSettings["tool"]["coverage"]["json"]["output"])
@@ -209,6 +222,9 @@ jobs:
unittest_report_xml_directory={unittestXMLFile.parent.as_posix()} unittest_report_xml_directory={unittestXMLFile.parent.as_posix()}
unittest_report_xml_filename={unittestXMLFile.name} unittest_report_xml_filename={unittestXMLFile.name}
unittest_report_xml={unittestXMLFile.as_posix()} unittest_report_xml={unittestXMLFile.as_posix()}
unittest_merged_report_xml_directory={mergedUnittestXMLFile.parent.as_posix()}
unittest_merged_report_xml_filename={mergedUnittestXMLFile.name}
unittest_merged_report_xml={mergedUnittestXMLFile.as_posix()}
coverage_report_html_directory={coverageHTMLDirectory.as_posix()} coverage_report_html_directory={coverageHTMLDirectory.as_posix()}
coverage_report_xml_directory={coverageXMLFile.parent.as_posix()} coverage_report_xml_directory={coverageXMLFile.parent.as_posix()}
coverage_report_xml_filename={coverageXMLFile.name} coverage_report_xml_filename={coverageXMLFile.name}
@@ -218,4 +234,4 @@ jobs:
coverage_report_json={coverageJSONFile.as_posix()} coverage_report_json={coverageJSONFile.as_posix()}
""")) """))
print(f"DEBUG:\n unittest xml: {unittestXMLFile}\n coverage html: {coverageHTMLDirectory}\n coverage xml: {coverageXMLFile}\n coverage json: {coverageJSONFile}") print(f"DEBUG:\n unittest xml: {unittestXMLFile}\n merged unittest xml: {mergedUnittestXMLFile}\n coverage html: {coverageHTMLDirectory}\n coverage xml: {coverageXMLFile}\n coverage json: {coverageJSONFile}")

View File

@@ -84,11 +84,16 @@ on:
type: string type: string
required: false required: false
default: '__pyTooling_upload_artifact__.tar' default: '__pyTooling_upload_artifact__.tar'
can-fail:
type: boolean
required: false
default: false
jobs: jobs:
Release: Release:
name: 📝 Update 'Nightly Page' on GitHub name: 📝 Update 'Nightly Page' on GitHub
runs-on: ${{ inputs.ubuntu_image }} runs-on: ${{ inputs.ubuntu_image }}
continue-on-error: ${{ inputs.can-fail }}
permissions: permissions:
contents: write contents: write
actions: write actions: write
@@ -197,7 +202,7 @@ jobs:
ANSI_LIGHT_RED=$'\x1b[91m' ANSI_LIGHT_RED=$'\x1b[91m'
ANSI_LIGHT_GREEN=$'\x1b[92m' ANSI_LIGHT_GREEN=$'\x1b[92m'
ANSI_LIGHT_YELLOW=$'\x1b[93m' ANSI_LIGHT_YELLOW=$'\x1b[93m'
ANSI_LIGHT_BLUE="\e[94m" ANSI_LIGHT_BLUE=$'\x1b[94m'
ANSI_NOCOLOR=$'\x1b[0m' ANSI_NOCOLOR=$'\x1b[0m'
export GH_TOKEN=${{ github.token }} export GH_TOKEN=${{ github.token }}
@@ -254,7 +259,7 @@ jobs:
# A dictionary to check for duplicate asset files in release # A dictionary to check for duplicate asset files in release
declare -A assetFilenames declare -A assetFilenames
while IFS=$'\r\n' read -r assetLine; do while IFS=$'\r\n' read -r assetLine; do
if [[ "${assetLine}" == "" ]]; then if [[ "${assetLine}" == "" || "${assetLine:0:1}" == "#" ]]; then
continue continue
fi fi
@@ -285,7 +290,7 @@ jobs:
if [[ -n "${assetFilenames[$asset]}" ]]; then if [[ -n "${assetFilenames[$asset]}" ]]; then
printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}" printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}"
printf "%s\n" "::error title=DuplicateAsset::Asset '${asset}' from artifact '${artifact}' was already uploaded to release '${{ inputs.nightly_name }}'." printf "%s\n" "::error title=DuplicateAsset::Asset '${asset}' from artifact '${artifact}' was already uploaded to release '${{ inputs.nightly_name }}'."
ERRORS=1 ERRORS=$((ERRORS + 1))
continue continue
else else
printf "%s\n" "${ANSI_LIGHT_GREEN}[OK]${ANSI_NOCOLOR}" printf "%s\n" "${ANSI_LIGHT_GREEN}[OK]${ANSI_NOCOLOR}"
@@ -305,7 +310,7 @@ jobs:
printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}" printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}"
printf " %s\n" "${ANSI_LIGHT_RED}Couldn't download artifact '${artifact}'.${ANSI_NOCOLOR}" printf " %s\n" "${ANSI_LIGHT_RED}Couldn't download artifact '${artifact}'.${ANSI_NOCOLOR}"
printf "%s\n" "::error title=ArtifactNotFound::Couldn't download artifact '${artifact}'." printf "%s\n" "::error title=ArtifactNotFound::Couldn't download artifact '${artifact}'."
ERRORS=1 ERRORS=$((ERRORS + 1))
continue continue
fi fi
downloadedArtifacts[$artifact]=1 downloadedArtifacts[$artifact]=1
@@ -357,7 +362,7 @@ jobs:
printf " %s\n" "Compression ${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}" printf " %s\n" "Compression ${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}"
printf " %s\n" "${ANSI_LIGHT_RED}Couldn't compress '${artifact}' to zip file '${asset}'.${ANSI_NOCOLOR}" printf " %s\n" "${ANSI_LIGHT_RED}Couldn't compress '${artifact}' to zip file '${asset}'.${ANSI_NOCOLOR}"
printf "%s\n" "::error title=CompressionError::Couldn't compress '${artifact}' to zip file '${asset}'." printf "%s\n" "::error title=CompressionError::Couldn't compress '${artifact}' to zip file '${asset}'."
ERRORS=1 ERRORS=$((ERRORS + 1))
continue continue
fi fi
elif [[ "${asset}" == !*.tgz || "${asset}" == !*.tar.gz || "${asset}" == \$*.tgz || "${asset}" == \$*.tar.gz ]]; then elif [[ "${asset}" == !*.tgz || "${asset}" == !*.tar.gz || "${asset}" == \$*.tgz || "${asset}" == \$*.tar.gz ]]; then
@@ -386,7 +391,7 @@ jobs:
printf " %s\n" "Compression ${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}" printf " %s\n" "Compression ${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}"
printf " %s\n" "${ANSI_LIGHT_RED}Couldn't compress '${artifact}' to tgz file '${asset}'.${ANSI_NOCOLOR}" printf " %s\n" "${ANSI_LIGHT_RED}Couldn't compress '${artifact}' to tgz file '${asset}'.${ANSI_NOCOLOR}"
printf "%s\n" "::error title=CompressionError::Couldn't compress '${artifact}' to tgz file '${asset}'." printf "%s\n" "::error title=CompressionError::Couldn't compress '${artifact}' to tgz file '${asset}'."
ERRORS=1 ERRORS=$((ERRORS + 1))
continue continue
fi fi
elif [[ "${asset}" == !*.tzst || "${asset}" == !*.tar.zst || "${asset}" == \$*.tzst || "${asset}" == \$*.tar.zst ]]; then elif [[ "${asset}" == !*.tzst || "${asset}" == !*.tar.zst || "${asset}" == \$*.tzst || "${asset}" == \$*.tar.zst ]]; then
@@ -415,7 +420,7 @@ jobs:
printf " %s\n" "Compression ${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}" printf " %s\n" "Compression ${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}"
printf " %s\n" "${ANSI_LIGHT_RED}Couldn't compress '${artifact}' to zst file '${asset}'.${ANSI_NOCOLOR}" printf " %s\n" "${ANSI_LIGHT_RED}Couldn't compress '${artifact}' to zst file '${asset}'.${ANSI_NOCOLOR}"
printf "%s\n" "::error title=CompressionError::Couldn't compress '${artifact}' to zst file '${asset}'." printf "%s\n" "::error title=CompressionError::Couldn't compress '${artifact}' to zst file '${asset}'."
ERRORS=1 ERRORS=$((ERRORS + 1))
continue continue
fi fi
elif [[ -e "${artifact}/${asset}" ]]; then elif [[ -e "${artifact}/${asset}" ]]; then
@@ -425,7 +430,7 @@ jobs:
printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}" printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}"
printf " %s\n" "${ANSI_LIGHT_RED}Couldn't find asset '${asset}' in artifact '${artifact}'.${ANSI_NOCOLOR}" printf " %s\n" "${ANSI_LIGHT_RED}Couldn't find asset '${asset}' in artifact '${artifact}'.${ANSI_NOCOLOR}"
printf "%s\n" "::error title=FileNotFound::Couldn't find asset '${asset}' in artifact '${artifact}'." printf "%s\n" "::error title=FileNotFound::Couldn't find asset '${asset}' in artifact '${artifact}'."
ERRORS=1 ERRORS=$((ERRORS + 1))
continue continue
fi fi
@@ -465,7 +470,7 @@ jobs:
printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}" printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}"
printf " %s\n" "${ANSI_LIGHT_RED}Couldn't upload asset '${asset}' from '${uploadFile}' to release '${{ inputs.nightly_name }}'.${ANSI_NOCOLOR}" printf " %s\n" "${ANSI_LIGHT_RED}Couldn't upload asset '${asset}' from '${uploadFile}' to release '${{ inputs.nightly_name }}'.${ANSI_NOCOLOR}"
printf "%s\n" "::error title=UploadError::Couldn't upload asset '${asset}' from '${uploadFile}' to release '${{ inputs.nightly_name }}'." printf "%s\n" "::error title=UploadError::Couldn't upload asset '${asset}' from '${uploadFile}' to release '${{ inputs.nightly_name }}'."
ERRORS=1 ERRORS=$((ERRORS + 1))
continue continue
fi fi
done <<<'${{ inputs.assets }}' done <<<'${{ inputs.assets }}'
@@ -488,7 +493,7 @@ jobs:
printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}" printf "%s\n" "${ANSI_LIGHT_RED}[ERROR]${ANSI_NOCOLOR}"
printf " %s\n" "${ANSI_LIGHT_RED}Couldn't upload asset '${{ inputs.inventory-json }}' to release '${{ inputs.nightly_name }}'.${ANSI_NOCOLOR}" printf " %s\n" "${ANSI_LIGHT_RED}Couldn't upload asset '${{ inputs.inventory-json }}' to release '${{ inputs.nightly_name }}'.${ANSI_NOCOLOR}"
printf "%s\n" "::error title=UploadError::Couldn't upload asset '${{ inputs.inventory-json }}' to release '${{ inputs.nightly_name }}'." printf "%s\n" "::error title=UploadError::Couldn't upload asset '${{ inputs.inventory-json }}' to release '${{ inputs.nightly_name }}'."
ERRORS=1 ERRORS=$((ERRORS + 1))
continue continue
fi fi
fi fi
@@ -497,8 +502,8 @@ jobs:
tree -pash -L 3 . tree -pash -L 3 .
printf "::endgroup::\n" printf "::endgroup::\n"
if [[ $ERROR -ne 0 ]]; then if [[ $ERRORS -ne 0 ]]; then
printf "%s\n" "${ANSI_LIGHT_RED}Errors detected in previous steps.${ANSI_NOCOLOR}" printf "%s\n" "${ANSI_LIGHT_RED}${ERRORS} errors detected in previous steps.${ANSI_NOCOLOR}"
exit 1 exit 1
fi fi

View File

@@ -33,7 +33,7 @@ on:
python_version: python_version:
description: 'Python version.' description: 'Python version.'
required: false required: false
default: '3.12' default: '3.13'
type: string type: string
requirements: requirements:
description: 'Python dependencies to be installed through pip; if empty, use pyproject.toml through build.' description: 'Python dependencies to be installed through pip; if empty, use pyproject.toml through build.'

View File

@@ -197,9 +197,10 @@ jobs:
"3.13": { "icon": "🟢", "until": "2029.10" }, "3.13": { "icon": "🟢", "until": "2029.10" },
"3.14": { "icon": "🟣", "until": "2030.10" }, "3.14": { "icon": "🟣", "until": "2030.10" },
"pypy-3.7": { "icon": "⟲⚫", "until": "????.??" }, "pypy-3.7": { "icon": "⟲⚫", "until": "????.??" },
"pypy-3.8": { "icon": "⟲🔴", "until": "????.??" }, "pypy-3.8": { "icon": "⟲", "until": "????.??" },
"pypy-3.9": { "icon": "⟲🟠", "until": "????.??" }, "pypy-3.9": { "icon": "⟲🔴", "until": "????.??" },
"pypy-3.10": { "icon": "⟲🟡", "until": "????.??" }, "pypy-3.10": { "icon": "⟲🟠", "until": "????.??" },
"pypy-3.11": { "icon": "⟲🟡", "until": "????.??" },
}, },
# Runner systems (runner images) supported by GitHub Actions # Runner systems (runner images) supported by GitHub Actions
"sys": { "sys": {

View File

@@ -48,19 +48,57 @@ on:
required: false required: false
default: '' default: ''
type: string type: string
coverage_report_xml_directory:
description: 'Directory containing the XML coverage report file.'
required: false
default: 'report/coverage'
type: string
coverage_report_xml_filename:
description: 'Filename of the XML coverage report file.'
required: false
default: 'coverage.xml'
type: string
coverage_json_artifact: coverage_json_artifact:
description: 'Name of the JSON coverage artifact.' description: 'Name of the JSON coverage artifact.'
required: false required: false
default: '' default: ''
type: string type: string
coverage_report_json_directory:
description: 'Directory containing the JSON coverage report file.'
required: false
default: 'report/coverage'
type: string
coverage_report_json_filename:
description: 'Filename of the JSON coverage report file.'
required: false
default: 'coverage.json'
type: string
coverage_html_artifact: coverage_html_artifact:
description: 'Name of the HTML coverage artifact.' description: 'Name of the HTML coverage artifact.'
required: false required: false
default: '' default: ''
type: string type: string
coverage_report_html_directory:
description: 'HTML root directory of the generated coverage report.'
required: false
default: 'report/coverage/html'
type: string
codecov:
description: 'Publish merged coverage report to Codecov.'
required: false
default: false
type: boolean
codacy:
description: 'Publish merged coverage report to Codacy.'
required: false
default: false
type: boolean
secrets: secrets:
codacy_token: CODECOV_TOKEN:
description: 'Token to push result to codacy.' description: 'Token to push result to Codecov.'
required: true
CODACY_TOKEN:
description: 'Token to push result to Codacy.'
required: true required: true
jobs: jobs:
@@ -90,66 +128,6 @@ jobs:
run: | run: |
python -m pip install -U --disable-pip-version-check --break-system-packages coverage[toml] tomli python -m pip install -U --disable-pip-version-check --break-system-packages coverage[toml] tomli
- name: 🔁 Extract configurations from pyproject.toml
id: getVariables
shell: python
run: |
from os import getenv
from pathlib import Path
from sys import version
from textwrap import dedent
print(f"Python: {version}")
from tomli import load as tomli_load
htmlDirectory = Path("htmlcov")
xmlFile = Path("./coverage.xml")
jsonFile = Path("./coverage.json")
coverageRC = "${{ inputs.coverage_config }}".strip()
# Read output paths from 'pyproject.toml' file
if coverageRC == "pyproject.toml":
pyProjectFile = Path("pyproject.toml")
if pyProjectFile.exists():
with pyProjectFile.open("rb") as file:
pyProjectSettings = tomli_load(file)
htmlDirectory = Path(pyProjectSettings["tool"]["coverage"]["html"]["directory"])
xmlFile = Path(pyProjectSettings["tool"]["coverage"]["xml"]["output"])
jsonFile = Path(pyProjectSettings["tool"]["coverage"]["json"]["output"])
else:
print(f"File '{pyProjectFile}' not found.")
print(f"::error title=FileNotFoundError::File '{pyProjectFile}' not found.")
exit(1)
# Read output paths from '.coveragerc' file
elif len(coverageRC) > 0:
coverageRCFile = Path(coverageRC)
if coverageRCFile.exists():
with coverageRCFile.open("rb") as file:
coverageRCSettings = tomli_load(file)
htmlDirectory = Path(coverageRCSettings["html"]["directory"])
xmlFile = Path(coverageRCSettings["xml"]["output"])
jsonFile = Path(coverageRCSettings["json"]["output"])
else:
print(f"File '{coverageRCFile}' not found.")
print(f"::error title=FileNotFoundError::File '{coverageRCFile}' not found.")
exit(1)
# Write jobs to special file
github_output = Path(getenv("GITHUB_OUTPUT"))
print(f"GITHUB_OUTPUT: {github_output}")
with github_output.open("a+", encoding="utf-8") as f:
f.write(dedent(f"""\
coverage_report_html_directory={htmlDirectory.as_posix()}
coverage_report_xml={xmlFile}
coverage_report_json={jsonFile}
"""))
print(f"DEBUG:\n html={htmlDirectory}\n xml={xmlFile}\n json={jsonFile}")
- name: Rename .coverage files and move them all into 'coverage/' - name: Rename .coverage files and move them all into 'coverage/'
run: | run: |
mkdir -p coverage mkdir -p coverage
@@ -163,7 +141,7 @@ jobs:
run: coverage report --rcfile=pyproject.toml --data-file=.coverage run: coverage report --rcfile=pyproject.toml --data-file=.coverage
- name: Convert to XML format (Cobertura) - name: Convert to XML format (Cobertura)
if: inputs.coverage_xml_artifact != '' if: inputs.coverage_xml_artifact != '' || inputs.codecov || inputs.codacy
run: coverage xml --data-file=.coverage run: coverage xml --data-file=.coverage
- name: Convert to JSON format - name: Convert to JSON format
@@ -193,7 +171,8 @@ jobs:
continue-on-error: true continue-on-error: true
with: with:
name: ${{ inputs.coverage_xml_artifact }} name: ${{ inputs.coverage_xml_artifact }}
path: ${{ steps.getVariables.outputs.coverage_report_xml }} working-directory: ${{ inputs.coverage_report_xml_directory }}
path: ${{ inputs.coverage_report_xml_filename }}
if-no-files-found: error if-no-files-found: error
retention-days: 1 retention-days: 1
@@ -203,7 +182,8 @@ jobs:
continue-on-error: true continue-on-error: true
with: with:
name: ${{ inputs.coverage_json_artifact }} name: ${{ inputs.coverage_json_artifact }}
path: ${{ steps.getVariables.outputs.coverage_report_json }} working-directory: ${{ inputs.coverage_report_json_directory }}
path: ${{ inputs.coverage_report_json_filename }}
if-no-files-found: error if-no-files-found: error
retention-days: 1 retention-days: 1
@@ -213,24 +193,27 @@ jobs:
continue-on-error: true continue-on-error: true
with: with:
name: ${{ inputs.coverage_html_artifact }} name: ${{ inputs.coverage_html_artifact }}
working-directory: ${{ steps.getVariables.outputs.coverage_report_html_directory }} working-directory: ${{ inputs.coverage_report_html_directory }}
path: '*' path: '*'
if-no-files-found: error if-no-files-found: error
retention-days: 1 retention-days: 1
- name: 📊 Publish code coverage at CodeCov - name: 📊 Publish code coverage at CodeCov
uses: codecov/codecov-action@v5 uses: codecov/codecov-action@v5
if: inputs.CodeCov == true if: inputs.codecov
continue-on-error: true continue-on-error: true
with: with:
files: ${{ steps.getVariables.outputs.coverage_report_xml }} token: ${{ secrets.CODECOV_TOKEN }}
disable_search: true
files: ${{ inputs.coverage_report_xml_directory }}/${{ inputs.coverage_report_xml_filename }}
flags: unittests flags: unittests
env_vars: PYTHON env_vars: PYTHON
fail_ci_if_error: true
- name: 📉 Publish code coverage at Codacy - name: 📉 Publish code coverage at Codacy
uses: codacy/codacy-coverage-reporter-action@v1 uses: codacy/codacy-coverage-reporter-action@v1
if: inputs.Codacy == true if: inputs.codacy
continue-on-error: true continue-on-error: true
with: with:
project-token: ${{ secrets.codacy_token }} project-token: ${{ secrets.CODACY_TOKEN }}
coverage-reports: ${{ steps.getVariables.outputs.coverage_report_xml }} coverage-reports: ${{ inputs.coverage_report_xml_directory }}/${{ inputs.coverage_report_xml_filename }}

View File

@@ -33,7 +33,7 @@ on:
python_version: python_version:
description: 'Python version.' description: 'Python version.'
required: false required: false
default: '3.12' default: '3.13'
type: string type: string
requirements: requirements:
description: 'Python dependencies to be installed through pip.' description: 'Python dependencies to be installed through pip.'

View File

@@ -34,6 +34,11 @@ on:
required: false required: false
default: '*-UnitTestReportSummary-XML-*' default: '*-UnitTestReportSummary-XML-*'
type: string type: string
merged_junit_filename:
description: 'Filename of the merged JUnit Test Summary.'
required: false
default: 'Unittesting.xml'
type: string
merged_junit_artifact: merged_junit_artifact:
description: 'Name of the merged JUnit Test Summary artifact.' description: 'Name of the merged JUnit Test Summary artifact.'
required: false required: false
@@ -44,6 +49,11 @@ on:
required: false required: false
default: '"--pytest=rewrite-dunder-init;reduce-depth:pytest.tests.unit"' default: '"--pytest=rewrite-dunder-init;reduce-depth:pytest.tests.unit"'
type: string type: string
testsuite-summary-name:
description: 'Set TestsuiteSummary name.'
required: false
default: ''
type: string
publish: publish:
description: 'Publish test report summary via Dorny Test-Reporter' description: 'Publish test report summary via Dorny Test-Reporter'
required: false required: false
@@ -54,6 +64,20 @@ on:
required: false required: false
default: 'Unit Test Results' default: 'Unit Test Results'
type: string type: string
dorny:
description: 'Publish merged unittest results via Dorny Test-Reporter.'
required: false
default: true
type: boolean
codecov:
description: 'Publish merged unittest results to Codecov.'
required: false
default: true
type: boolean
secrets:
CODECOV_TOKEN:
description: 'Token to push result to Codecov.'
required: true
jobs: jobs:
PublishTestResults: PublishTestResults:
@@ -87,23 +111,33 @@ jobs:
- name: 🔁 Merge JUnit Unit Test Summaries - name: 🔁 Merge JUnit Unit Test Summaries
run: | run: |
pyedaa-reports -v unittest "--merge=pyTest-JUnit:junit/*.xml" ${{ inputs.additional_merge_args }} "--output=pyTest-JUnit:Unittesting.xml" pyedaa-reports -v unittest "--name=${{ inputs.testsuite-summary-name }}" "--merge=pyTest-JUnit:junit/*.xml" ${{ inputs.additional_merge_args }} "--output=pyTest-JUnit:${{ inputs.merged_junit_filename }}"
printf "%s\n" "cat Unittesting.xml" printf "%s\n" "cat ${{ inputs.merged_junit_filename }}"
cat Unittesting.xml cat ${{ inputs.merged_junit_filename }}
- name: 📊 Publish Unit Test Results - name: 📊 Publish Unit Test Results
uses: dorny/test-reporter@v1 uses: dorny/test-reporter@v2
if: inputs.publish && inputs.report_title != '' if: (inputs.dorny || inputs.publish) && inputs.report_title != ''
with: with:
name: ${{ inputs.report_title }} name: ${{ inputs.report_title }}
path: Unittesting.xml path: ${{ inputs.merged_junit_filename }}
reporter: java-junit reporter: java-junit
- name: 📊 Publish unittest results at CodeCov
uses: codecov/test-results-action@v1
if: inputs.codecov
with:
token: ${{ secrets.CODECOV_TOKEN }}
disable_search: true
files: ${{ inputs.merged_junit_filename }}
fail_ci_if_error: true
- name: 📤 Upload merged 'JUnit Test Summary' artifact - name: 📤 Upload merged 'JUnit Test Summary' artifact
uses: pyTooling/upload-artifact@v4 uses: pyTooling/upload-artifact@v4
if: inputs.merged_junit_artifact != '' if: inputs.merged_junit_artifact != ''
with: with:
name: ${{ inputs.merged_junit_artifact }} name: ${{ inputs.merged_junit_artifact }}
path: Unittesting.xml path: ${{ inputs.merged_junit_filename }}
if-no-files-found: error if-no-files-found: error
retention-days: 1 retention-days: 1
investigate: true

View File

@@ -44,9 +44,9 @@ jobs:
RELEASE_VERSION=${GIT_TAG#v} RELEASE_VERSION=${GIT_TAG#v}
RELEASE_DATETIME="$(date --utc '+%d.%m.%Y - %H:%M:%S')" RELEASE_DATETIME="$(date --utc '+%d.%m.%Y - %H:%M:%S')"
# write to step outputs # write to step outputs
echo "gitTag=${GIT_TAG}" >> $GITHUB_OUTPUT printf "%s\n" "gitTag=${GIT_TAG}" >> $GITHUB_OUTPUT
echo "version=${RELEASE_VERSION}" >> $GITHUB_OUTPUT printf "%s\n" "version=${RELEASE_VERSION}" >> $GITHUB_OUTPUT
echo "datetime=${RELEASE_DATETIME}" >> $GITHUB_OUTPUT printf "%s\n" "datetime=${RELEASE_DATETIME}" >> $GITHUB_OUTPUT
- name: 📑 Create Release Page - name: 📑 Create Release Page
uses: actions/create-release@v1 uses: actions/create-release@v1

View File

@@ -32,7 +32,7 @@ on:
python_version: python_version:
description: 'Python version.' description: 'Python version.'
required: false required: false
default: '3.12' default: '3.13'
type: string type: string
requirements: requirements:
description: 'Python dependencies to be installed through pip.' description: 'Python dependencies to be installed through pip.'
@@ -46,7 +46,7 @@ on:
type: string type: string
coverage_report_json_directory: coverage_report_json_directory:
description: '' description: ''
required: true required: false
type: string type: string
coverage_json_artifact: coverage_json_artifact:
description: 'Name of the coverage JSON artifact.' description: 'Name of the coverage JSON artifact.'
@@ -105,6 +105,7 @@ jobs:
with: with:
name: ${{ inputs.unittest_xml_artifact }} name: ${{ inputs.unittest_xml_artifact }}
path: ${{ inputs.unittest_xml_directory }} path: ${{ inputs.unittest_xml_directory }}
investigate: true
- name: 📥 Download artifacts '${{ inputs.coverage_json_artifact }}' from 'PublishCoverageResults' job - name: 📥 Download artifacts '${{ inputs.coverage_json_artifact }}' from 'PublishCoverageResults' job
uses: pyTooling/download-artifact@v4 uses: pyTooling/download-artifact@v4
@@ -112,6 +113,7 @@ jobs:
with: with:
name: ${{ inputs.coverage_json_artifact }} name: ${{ inputs.coverage_json_artifact }}
path: ${{ inputs.coverage_report_json_directory }} path: ${{ inputs.coverage_report_json_directory }}
investigate: true
- name: ☑ Generate HTML documentation - name: ☑ Generate HTML documentation
if: inputs.html_artifact != '' if: inputs.html_artifact != ''
@@ -162,6 +164,7 @@ jobs:
with: with:
name: ${{ inputs.unittest_xml_artifact }} name: ${{ inputs.unittest_xml_artifact }}
path: ${{ inputs.unittest_xml_directory }} path: ${{ inputs.unittest_xml_directory }}
investigate: true
- name: 📥 Download artifacts '${{ inputs.coverage_json_artifact }}' from 'PublishCoverageResults' job - name: 📥 Download artifacts '${{ inputs.coverage_json_artifact }}' from 'PublishCoverageResults' job
uses: pyTooling/download-artifact@v4 uses: pyTooling/download-artifact@v4
@@ -169,6 +172,7 @@ jobs:
with: with:
name: ${{ inputs.coverage_json_artifact }} name: ${{ inputs.coverage_json_artifact }}
path: ${{ inputs.coverage_report_json_directory }} path: ${{ inputs.coverage_report_json_directory }}
investigate: true
- name: ☑ Generate LaTeX documentation - name: ☑ Generate LaTeX documentation
if: inputs.latex_artifact != '' if: inputs.latex_artifact != ''
@@ -183,8 +187,8 @@ jobs:
- name: Workaround I - https://github.com/sphinx-doc/sphinx/issues/13190 - name: Workaround I - https://github.com/sphinx-doc/sphinx/issues/13190
if: inputs.latex_artifact != '' if: inputs.latex_artifact != ''
run: | run: |
printf "Changing directory to 'doc/_build/latex' ...\n" printf "Changing directory to '${{ inputs.doc_directory || '.' }}/_build/latex' ...\n"
cd doc/_build/latex cd ${{ inputs.doc_directory || '.' }}/_build/latex
MIMETYPE_EXTENSIONS=( MIMETYPE_EXTENSIONS=(
"image/png:png" "image/png:png"
@@ -227,13 +231,13 @@ jobs:
if [[ $found -eq 0 ]]; then if [[ $found -eq 0 ]]; then
printf "[SKIPPED]\n" printf "[SKIPPED]\n"
fi fi
done <<<$(find . -type f -not -iname "*.cls" -not -iname "*.sty" -not -iname "*.xdy" -not -iname "*.svg" -not -iname "*.png" -not -iname "*.jpg" | sed 's:./::') done < <(find . -type f -not -iname "*.cls" -not -iname "*.sty" -not -iname "*.xdy" -not -iname "*.svg" -not -iname "*.png" -not -iname "*.jpg" | sed 's:./::')
- name: Workaround II - https://github.com/sphinx-doc/sphinx/issues/13189 - name: Workaround II - https://github.com/sphinx-doc/sphinx/issues/13189
if: inputs.latex_artifact != '' if: inputs.latex_artifact != ''
run: | run: |
printf "Changing directory to 'doc/_build/latex' ...\n" printf "Changing directory to '${{ inputs.doc_directory || '.' }}/_build/latex' ...\n"
cd doc/_build/latex cd ${{ inputs.doc_directory || '.' }}/_build/latex
printf "Searching for downloaded images, that need normalization ...\n" printf "Searching for downloaded images, that need normalization ...\n"
for imageExt in png svg jpg jpeg; do for imageExt in png svg jpg jpeg; do
@@ -259,7 +263,7 @@ jobs:
printf "[FAILED]\n" printf "[FAILED]\n"
fi fi
fi fi
done <<<$(find . -type f -iname "*.$imageExt" | sed 's:./::') done < <(find . -type f -iname "*.$imageExt" | sed 's:./::')
done done
- name: 📤 Upload 'LaTeX Documentation' artifact - name: 📤 Upload 'LaTeX Documentation' artifact

View File

@@ -33,7 +33,7 @@ on:
python_version: python_version:
description: 'Python version.' description: 'Python version.'
required: false required: false
default: '3.12' default: '3.13'
type: string type: string
requirements: requirements:
description: 'Python dependencies to be installed through pip.' description: 'Python dependencies to be installed through pip.'

View File

@@ -358,6 +358,7 @@ jobs:
- name: ✅ Run unit tests (Windows) - name: ✅ Run unit tests (Windows)
if: matrix.system == 'windows' if: matrix.system == 'windows'
continue-on-error: true
run: | run: |
$env:ENVIRONMENT_NAME = "${{ matrix.envname }}" $env:ENVIRONMENT_NAME = "${{ matrix.envname }}"
$env:PYTHONPATH = (Get-Location).ToString() $env:PYTHONPATH = (Get-Location).ToString()

View File

@@ -33,7 +33,7 @@ on:
python_version: python_version:
description: 'Python version.' description: 'Python version.'
required: false required: false
default: '3.12' default: '3.13'
type: string type: string
jobs: jobs:

View File

@@ -6,7 +6,7 @@ on:
jobs: jobs:
Params: Params:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: Example name: Example
python_version_list: "3.12 3.13" python_version_list: "3.12 3.13"
@@ -50,7 +50,7 @@ jobs:
retention-days: 1 retention-days: 1
ArtifactCleanUp: ArtifactCleanUp:
uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@main uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@r4
needs: needs:
- Params - Params
- Testing - Testing

View File

@@ -6,26 +6,26 @@ on:
jobs: jobs:
ConfigParams: ConfigParams:
uses: pyTooling/Actions/.github/workflows/ExtractConfiguration.yml@main uses: pyTooling/Actions/.github/workflows/ExtractConfiguration.yml@r4
with: with:
package_name: pyDummy package_name: pyDummy
UnitTestingParams: UnitTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
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.9 pypy-3.10"
# disable_list: "windows:pypy-3.10" # disable_list: "windows:pypy-3.10"
PlatformTestingParams: PlatformTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: Platform name: Platform
python_version_list: "" python_version_list: ""
system_list: "ubuntu windows macos mingw64 clang64 ucrt64" system_list: "ubuntu windows macos mingw64 clang64 ucrt64"
UnitTesting: UnitTesting:
uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@main uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@r4
needs: needs:
- ConfigParams - ConfigParams
- UnitTestingParams - UnitTestingParams
@@ -42,7 +42,7 @@ jobs:
# coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} # coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }}
PlatformTesting: PlatformTesting:
uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@main uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@r4
needs: needs:
- ConfigParams - ConfigParams
- PlatformTestingParams - PlatformTestingParams
@@ -61,7 +61,7 @@ jobs:
coverage_html_artifact: ${{ fromJson(needs.PlatformTestingParams.outputs.artifact_names).codecoverage_html }} coverage_html_artifact: ${{ fromJson(needs.PlatformTestingParams.outputs.artifact_names).codecoverage_html }}
StaticTypeCheck: StaticTypeCheck:
uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@main uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@r4
needs: needs:
- ConfigParams - ConfigParams
- UnitTestingParams - UnitTestingParams
@@ -74,7 +74,7 @@ jobs:
html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }}
DocCoverage: DocCoverage:
uses: pyTooling/Actions/.github/workflows/CheckDocumentation.yml@main uses: pyTooling/Actions/.github/workflows/CheckDocumentation.yml@r4
needs: needs:
- ConfigParams - ConfigParams
- UnitTestingParams - UnitTestingParams
@@ -84,7 +84,7 @@ jobs:
# fail_below: 70 # fail_below: 70
Package: Package:
uses: pyTooling/Actions/.github/workflows/Package.yml@main uses: pyTooling/Actions/.github/workflows/Package.yml@r4
needs: needs:
- UnitTestingParams - UnitTestingParams
- UnitTesting - UnitTesting
@@ -94,38 +94,53 @@ jobs:
artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }}
PublishCoverageResults: PublishCoverageResults:
uses: pyTooling/Actions/.github/workflows/PublishCoverageResults.yml@main uses: pyTooling/Actions/.github/workflows/PublishCoverageResults.yml@r4
needs: needs:
- ConfigParams
- UnitTestingParams - UnitTestingParams
- UnitTesting - UnitTesting
- PlatformTesting - PlatformTesting
with: with:
coverage_sqlite_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }} coverage_sqlite_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }}
coverage_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_xml }} coverage_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_xml }}
coverage_report_xml_directory: ${{ needs.ConfigParams.outputs.coverage_report_xml_directory }}
coverage_report_xml_filename: ${{ needs.ConfigParams.outputs.coverage_report_xml_filename }}
coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }}
coverage_report_json_directory: ${{ needs.ConfigParams.outputs.coverage_report_json_directory }}
coverage_report_json_filename: ${{ needs.ConfigParams.outputs.coverage_report_json_filename }}
coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }}
coverage_report_html_directory: ${{ needs.ConfigParams.outputs.coverage_report_html_directory }}
codecov: true
codacy: true
secrets: secrets:
codacy_token: ${{ secrets.CODACY_PROJECT_TOKEN }} CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
CODACY_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
PublishTestResults: PublishTestResults:
uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@main uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@r4
needs: needs:
- ConfigParams
- UnitTestingParams - UnitTestingParams
- UnitTesting - UnitTesting
- PlatformTesting - PlatformTesting
with: with:
additional_merge_args: '-d "--pytest=rewrite-dunder-init;reduce-depth:pytest.tests.unit;reduce-depth:pytest.tests.platform"' additional_merge_args: '-d "--pytest=rewrite-dunder-init;reduce-depth:pytest.tests.unit;reduce-depth:pytest.tests.platform"'
testsuite-summary-name: ${{ needs.ConfigParams.outputs.package_fullname }}
merged_junit_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} merged_junit_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}
codecov: true
dorny: true
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
# VerifyDocs: # VerifyDocs:
# uses: pyTooling/Actions/.github/workflows/VerifyDocs.yml@main # uses: pyTooling/Actions/.github/workflows/VerifyDocs.yml@r4
# needs: # needs:
# - UnitTestingParams # - UnitTestingParams
# with: # with:
# python_version: ${{ needs.UnitTestingParams.outputs.python_version }} # python_version: ${{ needs.UnitTestingParams.outputs.python_version }}
Documentation: Documentation:
uses: pyTooling/Actions/.github/workflows/SphinxDocumentation.yml@main uses: pyTooling/Actions/.github/workflows/SphinxDocumentation.yml@r4
needs: needs:
- ConfigParams - ConfigParams
- UnitTestingParams - UnitTestingParams
@@ -141,7 +156,7 @@ jobs:
latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }} latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }}
IntermediateCleanUp: IntermediateCleanUp:
uses: pyTooling/Actions/.github/workflows/IntermediateCleanUp.yml@main uses: pyTooling/Actions/.github/workflows/IntermediateCleanUp.yml@r4
needs: needs:
- UnitTestingParams - UnitTestingParams
- PublishCoverageResults - PublishCoverageResults
@@ -152,7 +167,7 @@ jobs:
xml_unittest_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}- xml_unittest_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}-
PDFDocumentation: PDFDocumentation:
uses: pyTooling/Actions/.github/workflows/LaTeXDocumentation.yml@main uses: pyTooling/Actions/.github/workflows/LaTeXDocumentation.yml@r4
needs: needs:
- UnitTestingParams - UnitTestingParams
- Documentation - Documentation
@@ -162,7 +177,7 @@ jobs:
pdf_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_pdf }} pdf_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_pdf }}
PublishToGitHubPages: PublishToGitHubPages:
uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@main uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@r4
needs: needs:
- UnitTestingParams - UnitTestingParams
- Documentation - Documentation
@@ -175,7 +190,7 @@ jobs:
typing: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} typing: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }}
ReleasePage: ReleasePage:
uses: pyTooling/Actions/.github/workflows/Release.yml@main uses: pyTooling/Actions/.github/workflows/Release.yml@r4
if: startsWith(github.ref, 'refs/tags') if: startsWith(github.ref, 'refs/tags')
needs: needs:
- UnitTesting - UnitTesting
@@ -185,7 +200,7 @@ jobs:
- PublishToGitHubPages - PublishToGitHubPages
PublishOnPyPI: PublishOnPyPI:
uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@main uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@r4
if: startsWith(github.ref, 'refs/tags') if: startsWith(github.ref, 'refs/tags')
needs: needs:
- UnitTestingParams - UnitTestingParams
@@ -199,7 +214,7 @@ jobs:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
ArtifactCleanUp: ArtifactCleanUp:
uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@main uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@r4
needs: needs:
- UnitTestingParams - UnitTestingParams
- PlatformTestingParams - PlatformTestingParams

View File

@@ -6,10 +6,14 @@ on:
jobs: jobs:
NamespacePackage: NamespacePackage:
uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@main uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@r4
with: with:
package_namespace: pyExamples package_namespace: pyExamples
package_name: Extensions package_name: Extensions
codecov: true
codacy: true
dorny: true
secrets: secrets:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }} CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}

View File

@@ -42,7 +42,7 @@ jobs:
retention-days: 1 retention-days: 1
NightlyPage: NightlyPage:
uses: pyTooling/Actions/.github/workflows/NightlyRelease.yml@main uses: pyTooling/Actions/.github/workflows/NightlyRelease.yml@r4
needs: needs:
- Build - Build
secrets: inherit secrets: inherit
@@ -51,6 +51,7 @@ jobs:
actions: write actions: write
# attestations: write # attestations: write
with: with:
can-fail: true
prerelease: true prerelease: true
replacements: | replacements: |
version=4.2.0 version=4.2.0
@@ -88,6 +89,7 @@ jobs:
actions: write actions: write
# attestations: write # attestations: write
with: with:
can-fail: true
replacements: | replacements: |
version=4.2.0 version=4.2.0
tool=myTool tool=myTool
@@ -105,6 +107,7 @@ jobs:
inventory-version: 4.2.5 inventory-version: 4.2.5
inventory-categories: "kind1,kind2" inventory-categories: "kind1,kind2"
assets: | assets: |
# artifact: file: labels: asset title
document: document1.txt: doc,html: Documentation document: document1.txt: doc,html: Documentation
document: build.log: build,log: Logfile - %tool% - %tool% document: build.log: build,log: Logfile - %tool% - %tool%
other: document1.txt: build,SBOM:SBOM - %version% other: document1.txt: build,SBOM:SBOM - %version%

View File

@@ -6,24 +6,24 @@ on:
jobs: jobs:
Params_Default: Params_Default:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: Example name: Example
Params_PythonVersions: Params_PythonVersions:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: Example name: Example
python_version_list: "3.11 3.12 pypy-3.9 pypy-3.10" python_version_list: "3.11 3.12 pypy-3.9 pypy-3.10"
Params_Systems: Params_Systems:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: Example name: Example
system_list: "windows mingw32 mingw64" system_list: "windows mingw32 mingw64"
Params_Include: Params_Include:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: Example name: Example
python_version_list: "3.11" python_version_list: "3.11"
@@ -31,7 +31,7 @@ jobs:
include_list: "ubuntu:3.12 ubuntu:3.13" include_list: "ubuntu:3.12 ubuntu:3.13"
Params_Exclude: Params_Exclude:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: Example name: Example
python_version_list: "3.12" python_version_list: "3.12"
@@ -39,7 +39,7 @@ jobs:
exclude_list: "windows:3.12 windows:3.13" exclude_list: "windows:3.12 windows:3.13"
Params_Disable: Params_Disable:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: Example name: Example
python_version_list: "3.12" python_version_list: "3.12"
@@ -47,7 +47,7 @@ jobs:
disable_list: "windows:3.12 windows:3.13" disable_list: "windows:3.12 windows:3.13"
Params_All: Params_All:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@main uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: Example name: Example
python_version_list: "3.12 3.13" python_version_list: "3.12 3.13"

View File

@@ -6,9 +6,14 @@ on:
jobs: jobs:
SimplePackage: SimplePackage:
uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@main uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@r4
with: with:
package_name: pyDummy package_name: pyDummy
codecov: true
codacy: true
dorny: true
cleanup: false
secrets: secrets:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }} CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}

View File

@@ -1,2 +1,2 @@
wheel ~= 0.45 wheel ~= 0.45
twine ~= 6.0 twine ~= 6.1

View File

@@ -95,7 +95,7 @@ The following block shows a minimal YAML workflow file:
# Update tag and pre-release # Update tag and pre-release
# - Update (force-push) tag to the commit that is used in the workflow. # - Update (force-push) tag to the commit that is used in the workflow.
# - Upload artifacts defined by the user. # - Upload artifacts defined by the user.
- uses: pyTooling/Actions/releaser@r0 - uses: pyTooling/Actions/releaser@r4
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
files: | files: |

View File

@@ -60,12 +60,12 @@ Documentation Only (Sphinx)
jobs: jobs:
BuildTheDocs: BuildTheDocs:
uses: pyTooling/Actions/.github/workflows/BuildTheDocs.yml@r0 uses: pyTooling/Actions/.github/workflows/BuildTheDocs.yml@r4
with: with:
artifact: Documentation artifact: Documentation
PublishToGitHubPages: PublishToGitHubPages:
uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@r0 uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@r4
needs: needs:
- BuildTheDocs - BuildTheDocs
with: with:

View File

@@ -27,7 +27,7 @@ The simplest variant just uses the artifact name for the package.
jobs: jobs:
ArtifactCleanUp: ArtifactCleanUp:
uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@r0 uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@r4
with: with:
package: Package package: Package
@@ -39,7 +39,7 @@ Complex Example
jobs: jobs:
ArtifactCleanUp: ArtifactCleanUp:
uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@r0 uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@r4
needs: needs:
- Params - Params
- UnitTesting - UnitTesting

View File

@@ -30,7 +30,7 @@ Simple Example
jobs: jobs:
BuildTheDocs: BuildTheDocs:
uses: pyTooling/Actions/.github/workflows/BuildTheDocs.yml@r0 uses: pyTooling/Actions/.github/workflows/BuildTheDocs.yml@r4
Complex Example Complex Example
@@ -40,7 +40,7 @@ Complex Example
jobs: jobs:
BuildTheDocs: BuildTheDocs:
uses: pyTooling/Actions/.github/workflows/BuildTheDocs.yml@r0 uses: pyTooling/Actions/.github/workflows/BuildTheDocs.yml@r4
needs: needs:
- Params - Params
with: with:

View File

@@ -52,7 +52,7 @@ Simple Example
jobs: jobs:
Coverage: Coverage:
uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@r0 uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@r4
with: with:
artifact: Coverage artifact: Coverage
secrets: secrets:
@@ -65,7 +65,7 @@ Complex Example
jobs: jobs:
Coverage: Coverage:
uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@r0 uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@r4
needs: needs:
- Params - Params
with: with:

View File

@@ -33,7 +33,7 @@ Simple Example
jobs: jobs:
Package: Package:
uses: pyTooling/Actions/.github/workflows/Package.yml@r0 uses: pyTooling/Actions/.github/workflows/Package.yml@r4
with: with:
artifact: Package artifact: Package
@@ -45,7 +45,7 @@ Complex Example
jobs: jobs:
Package: Package:
uses: pyTooling/Actions/.github/workflows/Package.yml@r0 uses: pyTooling/Actions/.github/workflows/Package.yml@r4
needs: needs:
- Params - Params
- Coverage - Coverage

View File

@@ -35,7 +35,7 @@ requires a `name` parameter to create the artifact names.
jobs: jobs:
Params: Params:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r0 uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: pyTooling name: pyTooling
@@ -81,7 +81,7 @@ over resulting in the following combinations:
jobs: jobs:
UnitTestingParams: UnitTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r0 uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: pyTooling name: pyTooling
python_version_list: "3.8 3.9 3.10 3.11 pypy-3.9 pypy-3.10" python_version_list: "3.8 3.9 3.10 3.11 pypy-3.9 pypy-3.10"
@@ -89,14 +89,14 @@ over resulting in the following combinations:
exclude_list: "windows:pypy-3.9 windows:pypy-3.10" exclude_list: "windows:pypy-3.9 windows:pypy-3.10"
PerformanceTestingParams: PerformanceTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r0 uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: pyTooling name: pyTooling
python_version_list: "3.11 3.12" python_version_list: "3.11 3.12"
system_list: "ubuntu windows macos" system_list: "ubuntu windows macos"
PlatformTestingParams: PlatformTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: pyTooling name: pyTooling
python_version_list: "3.12" python_version_list: "3.12"
@@ -297,12 +297,12 @@ variables. Thus, this job is used to compute an output parameter that can be reu
jobs: jobs:
Params: Params:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r0 uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: pyTooling name: pyTooling
CodeCoverage: CodeCoverage:
uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@r0 uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@r4
needs: needs:
- Params - Params
with: with:
@@ -330,12 +330,12 @@ A job description contains the following key-value pairs:
jobs: jobs:
Params: Params:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r0 uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: pyTooling name: pyTooling
UnitTesting: UnitTesting:
uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@dev uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@r4
needs: needs:
- Params - Params
with: with:
@@ -389,12 +389,12 @@ The supported artifacts are:
jobs: jobs:
Params: Params:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r0 uses: pyTooling/Actions/.github/workflows/Parameters.yml@r4
with: with:
name: pyTooling name: pyTooling
Coverage: Coverage:
uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@dev uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@r4
needs: needs:
- Params - Params
with: with:

View File

@@ -42,7 +42,7 @@ by a Git tag. A secret is forwarded from GitHub secrets to a job secret.
# ... # ...
PublishOnPyPI: PublishOnPyPI:
uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@r0 uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@r4
if: startsWith(github.ref, 'refs/tags') if: startsWith(github.ref, 'refs/tags')
with: with:
artifact: Package artifact: Package
@@ -66,7 +66,7 @@ by that job. Finally, the list of requirements is overwritten to load a list of
# ... # ...
PublishOnPyPI: PublishOnPyPI:
uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@r0 uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@r4
if: startsWith(github.ref, 'refs/tags') if: startsWith(github.ref, 'refs/tags')
needs: needs:
- Params - Params

View File

@@ -34,7 +34,7 @@ Simple Example
jobs: jobs:
PublishTestResults: PublishTestResults:
uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@r0 uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@r4
Complex Example Complex Example
=============== ===============
@@ -49,7 +49,7 @@ Complex Example
# ... # ...
PublishTestResults: PublishTestResults:
uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@r0 uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@r4
needs: needs:
- CodeCoverage - CodeCoverage
- UnitTesting - UnitTesting

View File

@@ -29,7 +29,7 @@ Simple Example
# ... # ...
PublishToGitHubPages: PublishToGitHubPages:
uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@r0 uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@r4
needs: needs:
- BuildTheDocs - BuildTheDocs
with: with:
@@ -43,7 +43,7 @@ Complex Example
jobs: jobs:
PublishToGitHubPages: PublishToGitHubPages:
uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@r0 uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@r4
needs: needs:
- Params - Params
- BuildTheDocs - BuildTheDocs

View File

@@ -62,7 +62,7 @@ Simple Example
jobs: jobs:
Release: Release:
uses: pyTooling/Actions/.github/workflows/Release.yml@r0 uses: pyTooling/Actions/.github/workflows/Release.yml@r4
Complex Example Complex Example
@@ -72,7 +72,7 @@ Complex Example
jobs: jobs:
Release: Release:
uses: pyTooling/Actions/.github/workflows/Release.yml@r0 uses: pyTooling/Actions/.github/workflows/Release.yml@r4
if: startsWith(github.ref, 'refs/tags') if: startsWith(github.ref, 'refs/tags')
needs: needs:
- Package - Package

View File

@@ -29,7 +29,7 @@ Simple Example
jobs: jobs:
StaticTypeCheck: StaticTypeCheck:
uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@r0 uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@r4
with: with:
commands: | commands: |
touch pyTooling/__init__.py touch pyTooling/__init__.py
@@ -44,7 +44,7 @@ Complex Example
jobs: jobs:
StaticTypeCheck: StaticTypeCheck:
uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@r0 uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@r4
needs: needs:
- Params - Params
with: with:

View File

@@ -36,7 +36,7 @@ Simple Example
# ... # ...
UnitTesting: UnitTesting:
uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@r0 uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@r4
needs: needs:
- Params - Params
with: with:

View File

@@ -1,9 +1,9 @@
-r ../requirements.txt -r ../requirements.txt
pyTooling ~= 8.0 pyTooling ~= 8.4
# Enforce latest version on ReadTheDocs # Enforce latest version on ReadTheDocs
sphinx ~= 8.1 sphinx ~= 8.2
docutils ~= 0.21 docutils ~= 0.21
docutils_stubs ~= 0.0.22 docutils_stubs ~= 0.0.22
@@ -15,5 +15,5 @@ sphinxcontrib-mermaid ~= 1.0
autoapi >= 2.0.1 autoapi >= 2.0.1
sphinx_design ~= 0.6.1 sphinx_design ~= 0.6.1
sphinx-copybutton >= 0.5.2 sphinx-copybutton >= 0.5.2
sphinx_autodoc_typehints ~= 3.0 sphinx_autodoc_typehints ~= 3.1
sphinx_reports ~= 0.7 sphinx_reports ~= 0.7

View File

@@ -64,11 +64,11 @@
:target: https://pyTooling.github.io/pyTooling/ :target: https://pyTooling.github.io/pyTooling/
.. # Gitter .. # Gitter
.. |SHIELD:svg:pyTooling-gitter| image:: https://img.shields.io/badge/chat-on%20gitter-4db797.?longCache=true&style=flat-square&logo=gitter&logoColor=e8ecef .. |SHIELD:svg:pyTooling-gitter| image:: https://img.shields.io/badge/chat-on%20gitter-4db797?longCache=true&style=flat-square&logo=gitter&logoColor=e8ecef
:alt: Documentation License :alt: Documentation License
:height: 22 :height: 22
:target: https://gitter.im/hdl/community :target: https://gitter.im/hdl/community
.. |SHIELD:png:pyTooling-gitter| image:: https://raster.shields.io/badge/chat-on%20gitter-4db797.?longCache=true&style=flat-square&logo=gitter&logoColor=e8ecef .. |SHIELD:png:pyTooling-gitter| image:: https://raster.shields.io/badge/chat-on%20gitter-4db797?longCache=true&style=flat-square&logo=gitter&logoColor=e8ecef
:alt: Documentation License :alt: Documentation License
:height: 22 :height: 22
:target: https://gitter.im/hdl/community :target: https://gitter.im/hdl/community

View File

@@ -11,7 +11,7 @@
# # # #
# License: # # License: #
# ==================================================================================================================== # # ==================================================================================================================== #
# Copyright 2017-2024 Patrick Lehmann - Bötzingen, Germany # # Copyright 2017-2025 Patrick Lehmann - Bötzingen, Germany #
# # # #
# Licensed under the Apache License, Version 2.0 (the "License"); # # Licensed under the Apache License, Version 2.0 (the "License"); #
# you may not use this file except in compliance with the License. # # you may not use this file except in compliance with the License. #
@@ -34,7 +34,7 @@ A module for a set of dummy classes.
__author__ = "Patrick Lehmann" __author__ = "Patrick Lehmann"
__email__ = "Paebbels@gmail.com" __email__ = "Paebbels@gmail.com"
__copyright__ = "2017-2024, Patrick Lehmann" __copyright__ = "2017-2025, Patrick Lehmann"
__license__ = "Apache License, Version 2.0" __license__ = "Apache License, Version 2.0"
__version__ = "0.4.4" __version__ = "0.4.4"
__keywords__ = ["GitHub Actions"] __keywords__ = ["GitHub Actions"]

View File

@@ -11,7 +11,7 @@
# # # #
# License: # # License: #
# ==================================================================================================================== # # ==================================================================================================================== #
# Copyright 2017-2024 Patrick Lehmann - Bötzingen, Germany # # Copyright 2017-2025 Patrick Lehmann - Bötzingen, Germany #
# # # #
# Licensed under the Apache License, Version 2.0 (the "License"); # # Licensed under the Apache License, Version 2.0 (the "License"); #
# you may not use this file except in compliance with the License. # # you may not use this file except in compliance with the License. #
@@ -34,7 +34,7 @@ A module for a set of dummy classes.
__author__ = "Patrick Lehmann" __author__ = "Patrick Lehmann"
__email__ = "Paebbels@gmail.com" __email__ = "Paebbels@gmail.com"
__copyright__ = "2017-2024, Patrick Lehmann" __copyright__ = "2017-2025, Patrick Lehmann"
__license__ = "Apache License, Version 2.0" __license__ = "Apache License, Version 2.0"
__version__ = "0.14.8" __version__ = "0.14.8"
__keywords__ = ["GitHub Actions"] __keywords__ = ["GitHub Actions"]

View File

@@ -1,8 +1,8 @@
[build-system] [build-system]
requires = [ requires = [
"setuptools ~= 75.5", "setuptools ~= 78.1",
"wheel ~= 0.45", "wheel ~= 0.45",
"pyTooling ~= 8.0" "pyTooling ~= 8.4"
] ]
build-backend = "setuptools.build_meta" build-backend = "setuptools.build_meta"
@@ -21,7 +21,10 @@ namespace_packages = true
html_report = "report/typing" html_report = "report/typing"
[tool.pytest] [tool.pytest]
junit_xml = "report/unit/TestReportSummary.xml" junit_xml = "report/unit/UnittestReportSummary.xml"
[tool.pyedaa-reports]
junit_xml = "report/unit/unittest.xml"
[tool.pytest.ini_options] [tool.pytest.ini_options]
addopts = "--tb=native" addopts = "--tb=native"

View File

@@ -5,7 +5,7 @@
# Unai Martinez-Corral # # Unai Martinez-Corral #
# # # #
# ==================================================================================================================== # # ==================================================================================================================== #
# Copyright 2020-2024 The pyTooling Authors # # Copyright 2020-2025 The pyTooling Authors #
# # # #
# Licensed under the Apache License, Version 2.0 (the "License"); # # Licensed under the Apache License, Version 2.0 (the "License"); #
# you may not use this file except in compliance with the License. # # you may not use this file except in compliance with the License. #

View File

@@ -1 +1 @@
pyTooling ~= 8.0 pyTooling ~= 8.4

View File

@@ -11,7 +11,7 @@
# # # #
# License: # # License: #
# ==================================================================================================================== # # ==================================================================================================================== #
# Copyright 2017-2024 Patrick Lehmann - Bötzingen, Germany # # Copyright 2017-2025 Patrick Lehmann - Bötzingen, Germany #
# # # #
# Licensed under the Apache License, Version 2.0 (the "License"); # # Licensed under the Apache License, Version 2.0 (the "License"); #
# you may not use this file except in compliance with the License. # # you may not use this file except in compliance with the License. #

View File

@@ -11,7 +11,7 @@
# # # #
# License: # # License: #
# ==================================================================================================================== # # ==================================================================================================================== #
# Copyright 2017-2024 Patrick Lehmann - Bötzingen, Germany # # Copyright 2017-2025 Patrick Lehmann - Bötzingen, Germany #
# # # #
# Licensed under the Apache License, Version 2.0 (the "License"); # # Licensed under the Apache License, Version 2.0 (the "License"); #
# you may not use this file except in compliance with the License. # # you may not use this file except in compliance with the License. #

View File

@@ -1,13 +1,13 @@
-r ../requirements.txt -r ../requirements.txt
# Coverage collection # Coverage collection
Coverage ~= 7.6 Coverage ~= 7.8
# Test Runner # Test Runner
pytest ~= 8.3 pytest ~= 8.3
pytest-cov ~= 6.0 pytest-cov ~= 6.1
# Static Type Checking # Static Type Checking
mypy ~= 1.13 mypy ~= 1.15
typing_extensions ~= 4.12 typing_extensions ~= 4.13
lxml ~= 5.3 lxml ~= 5.3

View File

@@ -11,7 +11,7 @@
# # # #
# License: # # License: #
# ==================================================================================================================== # # ==================================================================================================================== #
# Copyright 2017-2024 Patrick Lehmann - Bötzingen, Germany # # Copyright 2017-2025 Patrick Lehmann - Bötzingen, Germany #
# # # #
# Licensed under the Apache License, Version 2.0 (the "License"); # # Licensed under the Apache License, Version 2.0 (the "License"); #
# you may not use this file except in compliance with the License. # # you may not use this file except in compliance with the License. #

View File

@@ -11,7 +11,7 @@
# # # #
# License: # # License: #
# ==================================================================================================================== # # ==================================================================================================================== #
# Copyright 2017-2024 Patrick Lehmann - Bötzingen, Germany # # Copyright 2017-2025 Patrick Lehmann - Bötzingen, Germany #
# # # #
# Licensed under the Apache License, Version 2.0 (the "License"); # # Licensed under the Apache License, Version 2.0 (the "License"); #
# you may not use this file except in compliance with the License. # # you may not use this file except in compliance with the License. #