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.
        """
        cd_extension = self.github_workflow_directory / "cd-extension.yml"
        fast_tests_extension = (
            self.github_workflow_directory / "fast-tests-extension.yml"
        )
        merge_gate_extension = (
            self.github_workflow_directory / "merge-gate-extension.yml"
        )

        return {
            "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__}.",
            "workflow_extension": {
                "cd": cd_extension.is_file(),
                "fast_tests": fast_tests_extension.is_file(),
                "merge_gate": merge_gate_extension.is_file(),
            },
        }

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"]'