From 0e9490cebc726ef772b6c9e27dac32e7ae99f9b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Fri, 24 May 2024 16:39:16 +0100 Subject: lcitool: add a yaml variable formatter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As lcitool is processing the source of truth for the package list we can use it to build a package list for ansible jobs as well. Signed-off-by: Alex Bennée --- lcitool/application.py | 6 +- lcitool/commandline.py | 2 +- lcitool/formatters.py | 21 +++++++ .../formatters/out/libvirt-debian-sid-s390x.yaml | 73 ++++++++++++++++++++++ .../out/libvirt-go-debian-12-cross-s390x.yaml | 9 +++ .../data/formatters/out/libvirt-go-debian-12.yaml | 9 +++ .../libvirt-go-fedora-rawhide-cross-mingw64.yaml | 9 +++ .../out/libvirt-go-xml-module-almalinux-8.yaml | 5 ++ .../out/libvirt-go-xml-module-alpine-edge.yaml | 4 ++ .../out/libvirt-go-xml-module-debian-12.yaml | 5 ++ .../libvirt-go-xml-module-opensuse-leap-15.yaml | 5 ++ .../libvirt-go-xml-module-opensuse-tumbleweed.yaml | 5 ++ tests/test_formatters.py | 13 +++- 13 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 tests/data/formatters/out/libvirt-debian-sid-s390x.yaml create mode 100644 tests/data/formatters/out/libvirt-go-debian-12-cross-s390x.yaml create mode 100644 tests/data/formatters/out/libvirt-go-debian-12.yaml create mode 100644 tests/data/formatters/out/libvirt-go-fedora-rawhide-cross-mingw64.yaml create mode 100644 tests/data/formatters/out/libvirt-go-xml-module-almalinux-8.yaml create mode 100644 tests/data/formatters/out/libvirt-go-xml-module-alpine-edge.yaml create mode 100644 tests/data/formatters/out/libvirt-go-xml-module-debian-12.yaml create mode 100644 tests/data/formatters/out/libvirt-go-xml-module-opensuse-leap-15.yaml create mode 100644 tests/data/formatters/out/libvirt-go-xml-module-opensuse-tumbleweed.yaml diff --git a/lcitool/application.py b/lcitool/application.py index 7d5d526..8854678 100644 --- a/lcitool/application.py +++ b/lcitool/application.py @@ -17,7 +17,9 @@ from lcitool.inventory import Inventory from lcitool.packages import Packages from lcitool.projects import Projects from lcitool.targets import Targets, BuildTarget -from lcitool.formatters import DockerfileFormatter, ShellVariablesFormatter, JSONVariablesFormatter, ShellBuildEnvFormatter +from lcitool.formatters import DockerfileFormatter +from lcitool.formatters import ShellVariablesFormatter, JSONVariablesFormatter, YamlVariablesFormatter +from lcitool.formatters import ShellBuildEnvFormatter from lcitool.manifest import Manifest from lcitool.containers import Docker, Podman, ContainerExecError @@ -234,6 +236,8 @@ class Application: if args.format == "shell": formatter = ShellVariablesFormatter(projects) + elif args.format == "yaml": + formatter = YamlVariablesFormatter(projects) else: formatter = JSONVariablesFormatter(projects) diff --git a/lcitool/commandline.py b/lcitool/commandline.py index 2dec56b..aa25525 100644 --- a/lcitool/commandline.py +++ b/lcitool/commandline.py @@ -212,7 +212,7 @@ class CommandLine: formatopt.add_argument( "-f", "--format", default="shell", - choices=["shell", "json"], + choices=["shell", "json", "yaml"], help="output format (default: shell)", ) diff --git a/lcitool/formatters.py b/lcitool/formatters.py index 8f35d5a..83ddc21 100644 --- a/lcitool/formatters.py +++ b/lcitool/formatters.py @@ -603,6 +603,27 @@ class JSONVariablesFormatter(VariablesFormatter): return json.dumps(varmap, indent=" ", sort_keys=True) +class YamlVariablesFormatter(VariablesFormatter): + @staticmethod + def _format_variables(varmap): + packages = varmap.get('pkgs', []) + varmap.get('cross_pkgs', []) + yaml_output = "packages:\n" + for pkg in packages: + yaml_output += f" - {pkg}\n" + return yaml_output + + def format(self, target, selected_projects): + log.debug(f"Generating YAML package list for projects " + f"'{selected_projects} on target {target}") + + try: + varmap = self._generator_build_varmap(target, selected_projects) + except FormatterError as ex: + raise VariablesError(str(ex)) + + return self._format_variables(varmap) + + class ShellBuildEnvFormatter(BuildEnvFormatter): def __init__(self, inventory, base=None, layers="all"): diff --git a/tests/data/formatters/out/libvirt-debian-sid-s390x.yaml b/tests/data/formatters/out/libvirt-debian-sid-s390x.yaml new file mode 100644 index 0000000..e1d6aeb --- /dev/null +++ b/tests/data/formatters/out/libvirt-debian-sid-s390x.yaml @@ -0,0 +1,73 @@ +packages: + - augeas-lenses + - augeas-tools + - bash-completion + - black + - ca-certificates + - ccache + - clang + - codespell + - cpp + - diffutils + - dwarves + - ebtables + - flake8 + - gcc + - gettext + - git + - grep + - iproute2 + - iptables + - kmod + - libacl1-dev + - libapparmor-dev + - libattr1-dev + - libaudit-dev + - libblkid-dev + - libc6-dev + - libcap-ng-dev + - libcurl4-gnutls-dev + - libdevmapper-dev + - libfuse-dev + - libglib2.0-dev + - libglusterfs-dev + - libgnutls28-dev + - libiscsi-dev + - libnbd-dev + - libnl-3-dev + - libnl-route-3-dev + - libnuma-dev + - libparted-dev + - libpcap0.8-dev + - libpciaccess-dev + - librbd-dev + - libreadline-dev + - libsanlock-dev + - libsasl2-dev + - libselinux1-dev + - libssh-gcrypt-dev + - libssh2-1-dev + - libtirpc-dev + - libudev-dev + - libxml2-dev + - libxml2-utils + - libyajl-dev + - locales + - lvm2 + - make + - meson + - nfs-common + - ninja-build + - numad + - open-iscsi + - perl-base + - pkgconf + - policykit-1 + - python3 + - python3-docutils + - python3-pytest + - qemu-utils + - sed + - systemtap-sdt-dev + - wireshark-dev + - xsltproc diff --git a/tests/data/formatters/out/libvirt-go-debian-12-cross-s390x.yaml b/tests/data/formatters/out/libvirt-go-debian-12-cross-s390x.yaml new file mode 100644 index 0000000..5f88b36 --- /dev/null +++ b/tests/data/formatters/out/libvirt-go-debian-12-cross-s390x.yaml @@ -0,0 +1,9 @@ +packages: + - ca-certificates + - ccache + - git + - golang + - locales + - pkgconf + - gcc-s390x-linux-gnu + - libc6-dev:s390x diff --git a/tests/data/formatters/out/libvirt-go-debian-12.yaml b/tests/data/formatters/out/libvirt-go-debian-12.yaml new file mode 100644 index 0000000..612a614 --- /dev/null +++ b/tests/data/formatters/out/libvirt-go-debian-12.yaml @@ -0,0 +1,9 @@ +packages: + - ca-certificates + - ccache + - gcc + - git + - golang + - libc6-dev + - locales + - pkgconf diff --git a/tests/data/formatters/out/libvirt-go-fedora-rawhide-cross-mingw64.yaml b/tests/data/formatters/out/libvirt-go-fedora-rawhide-cross-mingw64.yaml new file mode 100644 index 0000000..f55093b --- /dev/null +++ b/tests/data/formatters/out/libvirt-go-fedora-rawhide-cross-mingw64.yaml @@ -0,0 +1,9 @@ +packages: + - ca-certificates + - ccache + - git + - glibc-langpack-en + - golang + - mingw64-gcc + - mingw64-headers + - mingw64-pkg-config diff --git a/tests/data/formatters/out/libvirt-go-xml-module-almalinux-8.yaml b/tests/data/formatters/out/libvirt-go-xml-module-almalinux-8.yaml new file mode 100644 index 0000000..d775525 --- /dev/null +++ b/tests/data/formatters/out/libvirt-go-xml-module-almalinux-8.yaml @@ -0,0 +1,5 @@ +packages: + - ca-certificates + - git + - glibc-langpack-en + - golang diff --git a/tests/data/formatters/out/libvirt-go-xml-module-alpine-edge.yaml b/tests/data/formatters/out/libvirt-go-xml-module-alpine-edge.yaml new file mode 100644 index 0000000..d311614 --- /dev/null +++ b/tests/data/formatters/out/libvirt-go-xml-module-alpine-edge.yaml @@ -0,0 +1,4 @@ +packages: + - ca-certificates + - git + - go diff --git a/tests/data/formatters/out/libvirt-go-xml-module-debian-12.yaml b/tests/data/formatters/out/libvirt-go-xml-module-debian-12.yaml new file mode 100644 index 0000000..59017c2 --- /dev/null +++ b/tests/data/formatters/out/libvirt-go-xml-module-debian-12.yaml @@ -0,0 +1,5 @@ +packages: + - ca-certificates + - git + - golang + - locales diff --git a/tests/data/formatters/out/libvirt-go-xml-module-opensuse-leap-15.yaml b/tests/data/formatters/out/libvirt-go-xml-module-opensuse-leap-15.yaml new file mode 100644 index 0000000..806ffaa --- /dev/null +++ b/tests/data/formatters/out/libvirt-go-xml-module-opensuse-leap-15.yaml @@ -0,0 +1,5 @@ +packages: + - ca-certificates + - git + - glibc-locale + - go diff --git a/tests/data/formatters/out/libvirt-go-xml-module-opensuse-tumbleweed.yaml b/tests/data/formatters/out/libvirt-go-xml-module-opensuse-tumbleweed.yaml new file mode 100644 index 0000000..806ffaa --- /dev/null +++ b/tests/data/formatters/out/libvirt-go-xml-module-opensuse-tumbleweed.yaml @@ -0,0 +1,5 @@ +packages: + - ca-certificates + - git + - glibc-locale + - go diff --git a/tests/test_formatters.py b/tests/test_formatters.py index a35bb35..0300954 100644 --- a/tests/test_formatters.py +++ b/tests/test_formatters.py @@ -10,7 +10,9 @@ import test_utils.utils as test_utils from pathlib import Path from lcitool.targets import BuildTarget -from lcitool.formatters import ShellVariablesFormatter, JSONVariablesFormatter, DockerfileFormatter, ShellBuildEnvFormatter +from lcitool.formatters import DockerfileFormatter +from lcitool.formatters import ShellVariablesFormatter, JSONVariablesFormatter, YamlVariablesFormatter +from lcitool.formatters import ShellBuildEnvFormatter scenarios = [ @@ -78,6 +80,15 @@ def test_variables_json(assert_equal, packages, projects, targets, project, targ @pytest.mark.parametrize("project,target,native_arch,cross_arch", scenarios) +def test_variables_yaml(assert_equal, packages, projects, targets, project, target, native_arch, cross_arch, request): + gen = YamlVariablesFormatter(projects) + target_obj = BuildTarget(targets, packages, target, native_arch, cross_arch) + actual = gen.format(target_obj, [project]) + expected_path = Path(test_utils.test_data_outdir(__file__), request.node.callspec.id + ".yaml") + assert_equal(actual, expected_path) + + +@pytest.mark.parametrize("project,target,native_arch,cross_arch", scenarios) def test_prepbuildenv(assert_equal, packages, projects, targets, project, target, native_arch, cross_arch, request): gen = ShellBuildEnvFormatter(projects) target_obj = BuildTarget(targets, packages, target, native_arch, cross_arch) -- cgit v1.1