# Path: tasks/packaging/model.py
# class DockerBaselineImageRecipe:
#     """
#     Data structure for holding information about a recipe for building baseline
#     Docker images. Those images will be used for building the actual operating
#     system distribution packages.
#     """
# 
#     # Whether this recipe is enabled.
#     enabled: bool
# 
#     # The operating system vendor, e.g. Debian, Ubuntu.
#     vendor: str
# 
#     # List of operating system distributions, e.g. stretch, buster.
#     distributions: List[str]
# 
#     # List of architectures, e.g. amd64, arm64v8, arm32v7.
#     architectures: List[str]
# 
#     # Docker image to use.
#     image: str
# 
# Path: tasks/util.py
# def print_header(label, char="-"):
#     length = max(len(label), 42)
#     print(char * length)
#     print(label.center(length))
#     print(char * length)
# 
# def run_commands(commands):
#     if isinstance(commands, str):
#         commands = [commands]
#     for command in commands:
#         command = command.strip()
#         print(command)
#         exitcode = os.system(command)
#         if exitcode != 0:
#             raise SystemExit("Command failed")
# 
# def task(f: F) -> F:
#     f.__annotations__ = {}
#     return invoke.task(f)


from typing import List
from tasks.packaging.model import DockerBaselineImageRecipe
from tasks.util import print_header, run_commands, task
            vendor="Ubuntu",
            distributions=[
                "focal",
                "bionic",
            ],
            architectures=[
                "amd64",
            ],
            image="{architecture}/ubuntu:{distribution}",
        ),
    ]

    docker_image_version = "0.11.0"

    def run(self):
        """
        Invoke the image building for all enabled recipes.
        """

        for recipe in self.recipes:

            # Skip recipes not enabled.
            if not recipe.enabled:
                continue

            # Build all distributions.
            for distribution in recipe.distributions:

                # Build all architectures per distribution.
                for architecture in recipe.architectures:

# Path: tasks/packaging/model.py
# class DockerBaselineImageRecipe:
#     """
#     Data structure for holding information about a recipe for building baseline
#     Docker images. Those images will be used for building the actual operating
#     system distribution packages.
#     """
# 
#     # Whether this recipe is enabled.
#     enabled: bool
# 
#     # The operating system vendor, e.g. Debian, Ubuntu.
#     vendor: str
# 
#     # List of operating system distributions, e.g. stretch, buster.
#     distributions: List[str]
# 
#     # List of architectures, e.g. amd64, arm64v8, arm32v7.
#     architectures: List[str]
# 
#     # Docker image to use.
#     image: str
# 
# Path: tasks/util.py
# def print_header(label, char="-"):
#     length = max(len(label), 42)
#     print(char * length)
#     print(label.center(length))
#     print(char * length)
# 
# def run_commands(commands):
#     if isinstance(commands, str):
#         commands = [commands]
#     for command in commands:
#         command = command.strip()
#         print(command)
#         exitcode = os.system(command)
#         if exitcode != 0:
#             raise SystemExit("Command failed")
# 
# def task(f: F) -> F:
#     f.__annotations__ = {}
#     return invoke.task(f)


# Path: tasks/packaging/environment.py
from typing import List
from tasks.packaging.model import DockerBaselineImageRecipe
from tasks.util import print_header, run_commands, task

            vendor="Ubuntu",
            distributions=[
                "focal",
                "bionic",
            ],
            architectures=[
                "amd64",
            ],
            image="{architecture}/ubuntu:{distribution}",
        ),
    ]

    docker_image_version = "0.11.0"

    def run(self):
        """
        Invoke the image building for all enabled recipes.
        """

        for recipe in self.recipes:

            # Skip recipes not enabled.
            if not recipe.enabled:
                continue

            # Build all distributions.
            for distribution in recipe.distributions:

                # Build all architectures per distribution.
                for architecture in recipe.architectures:

                    print_header(