Implement stack for container build

This commit is contained in:
David Boreham 2023-01-18 15:27:52 -07:00
parent 5e2df891cf
commit d5875954b8

View File

@ -26,6 +26,7 @@ import subprocess
import click import click
import importlib.resources import importlib.resources
from pathlib import Path from pathlib import Path
import yaml
from .util import include_exclude_check from .util import include_exclude_check
# TODO: find a place for this # TODO: find a place for this
@ -43,6 +44,7 @@ def command(ctx, include, exclude):
verbose = ctx.obj.verbose verbose = ctx.obj.verbose
dry_run = ctx.obj.dry_run dry_run = ctx.obj.dry_run
local_stack = ctx.obj.local_stack local_stack = ctx.obj.local_stack
stack = ctx.obj.stack
# See: https://stackoverflow.com/questions/25389095/python-get-path-of-root-project-structure # See: https://stackoverflow.com/questions/25389095/python-get-path-of-root-project-structure
container_build_dir = Path(__file__).absolute().parent.joinpath("data", "container-build") container_build_dir = Path(__file__).absolute().parent.joinpath("data", "container-build")
@ -62,10 +64,24 @@ def command(ctx, include, exclude):
# See: https://stackoverflow.com/a/20885799/1701505 # See: https://stackoverflow.com/a/20885799/1701505
from . import data from . import data
with importlib.resources.open_text(data, "container-image-list.txt") as container_list_file: with importlib.resources.open_text(data, "container-image-list.txt") as container_list_file:
containers = container_list_file.read().splitlines() all_containers = container_list_file.read().splitlines()
containers_in_scope = []
if stack:
# In order to be compatible with Python 3.8 we need to use this hack to get the path:
# See: https://stackoverflow.com/questions/25389095/python-get-path-of-root-project-structure
stack_file_path = Path(__file__).absolute().parent.joinpath("data", "stacks", stack, "stack.yml")
with stack_file_path:
stack_config = yaml.safe_load(open(stack_file_path, "r"))
# TODO: syntax check the input here
containers_in_scope = stack_config['containers']
else:
containers_in_scope = all_containers
if verbose: if verbose:
print(f'Containers: {containers}') print(f'Containers: {containers_in_scope}')
if stack:
print(f"Stack: {stack}")
# TODO: make this configurable # TODO: make this configurable
container_build_env = { container_build_env = {
@ -101,7 +117,7 @@ def command(ctx, include, exclude):
else: else:
print("Skipped") print("Skipped")
for container in containers: for container in containers_in_scope:
if include_exclude_check(container, include, exclude): if include_exclude_check(container, include, exclude):
process_container(container) process_container(container)
else: else: