Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
08dd2c2
Publish documentation again when application testing is disabled
claude-code Aug 1, 2026
9ef1d70
Correct documented defaults against the workflow YAML
claude-code Aug 2, 2026
9917e7e
Document the parameters that had no documentation
claude-code Aug 2, 2026
08e5d3b
Document the ApplicationTesting job template
claude-code Aug 2, 2026
8104b98
Align the documented algorithms with the actual step order
claude-code Aug 2, 2026
2b3784e
Document CheckCodeQuality and CleanupArtifacts
claude-code Aug 2, 2026
6a4b093
Correct the dependency lists against the actions actually used
claude-code Aug 2, 2026
4d42190
Refresh the overview, the landing page and the instantiation examples
claude-code Aug 2, 2026
52b7c7a
Describe the fixed behavior instead of the defects
claude-code Aug 2, 2026
15d504e
Link the new *Conditional Jobs* section from the cleanup template
claude-code Aug 2, 2026
772505f
Review: apply the general items from the first half of the review
claude-code Aug 3, 2026
6f0fbaa
Warn at runtime that `IntermediateCleanUp.yml` is deprecated
claude-code Aug 3, 2026
fe06199
Review round 3: indices, glossary, dependency lists, system list
claude-code Aug 3, 2026
4d1d2a6
Fall back to GitHub's default run title instead of the workflow name
claude-code Aug 3, 2026
0cc3812
Name tag runs after the tag in the verification workflows
claude-code Aug 3, 2026
1bdb469
Review round 4: one style for boolean parameters
claude-code Aug 3, 2026
a46764f
Documentation rework: cross-check every job template against its work…
Paebbels Aug 3, 2026
828b7bf
Fix three defects found while cross-checking the documentation
claude-code Aug 2, 2026
051047c
Fix submodule detection, the CleanupArtifacts NameError and the skipp…
Paebbels Aug 3, 2026
d30835f
Let the SimplePackage verification pipeline go green
claude-code Aug 3, 2026
958de9e
v7.15.0
claude-code Aug 3, 2026
6f3d6d2
v7.15.0
Paebbels Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/CheckCodeQuality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ jobs:

- name: 👮 Bandit
id: bandit
if: inputs.artifact != ''
run: |
set +e

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/CleanupArtifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ jobs:
case [prefix, key, postfix] if key in artifactNames:
artifacts.append(f"{prefix}{artifactNames[key]}{postfix}")
case _:
printf(f"Name '{name}' not found in JSON dictionary.")
print(f"Name '{name}' not found in JSON dictionary.")

print("Artifact to delete:")
for name in artifacts:
Expand Down Expand Up @@ -143,7 +143,7 @@ jobs:
case [prefix, key, postfix] if key in artifactNames:
artifacts.append(f"{prefix}{artifactNames[key]}{postfix}")
case _:
printf(f"Name '{name}' not found in JSON dictionary.")
print(f"Name '{name}' not found in JSON dictionary.")

print("Artifact to delete:")
for name in artifacts:
Expand Down
39 changes: 32 additions & 7 deletions .github/workflows/CompletePipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,11 @@ jobs:
- UnitTestingParams
- PublishCoverageResults
- PublishTestResults
if: ${{ !cancelled() && inputs.cleanup == 'true' }} # not 'success() || failure()', because that's false if a dependency was skipped
# not 'success() || failure()', because that's false if a dependency was skipped
if: >-
${{ !cancelled()
&& inputs.cleanup == 'true'
}}
with:
json: ${{ needs.UnitTestingParams.outputs.artifact_names }}
artifact-json-ids: >-
Expand All @@ -437,7 +441,11 @@ jobs:
needs:
- UnitTestingParams
- Documentation
if: contains(inputs.documentation_steps, 'latex') && contains(inputs.documentation_steps, 'pdf')
if: >-
${{ !failure() && !cancelled()
&& contains(inputs.documentation_steps, 'latex')
&& contains(inputs.documentation_steps, 'pdf')
}}
with:
document: ${{ needs.UnitTestingParams.outputs.package_fullname }}
latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }}
Expand All @@ -454,7 +462,10 @@ jobs:
# - PDFDocumentation
- PublishCoverageResults
- StaticTypeCheck
if: contains(inputs.documentation_steps, 'pages')
if: >-
${{ !failure() && !cancelled()
&& contains(inputs.documentation_steps, 'pages')
}}
with:
doc: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }}
coverage: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }}
Expand All @@ -471,7 +482,11 @@ jobs:
- Package
- Install
- PublishToGitHubPages
if: ${{ !failure() && !cancelled() && needs.Prepare.outputs.is_release_commit == 'true' && github.event_name != 'schedule' }} # !failure(): tolerate skipped dependencies (e.g. PublishToGitHubPages), but not failed ones
if: >-
${{ !failure() && !cancelled()
&& needs.Prepare.outputs.is_release_commit == 'true'
&& github.event_name != 'schedule'
}}
permissions:
contents: write # required for create tag
actions: write # required for trigger workflow
Expand All @@ -490,7 +505,10 @@ jobs:
- Package
- Install
- PublishToGitHubPages
if: ${{ !failure() && !cancelled() && needs.Prepare.outputs.is_release_tag == 'true' }} # !failure(): tolerate skipped dependencies (e.g. PublishToGitHubPages), but not failed ones
if: >-
${{ !failure() && !cancelled()
&& needs.Prepare.outputs.is_release_tag == 'true'
}}
permissions:
contents: write
actions: write
Expand All @@ -505,7 +523,10 @@ jobs:
- UnitTestingParams
- Package
- ReleasePage
if: ${{ !failure() && !cancelled() && needs.Prepare.outputs.is_release_tag == 'true' }} # !failure(): tolerate skipped dependencies, but not failed ones
if: >-
${{ !failure() && !cancelled()
&& needs.Prepare.outputs.is_release_tag == 'true'
}}
with:
python_version: ${{ needs.UnitTestingParams.outputs.python_version }}
requirements: '-r dist/requirements.txt'
Expand All @@ -529,7 +550,11 @@ jobs:
# - PublishOnPyPI
- Install
- IntermediateCleanUp
if: ${{ !cancelled() && inputs.cleanup == 'true' }} # !cancelled(), because PDFDocumentation is skipped without 'latex' and 'pdf' in documentation_steps
# !cancelled(), because PDFDocumentation is skipped without 'latex' and 'pdf' in documentation_steps
if: >-
${{ !cancelled()
&& inputs.cleanup == 'true'
}}
with:
json: ${{ needs.UnitTestingParams.outputs.artifact_names }}
artifact-json-ids: >-
Expand Down
27 changes: 27 additions & 0 deletions .github/workflows/IntermediateCleanUp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,33 @@ jobs:
name: 🗑️ Intermediate Artifact Cleanup
runs-on: "ubuntu-${{ inputs.ubuntu_image_version }}"
steps:
- name: ⚠️ Deprecation warning
shell: bash
run: |
printf "::warning title=Deprecated workflow::%s\n" \
"'IntermediateCleanUp.yml' is deprecated and will be removed in r8. Use 'CleanupArtifacts.yml' instead."
printf "\n"
printf "%s\n" "'IntermediateCleanUp.yml' is deprecated and will be removed in r8."
printf "%s\n" "Use 'CleanupArtifacts.yml' instead, which resolves artifact names from the"
printf "%s\n" "'artifact_names' JSON dictionary produced by 'Parameters.yml', so the caller"
printf "%s\n" "no longer assembles artifact names itself."
printf "\n"
printf "%s\n" "Migration:"
printf "%s\n" " * Pass the whole 'artifact_names' dictionary of 'Parameters.yml' as 'json',"
printf "%s\n" " instead of assembling a prefix per artifact kind."
printf "%s\n" " * Both prefix parameters become entries of 'artifact-json-ids' using the"
printf "%s\n" " postfix form, which is what matches the per-matrix-job variants:"
printf "\n"
printf "%s\n" " artifact-json-ids: >-"
printf "%s\n" " codecoverage_sqlite:-*"
printf "%s\n" " unittesting_xml:-*"
printf "\n"
printf "%s\n" " * Give the job an 'if' containing a status check function, e.g. '!cancelled()',"
printf "%s\n" " so a skipped upstream job doesn't skip the cleanup."
printf "\n"
printf "%s\n" "See 'CompletePipeline.yml' for a worked example - it instantiates"
printf "%s\n" "'CleanupArtifacts.yml' for the intermediate as well as the final cleanup."

- name: 🗑️ Delete SQLite coverage artifacts from matrix jobs
uses: geekyeggo/delete-artifact@v6
if: inputs.sqlite_coverage_artifacts_prefix != ''
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/PrepareJob.yml
Original file line number Diff line number Diff line change
Expand Up @@ -366,9 +366,9 @@ jobs:
fi

# Submodules
if [[ -f .gitsubmodules ]]; then
git_modules_file=.gitmodules # $(git rev-parse --show-toplevel)/.gitmodules
if [[ -f "${git_modules_file}" ]]; then
has_submodules="true"
git_modules_file=.gitmodules # $(git rev-parse --show-toplevel)/.gitmodules
git_submodule_count="$(grep -Po '(?<=\[submodule \")(.*)(?=\"\])' "${git_modules_file}" | wc -l)"
git_submodule_names="$(grep -Po '(?<=\[submodule \")(.*)(?=\"\])' "${git_modules_file}" | paste -sd ':' -)"
git_submodule_paths="$(git config --file "${git_modules_file}" --null --name-only --get-regexp '\.path$' | xargs -0 -n1 git config --file "${git_modules_file}" --get | paste -sd ':' -)"
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/_Checking_AvailableRunners.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Testing available GitHub Action Images
run-name: ${{ github.ref_type == 'tag' && github.ref_name || '' }}

on:
push:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/_Checking_CleanupArtifacts.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Verification Pipeline for ArtifactCleanup
run-name: ${{ github.ref_type == 'tag' && github.ref_name || '' }}

on:
# push:
Expand Down Expand Up @@ -57,8 +58,10 @@ jobs:
- Package
with:
json: ${{ needs.Params.outputs.artifact_names }}
# Deliberate added 'unknown_key' for exception testing.
artifact-json-ids: >-
unittesting_xml:-*
unknown_key
# The package artifact is kept on tagged runs, so 'PublishOnPyPI.yml' can still consume it.
json2: ${{ needs.Params.outputs.artifact_names }}
condition2: ${{ ! startsWith(github.ref, 'refs/tags') }}
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/_Checking_JobTemplates.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Verification of Job Templates
run-name: ${{ github.ref_type == 'tag' && github.ref_name || '' }}

on:
push:
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/_Checking_NamespacePackage_Pipeline.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Verification of Pipeline Templates (Namespace Package)
run-name: ${{ github.ref_type == 'tag' && github.ref_name || '' }}

on:
push:
Expand All @@ -21,7 +22,7 @@ jobs:
codecov: 'true'
codacy: 'true'
dorny: 'true'
documentation_steps: 'html'
documentation_steps: 'html latex pdf'
auto_tag: 'false'
secrets:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/_Checking_Nightly.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Verification of Nightly Releases
run-name: ${{ github.ref_type == 'tag' && github.ref_name || '' }}

on:
# push:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/_Checking_Parameters.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Verification Pipeline for Parameters
run-name: ${{ github.ref_type == 'tag' && github.ref_name || '' }}

on:
push:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/_Checking_SimplePackage_Pipeline.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Verification of Pipeline Templates (Simple Package)
run-name: ${{ github.ref_type == 'tag' && github.ref_name || '' }}

on:
push:
Expand Down
50 changes: 45 additions & 5 deletions doc/Dependency.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@ This is a summary of dependencies used by the provided job templates. For more d
* Actions provided by GitHub

* :gh:`actions/checkout`
* :gh:`actions/upload-artifact`
* :gh:`actions/download-artifact`
* :gh:`actions/create-release` (unmaintained)
* :gh:`actions/setup-python`
* :gh:`actions/github-script`
* :gh:`actions/upload-pages-artifact`
* :gh:`actions/deploy-pages`

* BuildTheDocs
* Actions provided by pyTooling

* :gh:`buildthedocs/btd`
* :term:`upload-artifact` (:gh:`pyTooling/upload-artifact`)
* :term:`download-artifact` (:gh:`pyTooling/download-artifact`)

* Code Quality Services

Expand All @@ -28,3 +29,42 @@ This is a summary of dependencies used by the provided job templates. For more d

* :gh:`msys2/setup-msys2`
* :gh:`geekyeggo/delete-artifact`
* :term:`gh` - preinstalled on GitHub runners.
* :term:`pyTooling/MiKTeX` (:dockerhub:`Docker image <pytooling/miktex>`)

* System packages installed through ``apt``

* `graphviz <https://graphviz.org/>`__
* `zstd <https://facebook.github.io/zstd/>`__

* System packages installed through the caller's parameters

These are **not** installed by the job templates. The templates only pass the package lists on, so the caller
decides which system packages a test needs:

* ``apt`` - Debian/Ubuntu packages.
* ``brew`` - Homebrew packages on macOS.
* ``pacboy`` - MSYS2 packages, given in ``pacboy`` syntax.

* Python packages installed through :term:`pip`

* :term:`bandit` (:pypi:`PyPI package <bandit>`)
* :term:`build` (:pypi:`PyPI package <build>`)
* :term:`Coverage.py` (:pypi:`PyPI package <coverage>`)
* :term:`docstr_coverage` (:pypi:`PyPI package <docstr_coverage>`)
* :term:`interrogate` (:pypi:`PyPI package <interrogate>`)
* :term:`pyEDAA.Reports` (:pypi:`PyPI package <pyEDAA.Reports>`)
* :term:`pylint` (:pypi:`PyPI package <pylint>`)
* :term:`radon` (:pypi:`PyPI package <radon>`)
* :term:`twine` (:pypi:`PyPI package <twine>`)
* :term:`wheel` (:pypi:`PyPI package <wheel>`)

* Python packages installed through the caller's requirements file

These are **not** installed by the job templates. The templates only run the tools, so the caller decides the
version:

* :term:`mypy` (:pypi:`PyPI package <mypy>`)
* :term:`pytest` (:pypi:`PyPI package <pytest>`)
* :term:`Coverage.py` (:pypi:`PyPI package <coverage>`)
* :term:`Sphinx` (:pypi:`PyPI package <Sphinx>`), its theme and its extensions
Loading
Loading