CompletePipeline
The CompletePipeline job template is the combination of almost all job templates offered by pyTooling/Actions in a
single workflow template. If fulfills all needs to test, package, document, publish and release Python code from GitHub.
It can be used for simple Python packages as well as namespace packages.
Instantiation
The following instantiation example creates a SimplePackage job derived from job template CompletePipeline
version @r8. It only requires the package_name parameter to run a full pipeline suitable for a Python project.
name: Pipeline jobs: SimplePackage: uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@r8 with: package_name: myPackagename: Pipeline jobs: NamespacePackage: uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@r8 with: package_namespace: myFramework package_name: Extension📂ProjectRoot/ 📂myFramework/ 📦SubPackage/ 🐍__init__.py 🐍SubModuleA.py 🐍__init__.py 🐍ModuleB.py📂ProjectRoot/ 📂myFramework/ 📂Extension/ 📦SubPackage/ 🐍__init__.py 🐍SubModuleA.py 🐍__init__.py 🐍ModuleB.py
Parameter Summary
Goto input parameters
Parameter Name |
Required |
Type |
Default |
|---|---|---|---|
no |
string |
|
|
yes |
string |
— — — — |
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
four conditions - see description |
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
|
no |
string |
|
Goto secrets
Token Name |
Required |
Type |
Default |
|---|---|---|---|
no |
string |
— — — — |
|
no |
string |
— — — — |
|
no |
string |
— — — — |
Goto output parameters
This job template has no output parameters.
Input Parameters
package_namespace
- Type:
string
- Required:
no
- Default Value:
''- Possible Values:
Any valid Python namespace.
- Description:
In case the package is a Python namespace package, the name of the library’s or package’s namespace needs to be specified using this parameter.
In case of a simple Python package, this parameter must be specified as an empty string (''), which is the default.- Example:
Example Instantiation
name: Pipeline jobs: NamespacePackage: uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@r8 with: package_namespace: myFramework package_name: Extension
Example Directory Structure
📂ProjectRoot/ 📂myFramework/ 📂Extension/ 📦SubPackage/ 🐍__init__.py 🐍SubModuleA.py 🐍__init__.py 🐍ModuleB.py
package_name
- Type:
string
- Required:
yes
- Default Value:
— — — —
- Possible Values:
Any valid Python package name.
- Description:
In case of a simple Python package, this package’s name is specified using this parameter.
In case the package is a Python namespace package, the parameter package_namespace must be specified, too.- Example:
Example Instantiation
name: Pipeline jobs: SimplePackage: uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@r8 with: package_name: myPackage
Example Directory Structure
📂ProjectRoot/ 📂myFramework/ 📦SubPackage/ 🐍__init__.py 🐍SubModuleA.py 🐍__init__.py 🐍ModuleB.py
version_file
- Type:
string
- Required:
no
- Default Value:
'__init__.py'- Possible Values:
Any path relative to the package directory.
- Description:
Module inside the package that carries the
__version__variable. Forwarded to version_file.
A namespace package has no__init__.pyin its root, so its version is kept in a sub-package, e.g.'Common/__init__.py'forpyTooling.*.
On a release commit and in the tag pipeline, this version must match the version derived from the pull-request title or tag, otherwise the release is refused.
unittest_python_version
- Type:
string
- Required:
no
- Default Value:
'3.14'- Possible Values:
Any valid Python version conforming to the pattern
<major>.<minor>orpypy-<major>.<minor>.
See actions/python-versions - available Python versions and actions/setup-python - configurable Python versions.- Description:
The default Python version used for intermediate jobs using Python tools.
In case unittest_python_version_list is empty, this default version is used to populate the unittest_python_version_list parameter.
unittest_python_version_list
- Type:
string
- Required:
no
- Default Value:
'3.10 3.11 3.12 3.13 3.14'- Possible Values:
A space separated list of valid Python versions conforming to the pattern
<major>.<minor>orpypy-<major>.<minor>.- Description:
The list of space-separated Python versions used for unit testing.
Possible values
3.8,3.9,3.10,3.11,3.12,3.13,3.14pypy-3.7,pypy-3.8,pypy-3.9,pypy-3.10,pypy-3.11
Icon
Version
Maintained until
Comments
⚫
3.8
2024.10
outdated
🔴
3.9
2025.10
🟠
3.10
2026.10
🟡
3.11
2027.10
🟢
3.12
2028.10
🟢
3.13
2029.10
latest CPython
🟣
3.14
2030.10
Python 3.14 alpha, beta (or RC) will be used.
⟲⚫
pypy-3.7
????.??
⟲⚫
pypy-3.8
????.??
⟲🔴
pypy-3.9
????.??
⟲🟠
pypy-3.10
????.??
⟲🟡
pypy-3.11
????.??
latest PyPy
unittest_system_list
- Type:
string
- Required:
no
- Default Value:
'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64'- Possible Values:
A space separated list of system names.
- Description:
The list of space-separated systems used for unit testing.
Possible values
Native systems:
ubuntu,ubuntu-arm,windows,windows-arm,macos,macos-armMSYS2 runtimes:
msys,clang32,clang64,ucrt64
The image used per system is configurable via the
*_imageparameters of Parameters. The versions listed below are the defaults.Icon
System
Used version
Image parameter
Comments
🪟
windows
Windows Server 2025
windows_image🏢
windows-arm
Windows 11 on ARM64
windows_arm_image🐧
ubuntu
Ubuntu 26.04 (LTS)
ubuntu_image⛄
ubuntu-arm
Ubuntu 26.04 (LTS) on ARM64
ubuntu_arm_image🍎
macos
macOS 15 (Intel)
macos_intel_image🍏
macos-arm
macOS 15 (ARM64)
macos_arm_image🪟🟪
msys
MSYS2 - MSYS
runtime of
windows_image🪟🟫
clang32
MSYS2 - Clang32
runtime of
windows_imagedeprecated
🪟🟧
clang64
MSYS2 - Clang64
runtime of
windows_image🪟🟨
ucrt64
MSYS2 - UCRT64
runtime of
windows_imageSource: Images provided by GitHub
unittest_include_list
- Type:
string
- Required:
no
- Default Value:
''- Possible Values:
A space separated list of
<system>:<python_version>tuples.- Description:
List of space-separated
<system>:<python_version>tuples to be included into the list of unittest variants.For more details see include_list.
unittest_exclude_list
- Type:
string
- Required:
no
- Default Value:
'windows-arm:3.9 windows-arm:3.10'- Possible Values:
A space separated list of
<system>:<python_version>tuples.- Description:
List of space-separated
<system>:<python_version>tuples to be excluded from the list of unittest variants.For more details see exclude_list.
unittest_disable_list
- Type:
string
- Required:
no
- Default Value:
'windows-arm:pypy-3.10 windows-arm:pypy-3.11'- Possible Values:
A space separated list of
<system>:<python_version>tuples.- Description:
List of space-separated
<system>:<python_version>tuples to be temporarily disabled from the list of unittest variants.
Each disabled item creates a warning in the workflow log.For more details see disable_list.
unittest_parallel
- Type:
string
- Required:
no
- Default Value:
'auto'- Possible Values:
'auto', a number of workers, or'false'.- Description:
Number of
pytest-xdistworkers for the unit tests. With'false', the tests run serially.
Passed on as parallel.
apptest_python_version
- Type:
string
- Required:
no
- Default Value:
'3.14'- Possible Values:
Any valid Python version conforming to the pattern
<major>.<minor>orpypy-<major>.<minor>.
See actions/python-versions - available Python versions and actions/setup-python - configurable Python versions.- Description:
The default Python version used for intermediate jobs using Python tools.
In case apptest_python_version_list is empty, this default version is used to populate the apptest_python_version_list parameter.
apptest_python_version_list
- Type:
string
- Required:
no
- Default Value:
''- Possible Values:
A space separated list of valid Python versions conforming to the pattern
<major>.<minor>orpypy-<major>.<minor>`.- Description:
The list of space-separated Python versions used for application testing.
As this list is empty by default, the value is derived from apptest_python_version.
Possible values
3.8,3.9,3.10,3.11,3.12,3.13,3.14pypy-3.7,pypy-3.8,pypy-3.9,pypy-3.10,pypy-3.11
Icon
Version
Maintained until
Comments
⚫
3.8
2024.10
outdated
🔴
3.9
2025.10
🟠
3.10
2026.10
🟡
3.11
2027.10
🟢
3.12
2028.10
🟢
3.13
2029.10
latest CPython
🟣
3.14
2030.10
Python 3.14 alpha, beta (or RC) will be used.
⟲⚫
pypy-3.7
????.??
⟲⚫
pypy-3.8
????.??
⟲🔴
pypy-3.9
????.??
⟲🟠
pypy-3.10
????.??
⟲🟡
pypy-3.11
????.??
latest PyPy
apptest_system_list
- Type:
string
- Required:
no
- Default Value:
'ubuntu ubuntu-arm windows windows-arm macos macos-arm ucrt64'- Possible Values:
A space separated list of system names.
- Description:
The list of space-separated systems used for application testing.
Possible values
Native systems:
ubuntu,ubuntu-arm,windows,windows-arm,macos,macos-armMSYS2 runtimes:
msys,clang32,clang64,ucrt64
The image used per system is configurable via the
*_imageparameters of Parameters. The versions listed below are the defaults.Icon
System
Used version
Image parameter
Comments
🪟
windows
Windows Server 2025
windows_image🏢
windows-arm
Windows 11 on ARM64
windows_arm_image🐧
ubuntu
Ubuntu 26.04 (LTS)
ubuntu_image⛄
ubuntu-arm
Ubuntu 26.04 (LTS) on ARM64
ubuntu_arm_image🍎
macos
macOS 15 (Intel)
macos_intel_image🍏
macos-arm
macOS 15 (ARM64)
macos_arm_image🪟🟪
msys
MSYS2 - MSYS
runtime of
windows_image🪟🟫
clang32
MSYS2 - Clang32
runtime of
windows_imagedeprecated
🪟🟧
clang64
MSYS2 - Clang64
runtime of
windows_image🪟🟨
ucrt64
MSYS2 - UCRT64
runtime of
windows_imageSource: Images provided by GitHub
apptest_include_list
- Type:
string
- Required:
no
- Default Value:
''- Possible Values:
A space separated list of
<system>:<python_version>tuples.- Description:
List of space-separated
<system>:<python_version>tuples to be included into the list of application test variants.For more details see include_list.
apptest_exclude_list
- Type:
string
- Required:
no
- Default Value:
'windows-arm:3.9 windows-arm:3.10'- Possible Values:
A space separated list of
<system>:<python_version>tuples.- Description:
List of space-separated
<system>:<python_version>tuples to be excluded from the list of application test variants.For more details see exclude_list.
apptest_disable_list
- Type:
string
- Required:
no
- Default Value:
'windows-arm:pypy-3.10 windows-arm:pypy-3.11'- Possible Values:
A space separated list of
<system>:<python_version>tuples.- Description:
List of space-separated
<system>:<python_version>tuples to be temporarily disabled from the list of application test variants.
Each disabled item creates a warning in the workflow log.For more details see disable_list.
apptest_parallel
- Type:
string
- Required:
no
- Default Value:
'auto'- Possible Values:
'auto', a number of workers, or'false'.- Description:
Number of
pytest-xdistworkers for the application tests. With'false', the tests run serially.
Passed on as parallel.
apptest
- Type:
string
- Required:
no
- Default Value:
'false'- Possible Values:
'true'/'false'- Description:
Run application tests via ApplicationTesting.
Application testing installs the built wheel and exercises the package as an installed package, so it needs a packaging step to have run first.
'true'- run the application tests.
'false'- skip the application testing jobs.
bandit
- Type:
string
- Required:
no
- Default Value:
'false'- Possible Values:
'true'/'false'- Description:
Run Static Application Security Testing (SAST) using bandit.
'true'- run the Bandit job.
'false'- skip it.
pylint
- Type:
string
- Required:
no
- Default Value:
'false'- Possible Values:
'true'/'false'- Description:
Run Python linting using pylint.
'true'- run the PyLint job.
'false'- skip it.
codecov
- Type:
string
- Required:
no
- Default Value:
'false'- Possible Values:
'true'/'false'- Description:
Publish merged code coverage results and a merged unit test summary to CodeCov.
'true'- publish; secret CODECOV_TOKEN must be set.
'false'- do not publish.
codacy
- Type:
string
- Required:
no
- Default Value:
'false'- Possible Values:
'true'/'false'- Description:
Publish merged code coverage results to Codacy.
'true'- publish; secret CODACY_TOKEN must be set.
'false'- do not publish.
dorny
- Type:
string
- Required:
no
- Default Value:
'false'- Possible Values:
'true'/'false'- Description:
Publish a merged unit test summary as pipeline result using Test Reporter.
'true'- create the report page.
'false'- do not create it.
documentation_steps
- Type:
string
- Required:
no
- Default Value:
'html pages'- Possible Values:
A space separated list of
none,html,latex,pdf,pages,assetorall.- Description:
Documentation steps to run.
- html:
Build the HTML documentation using Sphinx.
- latex:
Build the LaTeX documentation using Sphinx.
- pdf:
Translate the LaTeX documentation to PDF using MikTeX. Requires
latex.- pages:
Publish the HTML documentation to GitHub Pages. Requires
html.- asset:
Attach the documentation to the release page.
- all:
All of the above.
- none:
No documentation at all.
A step that is not listed is skipped and its artifact is not produced.
Note
pagesadditionally requires the pipeline’s ref to match publish_pages_on.
miktex_image
- Type:
string
- Required:
no
- Default Value:
'pytooling/miktex:sphinx'- Possible Values:
Any Docker image providing a MikTeX installation with
latexmk, e.g. an image of pyTooling/MiKTeX.- Description:
Docker image used to translate LaTeX to PDF.
Forwarded to miktex_image.
miktex_update
publish_pages_on
- Type:
string
- Required:
no
- Default Value:
default-branch,development-branch,release-tagandnightly-tag, one per line.- Possible Values:
A newline separated list of conditions, see publish_pages_on.
- Description:
Conditions on the pipeline’s ref under which the documentation is published to GitHub Pages, if documentation_steps contains
pages. Forwarded to publish_pages_on.
Agithub-pagesenvironment restricted to selected branches or tags rejects a deployment from any other ref before a runner is assigned, so the job fails after one second without a log. The conditions should not admit more refs than the environment does.
auto_tag
- Type:
string
- Required:
no
- Default Value:
'true'- Possible Values:
'true'/'false'- Description:
Create a release tag when a pull-request was merged into the release branch and its title matches the release tag pattern.
The new tag triggers a second, tagged pipeline run which publishes the release. Forwarded to auto_tag.
'true'- tag the release commit.
'false'- never tag automatically.
check_pypi_duplicate
- Type:
string
- Required:
no
- Default Value:
'true'- Possible Values:
'true'/'false'- Description:
Refuse to tag a release commit, if pypi_url - by default PyPI - already has a release of this version. Forwarded to check_pypi_duplicate.
PyPI never accepts a version twice, but it refuses the upload only at the end of the tag pipeline - after the tag was created and the release page was published.
'true'- query PyPI before tagging.
'false'- don’t query PyPI, e.g. for a package that isn’t published there.
pypi_url
- Type:
string
- Required:
no
- Default Value:
'https://pypi.org'- Possible Values:
Base URL of a package registry offering the PyPI JSON API, e.g.
'https://test.pypi.org'.- Description:
The package registry checked for an existing release, if check_pypi_duplicate is
'true'. Forwarded to pypi_url.
Set pypi_upload_url to the same registry.
pypi_dry_run
- Type:
string
- Required:
no
- Default Value:
'false'- Possible Values:
'true'/'false'- Description:
Validate the built packages with
twine checkinstead of uploading them to PyPI. Forwarded to dry_run.
Intended for a pipeline that builds a package which is never published - a fixture used to exercise the job templates, or a fork that must not push to the upstream project’s PyPI name.
'true'- check the packages and publish nothing.
'false'- publish the packages.
pypi_upload_url
- Type:
string
- Required:
no
- Default Value:
'https://upload.pypi.org/legacy/'- Possible Values:
Upload URL of a package registry, e.g.
'https://test.pypi.org/legacy/'.- Description:
The package registry the packages are uploaded to. Forwarded to pypi_upload_url.
Set pypi_url to the same registry.
cleanup
- Type:
string
- Required:
no
- Default Value:
'true'- Possible Values:
'true'/'false'- Description:
Remove intermediate artifacts once they were merged or consumed.
'true'- delete them.
'false'- keep them, which helps debugging artifact handovers between jobs.
Secrets
The workflow template uses the following secrets to publish results to other services.
PYPI_TOKEN
- Type:
string
- Required:
no
- Default Value:
— — — —
- Description:
The token to publish and upload packages on PyPI.
CODECOV_TOKEN
- Type:
string
- Required:
no
- Default Value:
— — — —
- Description:
The token to publish code coverage and unit test results to CodeCov.
CODACY_TOKEN
- Type:
string
- Required:
no
- Default Value:
— — — —
- Description:
The token to publish code coverage results to Codacy.
Outputs
This job template has no output parameters.
Optimizations
The following optimizations can be used to reduce the template’s runtime.
Todo
CompletePipeline::Optimizations Needs a list of optimizations.