diff --git a/.github/workflows/Pipeline-NamespacePackage.yml b/.github/workflows/Pipeline-NamespacePackage.yml new file mode 100644 index 0000000..e6e24d4 --- /dev/null +++ b/.github/workflows/Pipeline-NamespacePackage.yml @@ -0,0 +1,284 @@ +name: Namespace Package + +on: + workflow_call: + inputs: + package_namespace: + description: 'Name of the tool.' + required: true + type: string + package_name: + description: 'Name of the tool.' + required: true + type: string + unittest_python_version: + description: 'Python version.' + required: false + default: '3.13' + type: string + unittest_python_version_list: + description: 'Space separated list of Python versions to run tests with.' + required: false + default: '3.9 3.10 3.11 3.12 3.13' + type: string + unittest_system_list: + description: 'Space separated list of systems to run tests on.' + required: false + default: 'ubuntu windows macos macos-arm mingw64 ucrt64' + type: string + unittest_include_list: + description: 'Space separated list of system:python items to be included into the list of test.' + required: false + default: '' + type: string + unittest_exclude_list: + description: 'Space separated list of system:python items to be excluded from the list of test.' + required: false + default: '' + type: string + unittest_disable_list: + description: 'Space separated list of system:python items to be disabled from the list of test.' + required: false + default: '' + type: string + apptest_python_version: + description: 'Python version.' + required: false + default: '3.13' + type: string + apptest_python_version_list: + description: 'Space separated list of Python versions to run tests with.' + required: false + default: "" + type: string + apptest_system_list: + description: 'Space separated list of systems to run tests on.' + required: false + default: 'ubuntu windows macos macos-arm ucrt64' + type: string + apptest_include_list: + description: 'Space separated list of system:python items to be included into the list of test.' + required: false + default: '' + type: string + apptest_exclude_list: + description: 'Space separated list of system:python items to be excluded from the list of test.' + required: false + default: '' + type: string + apptest_disable_list: + description: 'Space separated list of system:python items to be disabled from the list of test.' + required: false + default: '' + type: string + +jobs: + UnitTestingParams: + uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev + with: + name: "${{ inputs.package_namespace }}.${{ inputs.package_name }}" + python_version: ${{ inputs.unittest_python_version }} + python_version_list: ${{ inputs.unittest_python_version_list }} + system_list: ${{ inputs.unittest_system_list }} + include_list: ${{ inputs.unittest_include_list }} + exclude_list: ${{ inputs.unittest_exclude_list }} + disable_list: ${{ inputs.unittest_disable_list }} + + AppTestingParams: + uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev + with: + name: "${{ inputs.package_namespace }}.${{ inputs.package_name }}" + python_version: ${{ inputs.apptest_python_version }} + python_version_list: ${{ inputs.apptest_python_version_list }} + system_list: ${{ inputs.apptest_system_list }} + include_list: ${{ inputs.apptest_include_list }} + exclude_list: ${{ inputs.apptest_exclude_list }} + disable_list: ${{ inputs.apptest_disable_list }} + + UnitTesting: + uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@dev + needs: + - UnitTestingParams + with: + jobs: ${{ needs.UnitTestingParams.outputs.python_jobs }} + requirements: "-r tests/unit/requirements.txt" +# pacboy: "msys/git python-lxml:p" + unittest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} + coverage_sqlite_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }} + + StaticTypeCheck: + uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@dev + needs: + - UnitTestingParams + with: + python_version: ${{ needs.UnitTestingParams.outputs.python_version }} + commands: | + touch ${{ inputs.package_namespace }}/__init__.py + mypy --html-report htmlmypy -p ${{ inputs.package_namespace }}.${{ inputs.name }} + html_report: 'htmlmypy' + html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} + + DocCoverage: + uses: pyTooling/Actions/.github/workflows/CheckDocumentation.yml@dev + needs: + - UnitTestingParams + with: + python_version: ${{ needs.UnitTestingParams.outputs.python_version }} + directory: ${{ inputs.package_namespace }}/${{ inputs.package_name }} +# fail_below: 70 + + ConfigParams: + uses: pyTooling/Actions/.github/workflows/ExtractConfiguration.yml@dev + needs: + - DocCoverage + + Package: + uses: pyTooling/Actions/.github/workflows/Package.yml@dev + needs: + - UnitTestingParams + - UnitTesting + with: + python_version: ${{ needs.UnitTestingParams.outputs.python_version }} + artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} + +# AppTesting: +# uses: pyTooling/Actions/.github/workflows/ApplicationTesting.yml@dev +# needs: +# - AppTestingParams +# - UnitTestingParams +# - Package +# with: +# jobs: ${{ needs.AppTestingParams.outputs.python_jobs }} +# wheel: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} +# apptest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).apptesting_xml }} + + PublishCoverageResults: + uses: pyTooling/Actions/.github/workflows/PublishCoverageResults.yml@dev + needs: + - UnitTestingParams + - UnitTesting + with: +# coverage_sqlite_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }} +# coverage_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_xml }} + coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} + coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} + secrets: + codacy_token: ${{ secrets.CODACY_PROJECT_TOKEN }} + + PublishTestResults: + uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@dev + needs: + - UnitTestingParams + - UnitTesting + with: + merged_junit_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} + +# VerifyDocs: +# uses: pyTooling/Actions/.github/workflows/VerifyDocs.yml@dev +# needs: +# - UnitTestingParams +# with: +# python_version: ${{ needs.UnitTestingParams.outputs.python_version }} + + Documentation: + uses: pyTooling/Actions/.github/workflows/SphinxDocumentation.yml@dev + 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 }}-ubuntu-native-3.12 + coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} + html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }} + latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }} + + IntermediateCleanUp: + uses: pyTooling/Actions/.github/workflows/IntermediateCleanUp.yml@dev + needs: + - UnitTestingParams + - PublishCoverageResults + - PublishTestResults + - Documentation + with: + sqlite_coverage_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }}- + xml_unittest_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}- + +# PDFDocumentation: +# uses: pyTooling/Actions/.github/workflows/LaTeXDocumentation.yml@dev +# needs: +# - UnitTestingParams +# - Documentation +# with: +# document: pyEDAA.ProjectModel +# latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }} +# pdf_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_pdf }} + + PublishToGitHubPages: + uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@dev + needs: + - UnitTestingParams + - Documentation +# - PDFDocumentation + - PublishCoverageResults + - StaticTypeCheck + with: + doc: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }} + coverage: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} + typing: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} + + ReleasePage: + uses: pyTooling/Actions/.github/workflows/Release.yml@dev + if: startsWith(github.ref, 'refs/tags') + needs: + - Package +# - AppTesting + - PublishToGitHubPages + + PublishOnPyPI: + uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@dev + if: startsWith(github.ref, 'refs/tags') + needs: + - UnitTestingParams + - ReleasePage + with: + python_version: ${{ needs.UnitTestingParams.outputs.python_version }} + requirements: -r dist/requirements.txt + artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} + secrets: + PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} + + ArtifactCleanUp: + uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@dev + needs: + - UnitTestingParams + - UnitTesting + - StaticTypeCheck + - Documentation +# - PDFDocumentation + - PublishTestResults + - PublishCoverageResults + - PublishToGitHubPages +# - PublishOnPyPI + - IntermediateCleanUp + with: + package: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} + remaining: | + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_html }}-* + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_xml }}-* + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }}-* + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }}-* + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_html }} + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }} + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_xml }} + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }} + ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }} +# ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).apptesting_xml }}-* +# ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_pdf }} diff --git a/doc/requirements.txt b/doc/requirements.txt index da3f29a..a5c9dcd 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -5,6 +5,7 @@ pyTooling ~= 7.0 # Enforce latest version on ReadTheDocs sphinx ~= 8.1 docutils ~= 0.21 +docutils_stubs ~= 0.0.22 # ReadTheDocs Theme sphinx_rtd_theme ~= 3.0