Workflow Variables¶
Workflow Templates¶
Underlying the CLI, the PTB uses Jinja to dynamically generate project-specific
workflows. The rendering process is supported by the github_template_dict found in
your noxconfig.py::PROJECT_CONFIG. This dictionary is inherited by default from
exasol.toolbox.config.BaseConfig.github_template_dict, ensuring a
standardized baseline that can be overridden in individual projects.
def github_template_dict(self) -> dict[str, Any]:
"""
Dictionary of variables to dynamically render Jinja2 templates into valid YAML
configurations.
"""
custom_workflow_extractor = CustomWorkflowExtractor(
github_workflow_directory=self.github_workflow_directory,
sonar_token_name=self.sonar_token_name,
)
return {
"custom_workflows": custom_workflow_extractor.build_custom_workflow_dict(),
"dependency_manager_version": self.dependency_manager.version,
"minimum_python_version": self.minimum_python_version,
"os_version": self.os_version,
"python_versions": self.python_versions,
"sonar_token_name": self.sonar_token_name,
"workflow_header": f"{WORKFLOW_HEADER_PREFIX}{__version__}.",
}
Custom Workflow Secrets¶
The PTB extracts secret names from reusable custom workflow files and exposes them
through exasol.toolbox.config.BaseConfig.github_template_dict under the
custom_workflows entry. PTB-controlled workflow templates use those extracted
names when they call reusable workflows and forward secrets via secrets:.
To make a custom workflow compatible with this extraction, declare its secrets at the
top of the reusable workflow file under on.workflow_call and before jobs.
The extractor reads that section and collects the secret names automatically.
For example, slow-checks.yml can define its reusable workflow header like this:
name: Slow-Checks
on:
workflow_call:
secrets:
PYPI_TOKEN:
required: true
SONAR_TOKEN:
required: true
Those extracted secret names are then made available to the PTB templates that reference the custom workflow.
Matrix Combinations¶
The matrix.yml is used to generate different combinations of workflow inputs, such
as Python versions, Exasol versions, and any project-specific values exposed by the
config. This lets the PTB render workflows from a single matrix definition instead of
maintaining separate variants.
Extending the Matrix¶
If you need to expose additional values via the matrix.yml, you can extend
exasol.toolbox.config.BaseConfig.
The example adds two additional matrix dimensions: A declared one extra_matrix_value and a computed one computed_matrix_value. Each of them returning only a simple string value.
PTB’s Nox task generate:matrix will then be able to use each of the these dimensions when generating a build matrix.
from pydantic import computed_field
from exasol.toolbox.config import BaseConfig
class Config(BaseConfig):
extra_matrix_value: str = "extra"
@computed_field # type: ignore[misc]
@property
def computed_matrix_value(self) -> str:
# This can be requested when generating the matrix. If it is a simple
# string value, like is shown here, the generator wraps it in an array.
return f"{self.project_name}-computed"
You can consume the additional value in a workflow by passing the relevant
matrix_keys_json entries when calling matrix.yml:
jobs:
build-matrix:
uses: ./.github/workflows/matrix.yml
with:
matrix_keys_json: '["extra_matrix_value","computed_matrix_value"]'