From 77a6b4c00af6e7145370770cf031267cd128b5e9 Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Sun, 3 Nov 2024 10:56:43 +0100 Subject: [PATCH] Use new extract job. --- .github/workflows/BuildTheDocs.yml | 3 + .github/workflows/CoverageCollection.yml | 3 + .github/workflows/ExtractConfiguration.yml | 144 +++++++++++++++++++++ .github/workflows/Parameters.yml | 1 + .github/workflows/SphinxDocumentation.yml | 107 ++------------- .github/workflows/_Checking_Pipeline.yml | 7 + 6 files changed, 166 insertions(+), 99 deletions(-) create mode 100644 .github/workflows/ExtractConfiguration.yml diff --git a/.github/workflows/BuildTheDocs.yml b/.github/workflows/BuildTheDocs.yml index a8d72c1..a1f9baf 100644 --- a/.github/workflows/BuildTheDocs.yml +++ b/.github/workflows/BuildTheDocs.yml @@ -37,6 +37,9 @@ jobs: runs-on: ubuntu-24.04 steps: + - name: '❗ Deprecation message' + run: echo "::warning title=Deprecated::'BuildTheDocs.yml' is not maintained anymore. Please switch to 'SphinxDocumentation.yml', 'LaTeXDocumentation.yml' and 'ExtractConfiguration.yml'. " + - name: ⏬ Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/CoverageCollection.yml b/.github/workflows/CoverageCollection.yml index 3106933..cf7e635 100644 --- a/.github/workflows/CoverageCollection.yml +++ b/.github/workflows/CoverageCollection.yml @@ -71,6 +71,9 @@ jobs: runs-on: "ubuntu-${{ inputs.ubuntu_image_version }}" steps: + - name: '❗ Deprecation message' + run: echo "::warning title=Deprecated::'CoverageCollection.yml' is not maintained anymore. Please switch to 'UnitTesting.yml', 'PublishCoverageResults.yml' and 'PublishTestResults.yml'. " + - name: ⏬ Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/ExtractConfiguration.yml b/.github/workflows/ExtractConfiguration.yml new file mode 100644 index 0000000..5ce99bc --- /dev/null +++ b/.github/workflows/ExtractConfiguration.yml @@ -0,0 +1,144 @@ +# ==================================================================================================================== # +# Authors: # +# Patrick Lehmann # +# # +# ==================================================================================================================== # +# Copyright 2020-2024 The pyTooling Authors # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +# # +# SPDX-License-Identifier: Apache-2.0 # +# ==================================================================================================================== # +name: Extract Configuration + +on: + workflow_call: + inputs: + ubuntu_image_version: + description: 'Ubuntu image version.' + required: false + default: '24.04' + type: string + python_version: + description: 'Python version.' + required: false + default: '3.12' + type: string + coverage_config: + description: 'Path to the .coveragerc file. Use pyproject.toml by default.' + required: false + default: 'pyproject.toml' + type: string + + outputs: + coverage_report_html_directory: + description: "" + value: ${{ jobs.Extract.outputs.coverage_report_html_directory }} + coverage_report_xml_directory: + description: "" + value: ${{ jobs.Extract.outputs.coverage_report_xml_directory }} + coverage_report_xml: + description: "" + value: ${{ jobs.Extract.outputs.coverage_report_xml }} + coverage_report_json_directory: + description: "" + value: ${{ jobs.Extract.outputs.coverage_report_json_directory }} + coverage_report_json: + description: "" + value: ${{ jobs.Extract.outputs.coverage_report_json }} + +jobs: + Extract: + name: 📓 Extract configurations from pyproject.toml + runs-on: "ubuntu-${{ inputs.ubuntu_image_version }}" + outputs: + 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: ${{ steps.getVariables.outputs.coverage_report_xml }} + coverage_report_json_directory: ${{ steps.getVariables.outputs.coverage_report_json_directory }} + coverage_report_json: ${{ steps.getVariables.outputs.coverage_report_json }} + + steps: + - name: ⏬ Checkout repository + uses: actions/checkout@v4 + + - name: 🐍 Setup Python ${{ inputs.python_version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ inputs.python_version }} + + - name: 🔧 Install wheel,tomli and pip dependencies (native) + run: | + python -m pip install --disable-pip-version-check -U wheel 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_directory={xmlFile.parent.as_posix()} + coverage_report_xml={xmlFile.as_posix()} + coverage_report_json_directory={jsonFile.parent.as_posix()} + coverage_report_json={jsonFile.as_posix()} + """)) + + print(f"DEBUG:\n html={htmlDirectory}\n xml={xmlFile}\n json={jsonFile}") diff --git a/.github/workflows/Parameters.yml b/.github/workflows/Parameters.yml index 55bdc1b..c6d03fc 100644 --- a/.github/workflows/Parameters.yml +++ b/.github/workflows/Parameters.yml @@ -101,6 +101,7 @@ on: jobs: Parameters: + name: ✎ Generate pipeline parameters runs-on: "ubuntu-${{ inputs.ubuntu_image_version }}" outputs: python_version: ${{ steps.params.outputs.python_version }} diff --git a/.github/workflows/SphinxDocumentation.yml b/.github/workflows/SphinxDocumentation.yml index 16bb16b..ed10ac2 100644 --- a/.github/workflows/SphinxDocumentation.yml +++ b/.github/workflows/SphinxDocumentation.yml @@ -39,16 +39,15 @@ on: required: false default: '-r doc/requirements.txt' type: string - coverage_config: - description: 'Path to the .coveragerc file. Use pyproject.toml by default.' - required: false - default: 'pyproject.toml' - type: string doc_directory: description: 'Path to the directory containing documentation (Sphinx working directory).' required: false default: 'doc' type: string + coverage_report_json_directory: + description: '' + required: true + type: string coverage_json_artifact: description: 'Name of the coverage JSON artifact.' required: false @@ -76,97 +75,9 @@ on: type: string jobs: - Prepare: - name: 📓 Extract configurations from pyproject.toml - runs-on: "ubuntu-${{ inputs.ubuntu_image_version }}" - outputs: - 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: ${{ steps.getVariables.outputs.coverage_report_xml }} - coverage_report_json_directory: ${{ steps.getVariables.outputs.coverage_report_json_directory }} - coverage_report_json: ${{ steps.getVariables.outputs.coverage_report_json }} - - steps: - - name: ⏬ Checkout repository - uses: actions/checkout@v4 - - - name: 🐍 Setup Python ${{ inputs.python_version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ inputs.python_version }} - - - name: 🔧 Install wheel,tomli and pip dependencies (native) - run: | - python -m pip install --disable-pip-version-check -U wheel tomli - python -m pip install --disable-pip-version-check ${{ inputs.requirements }} - - - 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_directory={xmlFile.parent.as_posix()} - coverage_report_xml={xmlFile.as_posix()} - coverage_report_json_directory={jsonFile.parent.as_posix()} - coverage_report_json={jsonFile.as_posix()} - """)) - - print(f"DEBUG:\n html={htmlDirectory}\n xml={xmlFile}\n json={jsonFile}") - Sphinx-HTML: - name: 📓 Documentation generation using Sphinx and Python ${{ inputs.python_version }} + name: 📓 HTML Documentation using Sphinx and Python ${{ inputs.python_version }} runs-on: "ubuntu-${{ inputs.ubuntu_image_version }}" - needs: - - Prepare steps: - name: ⏬ Checkout repository @@ -197,7 +108,7 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.coverage_json_artifact }} - path: ${{ needs.Prepare.outputs.coverage_report_json_directory }} + path: ${{ inputs.coverage_report_json_directory }} - name: ☑ Generate HTML documentation if: inputs.html_artifact != '' @@ -218,10 +129,8 @@ jobs: retention-days: 1 Sphinx-LaTeX: - name: 📓 Documentation generation using Sphinx and Python ${{ inputs.python_version }} + name: 📓 LaTeX Documentation using Sphinx and Python ${{ inputs.python_version }} runs-on: "ubuntu-${{ inputs.ubuntu_image_version }}" - needs: - - Prepare steps: - name: ⏬ Checkout repository @@ -252,7 +161,7 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.coverage_json_artifact }} - path: ${{ needs.Prepare.outputs.coverage_report_json_directory }} + path: ${{ inputs.coverage_report_json_directory }} - name: ☑ Generate LaTeX documentation if: inputs.latex_artifact != '' diff --git a/.github/workflows/_Checking_Pipeline.yml b/.github/workflows/_Checking_Pipeline.yml index 02ee025..f6f40b0 100644 --- a/.github/workflows/_Checking_Pipeline.yml +++ b/.github/workflows/_Checking_Pipeline.yml @@ -77,6 +77,11 @@ jobs: directory: sphinx_reports # fail_below: 70 + ConfigParams: + uses: pyTooling/Actions/.github/workflows/ExtractConfiguration.yml@sphinx + needs: + - DocCoverage + Package: uses: pyTooling/Actions/.github/workflows/Package.yml@sphinx needs: @@ -122,11 +127,13 @@ jobs: uses: pyTooling/Actions/.github/workflows/SphinxDocumentation.yml@sphinx needs: - UnitTestingParams + - ConfigParams - PublishTestResults - PublishCoverageResults # - VerifyDocs with: python_version: ${{ needs.UnitTestingParams.outputs.python_version }} + coverage_report_json_directory: ${{ needs.ConfigParams.outputs.coverage_report_json_directory }} # unittest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} # coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }}