aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Bennée <alex.bennee@linaro.org>2024-05-24 16:39:16 +0100
committerAlex Bennée <alex.bennee@gmail.com>2024-05-31 10:38:51 +0000
commit0e9490cebc726ef772b6c9e27dac32e7ae99f9b2 (patch)
treef9e4915c1fb72aea7582a3b7cc770fe466a964c3
parenteaf1ce99097149bab6efb0a39b0e687a707296a8 (diff)
downloadlibvirt-ci-0e9490cebc726ef772b6c9e27dac32e7ae99f9b2.zip
libvirt-ci-0e9490cebc726ef772b6c9e27dac32e7ae99f9b2.tar.gz
libvirt-ci-0e9490cebc726ef772b6c9e27dac32e7ae99f9b2.tar.bz2
lcitool: add a yaml variable formatter
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 <alex.bennee@linaro.org>
-rw-r--r--lcitool/application.py6
-rw-r--r--lcitool/commandline.py2
-rw-r--r--lcitool/formatters.py21
-rw-r--r--tests/data/formatters/out/libvirt-debian-sid-s390x.yaml73
-rw-r--r--tests/data/formatters/out/libvirt-go-debian-12-cross-s390x.yaml9
-rw-r--r--tests/data/formatters/out/libvirt-go-debian-12.yaml9
-rw-r--r--tests/data/formatters/out/libvirt-go-fedora-rawhide-cross-mingw64.yaml9
-rw-r--r--tests/data/formatters/out/libvirt-go-xml-module-almalinux-8.yaml5
-rw-r--r--tests/data/formatters/out/libvirt-go-xml-module-alpine-edge.yaml4
-rw-r--r--tests/data/formatters/out/libvirt-go-xml-module-debian-12.yaml5
-rw-r--r--tests/data/formatters/out/libvirt-go-xml-module-opensuse-leap-15.yaml5
-rw-r--r--tests/data/formatters/out/libvirt-go-xml-module-opensuse-tumbleweed.yaml5
-rw-r--r--tests/test_formatters.py13
13 files changed, 163 insertions, 3 deletions
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)