From d15bbaa05d6b54236afe0748d995d2a12900a87e Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sat, 12 Oct 2019 23:45:00 +0200 Subject: [PATCH] test: remove redundant tests and Vagrant integration The tests from the integration_tests directory, were superseded by the new stage tests. The Vagrant integration seems not to have been working since ea68bb0c26af67eae6dd9b8d089fb498a3d735a4, as a test-setup.py was dropped there, which it relies on. Remove it for now. If we want that back, we should consider that in a separate PR. Signed-off-by: Tom Gundersen --- .travis.yml | 9 --- test/Makefile | 11 ---- test/Vagrantfile | 17 ------ test/__main__.py | 86 ----------------------------- test/integration_tests/__init__.py | 17 ------ test/integration_tests/build.py | 28 ---------- test/integration_tests/config.py | 10 ---- test/integration_tests/run.py | 28 ---------- test/integration_tests/test_case.py | 40 -------------- test/pipelines/firewall.json | 33 ----------- test/pipelines/locale.json | 31 ----------- test/pipelines/timezone.json | 31 ----------- 12 files changed, 341 deletions(-) delete mode 100644 test/Makefile delete mode 100644 test/Vagrantfile delete mode 100644 test/__main__.py delete mode 100644 test/integration_tests/__init__.py delete mode 100644 test/integration_tests/build.py delete mode 100644 test/integration_tests/config.py delete mode 100644 test/integration_tests/run.py delete mode 100644 test/integration_tests/test_case.py delete mode 100644 test/pipelines/firewall.json delete mode 100644 test/pipelines/locale.json delete mode 100644 test/pipelines/timezone.json diff --git a/.travis.yml b/.travis.yml index 8c18bd8c..860d639a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,15 +26,6 @@ jobs: - name: f30-boot before_install: sudo apt-get install -y systemd-container yum qemu-kvm script: sudo env "PATH=$PATH" "OSBUILD_TEST_BUILD_PIPELINE=samples/build-from-yum.json" python3 -m unittest -v test.test_boot - - name: timezone - before_install: sudo apt-get install -y systemd-container yum tar - script: sudo env "PATH=$PATH" python3 -m test --case timezone --build-pipeline samples/build-from-yum.json - - name: firewall - before_install: sudo apt-get install -y systemd-container yum tar - script: sudo env "PATH=$PATH" python3 -m test --case firewall --build-pipeline samples/build-from-yum.json - - name: locale - before_install: sudo apt-get install -y systemd-container yum tar - script: sudo env "PATH=$PATH" python3 -m test --case locale --build-pipeline samples/build-from-yum.json - name: assemblers before_install: sudo apt-get install -y systemd-container yum tar qemu-utils script: sudo env "PATH=$PATH" "OSBUILD_TEST_BUILD_PIPELINE=samples/build-from-yum.json" python3 -m unittest -v test.test_assemblers diff --git a/test/Makefile b/test/Makefile deleted file mode 100644 index 84e0fb7f..00000000 --- a/test/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -up: - vagrant up - -destroy: - vagrant destroy -f - -install-deps: - vagrant provision - -run-tests-remotely: - vagrant ssh -c 'pushd /vagrant; sudo python3 run-tests.py' diff --git a/test/Vagrantfile b/test/Vagrantfile deleted file mode 100644 index e3ab32ff..00000000 --- a/test/Vagrantfile +++ /dev/null @@ -1,17 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -$script = <<-SCRIPT -packages=$(find /vagrant/testing-rpms -name '*.noarch.rpm') -sudo dnf remove -y $(basename -a ${packages[@]} | sed 's/-[0-9].*.rpm$//') || true -sudo dnf install qemu-system-x86 /vagrant/testing-rpms/*.noarch.rpm -y -SCRIPT - -Vagrant.configure("2") do |config| - config.vm.box = "fedora/30-cloud-base" - config.vm.box_version = "30.20190425.0" - config.vm.provider "libvirt" do |v| - v.memory = 4096 - end - config.vm.provision "shell", inline: $script -end diff --git a/test/__main__.py b/test/__main__.py deleted file mode 100644 index c876b358..00000000 --- a/test/__main__.py +++ /dev/null @@ -1,86 +0,0 @@ -import argparse -import logging -import subprocess -import os - -from test.integration_tests.test_case import IntegrationTestCase, IntegrationTestType -from test.integration_tests.config import * - -logging.basicConfig(level=logging.getLevelName(os.environ.get("TESTS_LOGLEVEL", "INFO"))) - - -def test_is_system_running(result): - assert result.strip() == "running" - - -def test_timezone(extract_dir): - link = os.readlink(f"{extract_dir}/etc/localtime") - assert "Europe/Prague" in link - - -def test_firewall(extract_dir): - with open(f"{extract_dir}/etc/firewalld/zones/public.xml") as f: - content = f.read() - assert 'service name="http"' in content - assert 'service name="ftp"' in content - assert 'service name="telnet"' not in content - assert 'port port="53" protocol="tcp"' in content - assert 'port port="88" protocol="udp"' in content - - -def test_locale(extract_dir): - with open(f"{extract_dir}/etc/locale.conf") as f: - content = f.read() - assert 'LANG=nn_NO.utf8' in content - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='Run integration tests') - parser.add_argument('--list', dest='list', action='store_true', help='list test cases') - parser.add_argument('--build-pipeline', dest='build_pipeline', metavar='PIPELINE', - type=os.path.abspath, help='the build pipeline to run tests in') - parser.add_argument('--case', dest='specific_case', metavar='TEST_CASE', help='run single test case') - args = parser.parse_args() - - logging.info(f"Using {OBJECTS} for objects storage.") - logging.info(f"Using {OSBUILD} for building images.") - - timezone = IntegrationTestCase( - name="timezone", - pipeline="timezone.json", - build_pipeline=args.build_pipeline, - output_image="timezone.tar", - test_cases=[test_timezone], - type=IntegrationTestType.EXTRACT - ) - firewall = IntegrationTestCase( - name="firewall", - pipeline="firewall.json", - build_pipeline=args.build_pipeline, - output_image="firewall.tar", - test_cases=[test_firewall], - type=IntegrationTestType.EXTRACT - ) - locale = IntegrationTestCase( - name="locale", - pipeline="locale.json", - build_pipeline=args.build_pipeline, - output_image="locale.tar", - test_cases=[test_locale], - type=IntegrationTestType.EXTRACT - ) - - cases = [timezone, firewall, locale] - - if args.list: - print("Available test cases:") - for case in cases: - print(f" - {case.name}") - else: - if not args.specific_case: - for case in cases: - case.run() - else: - for case in cases: - if case.name == args.specific_case: - case.run() diff --git a/test/integration_tests/__init__.py b/test/integration_tests/__init__.py deleted file mode 100644 index 596f2001..00000000 --- a/test/integration_tests/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -from .config import * - - -def evaluate_test(test, arg=None, name=None): - try: - if arg: - test(arg) - else: - test() - print(f"{RESET}{BOLD}{name or test.__name__}: Success{RESET}") - except AssertionError as e: - print(f"{RESET}{BOLD}{name or test.__name__}: {RESET}{RED}Fail{RESET}") - print(e) - - -def rel_path(fname: str) -> str: - return os.path.join(os.path.dirname(os.path.dirname(__file__)), fname) diff --git a/test/integration_tests/build.py b/test/integration_tests/build.py deleted file mode 100644 index 38084dc4..00000000 --- a/test/integration_tests/build.py +++ /dev/null @@ -1,28 +0,0 @@ -import json -import logging -import subprocess -import sys - -from .config import * - - -def run_osbuild(pipeline: str, build_pipeline: str): - cmd = OSBUILD + ["--json", "--store", OBJECTS, pipeline] - if build_pipeline: - cmd += ["--build-pipeline", build_pipeline] - logging.info(f"Running osbuild: {cmd}") - osbuild = subprocess.run(cmd, capture_output=True) - if osbuild.returncode != 0: - logging.error(f"{RED}osbuild failed!{RESET}") - print(f"{BOLD}STDERR{RESET}") - print(osbuild.stderr.decode()) - print(f"{BOLD}STDOUT{RESET}") - print(osbuild.stdout.decode()) - sys.exit(1) - - result = json.loads(osbuild.stdout.decode()) - return result["tree_id"], result.get("output_id") - - -def build_testing_image(pipeline_full_path, build_pipeline_full_path): - run_osbuild(pipeline_full_path, build_pipeline_full_path) diff --git a/test/integration_tests/config.py b/test/integration_tests/config.py deleted file mode 100644 index b956e500..00000000 --- a/test/integration_tests/config.py +++ /dev/null @@ -1,10 +0,0 @@ -import tempfile -import os - - -EXPECTED_TIME_TO_BOOT = 60 # seconds -RESET = "\033[0m" -BOLD = "\033[1m" -RED = "\033[31m" -OBJECTS = os.environ.get("OBJECTS", ".osbuild-test") -OSBUILD = os.environ.get("OSBUILD", "python3 -m osbuild --libdir .").split(' ') diff --git a/test/integration_tests/run.py b/test/integration_tests/run.py deleted file mode 100644 index 0a87a762..00000000 --- a/test/integration_tests/run.py +++ /dev/null @@ -1,28 +0,0 @@ -import contextlib -import logging -import subprocess -from os import path - -from .config import * - - -def run_image(file_name: str): - acceleration = ["-accel", "kvm:hvf:tcg"] - silence = ["-nographic", "-monitor", "none", "-serial", "none"] - serial = ["-chardev", "stdio,id=stdio", "-device", "virtio-serial", "-device", "virtserialport,chardev=stdio"] - cmd = ["qemu-system-x86_64", "-m", "1024", "-snapshot"] + \ - acceleration + silence + serial + [file_name] - logging.info(f"Booting image: {cmd}") - return subprocess.run(cmd, capture_output=True, timeout=EXPECTED_TIME_TO_BOOT, encoding="utf-8", check=True) - - -@contextlib.contextmanager -def extract_image(file_name: str): - extract_dir = tempfile.mkdtemp(prefix="osbuild-") - archive = path.join(os.getcwd(), file_name) - subprocess.run(["tar", "xf", archive], cwd=extract_dir, check=True) - try: - yield extract_dir - finally: - # Clean up? - pass diff --git a/test/integration_tests/test_case.py b/test/integration_tests/test_case.py deleted file mode 100644 index 37907c55..00000000 --- a/test/integration_tests/test_case.py +++ /dev/null @@ -1,40 +0,0 @@ -from dataclasses import dataclass -from enum import Enum -from typing import List, Callable, Any - -from . import evaluate_test, rel_path -from .build import run_osbuild -from .run import run_image, extract_image -from test.integration_tests.config import * - - -class IntegrationTestType(Enum): - EXTRACT=0 - BOOT_WITH_QEMU=1 - - -@dataclass -class IntegrationTestCase: - name: str - pipeline: str - build_pipeline: str - output_image: str - test_cases: List[Callable[[Any], None]] - type: IntegrationTestType - - def run(self): - tree_id, output_id = run_osbuild(rel_path(f"pipelines/{self.pipeline}"), self.build_pipeline) - if self.type == IntegrationTestType.BOOT_WITH_QEMU: - self.run_and_test(output_id) - else: - self.extract_and_test(output_id) - - def run_and_test(self, output_id): - r = run_image(f"{OBJECTS}/refs/{output_id}/{self.output_image}") - for test in self.test_cases: - evaluate_test(test, r.stdout) - - def extract_and_test(self, output_id): - with extract_image(f"{OBJECTS}/refs/{output_id}/{self.output_image}") as fstree: - for test in self.test_cases: - evaluate_test(lambda: test(fstree), name=test.__name__) diff --git a/test/pipelines/firewall.json b/test/pipelines/firewall.json deleted file mode 100644 index ccd92a12..00000000 --- a/test/pipelines/firewall.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "stages": [ - { - "name": "org.osbuild.dnf", - "options": { - "releasever": "30", - "basearch": "x86_64", - "repos": [ - { - "metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch", - "checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97", - "gpgkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBFturGcBEACv0xBo91V2n0uEC2vh69ywCiSyvUgN/AQH8EZpCVtM7NyjKgKm\nbbY4G3R0M3ir1xXmvUDvK0493/qOiFrjkplvzXFTGpPTi0ypqGgxc5d0ohRA1M75\nL+0AIlXoOgHQ358/c4uO8X0JAA1NYxCkAW1KSJgFJ3RjukrfqSHWthS1d4o8fhHy\nKJKEnirE5hHqB50dafXrBfgZdaOs3C6ppRIePFe2o4vUEapMTCHFw0woQR8Ah4/R\nn7Z9G9Ln+0Cinmy0nbIDiZJ+pgLAXCOWBfDUzcOjDGKvcpoZharA07c0q1/5ojzO\n4F0Fh4g/BUmtrASwHfcIbjHyCSr1j/3Iz883iy07gJY5Yhiuaqmp0o0f9fgHkG53\n2xCU1owmACqaIBNQMukvXRDtB2GJMuKa/asTZDP6R5re+iXs7+s9ohcRRAKGyAyc\nYKIQKcaA+6M8T7/G+TPHZX6HJWqJJiYB+EC2ERblpvq9TPlLguEWcmvjbVc31nyq\nSDoO3ncFWKFmVsbQPTbP+pKUmlLfJwtb5XqxNR5GEXSwVv4I7IqBmJz1MmRafnBZ\ng0FJUtH668GnldO20XbnSVBr820F5SISMXVwCXDXEvGwwiB8Lt8PvqzXnGIFDAu3\nDlQI5sxSqpPVWSyw08ppKT2Tpmy8adiBotLfaCFl2VTHwOae48X2dMPBvQARAQAB\ntDFGZWRvcmEgKDMwKSA8ZmVkb3JhLTMwLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v\ncmc+iQI4BBMBAgAiBQJbbqxnAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK\nCRDvPBEfz8ZZudTnD/9170LL3nyTVUCFmBjT9wZ4gYnpwtKVPa/pKnxbbS+Bmmac\ng9TrT9pZbqOHrNJLiZ3Zx1Hp+8uxr3Lo6kbYwImLhkOEDrf4aP17HfQ6VYFbQZI8\nf79OFxWJ7si9+3gfzeh9UYFEqOQfzIjLWFyfnas0OnV/P+RMQ1Zr+vPRqO7AR2va\nN9wg+Xl7157dhXPCGYnGMNSoxCbpRs0JNlzvJMuAea5nTTznRaJZtK/xKsqLn51D\nK07k9MHVFXakOH8QtMCUglbwfTfIpO5YRq5imxlWbqsYWVQy1WGJFyW6hWC0+RcJ\nOx5zGtOfi4/dN+xJ+ibnbyvy/il7Qm+vyFhCYqIPyS5m2UVJUuao3eApE38k78/o\n8aQOTnFQZ+U1Sw+6woFTxjqRQBXlQm2+7Bt3bqGATg4sXXWPbmwdL87Ic+mxn/ml\nSMfQux/5k6iAu1kQhwkO2YJn9eII6HIPkW+2m5N1JsUyJQe4cbtZE5Yh3TRA0dm7\n+zoBRfCXkOW4krchbgww/ptVmzMMP7GINJdROrJnsGl5FVeid9qHzV7aZycWSma7\nCxBYB1J8HCbty5NjtD6XMYRrMLxXugvX6Q4NPPH+2NKjzX4SIDejS6JjgrP3KA3O\npMuo7ZHMfveBngv8yP+ZD/1sS6l+dfExvdaJdOdgFCnp4p3gPbw5+Lv70HrMjA==\n=BfZ/\n-----END PGP PUBLIC KEY BLOCK-----\n" - } - ], - "packages": ["@Core", "firewalld"] - } - }, - { - "name": "org.osbuild.firewall", - "options": { - "ports": ["53:tcp", "88:udp"], - "enabled_services": ["http", "ftp"], - "disabled_services": ["telnet"] - } - } - ], - "assembler": { - "name": "org.osbuild.tar", - "options": { - "filename": "firewall.tar" - } - } -} diff --git a/test/pipelines/locale.json b/test/pipelines/locale.json deleted file mode 100644 index 1ee15195..00000000 --- a/test/pipelines/locale.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "stages": [ - { - "name": "org.osbuild.dnf", - "options": { - "releasever": "30", - "basearch": "x86_64", - "repos": [ - { - "metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch", - "checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97", - "gpgkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBFturGcBEACv0xBo91V2n0uEC2vh69ywCiSyvUgN/AQH8EZpCVtM7NyjKgKm\nbbY4G3R0M3ir1xXmvUDvK0493/qOiFrjkplvzXFTGpPTi0ypqGgxc5d0ohRA1M75\nL+0AIlXoOgHQ358/c4uO8X0JAA1NYxCkAW1KSJgFJ3RjukrfqSHWthS1d4o8fhHy\nKJKEnirE5hHqB50dafXrBfgZdaOs3C6ppRIePFe2o4vUEapMTCHFw0woQR8Ah4/R\nn7Z9G9Ln+0Cinmy0nbIDiZJ+pgLAXCOWBfDUzcOjDGKvcpoZharA07c0q1/5ojzO\n4F0Fh4g/BUmtrASwHfcIbjHyCSr1j/3Iz883iy07gJY5Yhiuaqmp0o0f9fgHkG53\n2xCU1owmACqaIBNQMukvXRDtB2GJMuKa/asTZDP6R5re+iXs7+s9ohcRRAKGyAyc\nYKIQKcaA+6M8T7/G+TPHZX6HJWqJJiYB+EC2ERblpvq9TPlLguEWcmvjbVc31nyq\nSDoO3ncFWKFmVsbQPTbP+pKUmlLfJwtb5XqxNR5GEXSwVv4I7IqBmJz1MmRafnBZ\ng0FJUtH668GnldO20XbnSVBr820F5SISMXVwCXDXEvGwwiB8Lt8PvqzXnGIFDAu3\nDlQI5sxSqpPVWSyw08ppKT2Tpmy8adiBotLfaCFl2VTHwOae48X2dMPBvQARAQAB\ntDFGZWRvcmEgKDMwKSA8ZmVkb3JhLTMwLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v\ncmc+iQI4BBMBAgAiBQJbbqxnAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK\nCRDvPBEfz8ZZudTnD/9170LL3nyTVUCFmBjT9wZ4gYnpwtKVPa/pKnxbbS+Bmmac\ng9TrT9pZbqOHrNJLiZ3Zx1Hp+8uxr3Lo6kbYwImLhkOEDrf4aP17HfQ6VYFbQZI8\nf79OFxWJ7si9+3gfzeh9UYFEqOQfzIjLWFyfnas0OnV/P+RMQ1Zr+vPRqO7AR2va\nN9wg+Xl7157dhXPCGYnGMNSoxCbpRs0JNlzvJMuAea5nTTznRaJZtK/xKsqLn51D\nK07k9MHVFXakOH8QtMCUglbwfTfIpO5YRq5imxlWbqsYWVQy1WGJFyW6hWC0+RcJ\nOx5zGtOfi4/dN+xJ+ibnbyvy/il7Qm+vyFhCYqIPyS5m2UVJUuao3eApE38k78/o\n8aQOTnFQZ+U1Sw+6woFTxjqRQBXlQm2+7Bt3bqGATg4sXXWPbmwdL87Ic+mxn/ml\nSMfQux/5k6iAu1kQhwkO2YJn9eII6HIPkW+2m5N1JsUyJQe4cbtZE5Yh3TRA0dm7\n+zoBRfCXkOW4krchbgww/ptVmzMMP7GINJdROrJnsGl5FVeid9qHzV7aZycWSma7\nCxBYB1J8HCbty5NjtD6XMYRrMLxXugvX6Q4NPPH+2NKjzX4SIDejS6JjgrP3KA3O\npMuo7ZHMfveBngv8yP+ZD/1sS6l+dfExvdaJdOdgFCnp4p3gPbw5+Lv70HrMjA==\n=BfZ/\n-----END PGP PUBLIC KEY BLOCK-----\n" - } - ], - "packages": ["@Core"] - } - }, - { - "name": "org.osbuild.locale", - "options": { - "language": "nn_NO.utf8" - } - } - ], - "assembler": { - "name": "org.osbuild.tar", - "options": { - "filename": "locale.tar" - } - } -} diff --git a/test/pipelines/timezone.json b/test/pipelines/timezone.json deleted file mode 100644 index b7ce8477..00000000 --- a/test/pipelines/timezone.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "stages": [ - { - "name": "org.osbuild.dnf", - "options": { - "releasever": "30", - "basearch": "x86_64", - "repos": [ - { - "metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch", - "checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97", - "gpgkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBFturGcBEACv0xBo91V2n0uEC2vh69ywCiSyvUgN/AQH8EZpCVtM7NyjKgKm\nbbY4G3R0M3ir1xXmvUDvK0493/qOiFrjkplvzXFTGpPTi0ypqGgxc5d0ohRA1M75\nL+0AIlXoOgHQ358/c4uO8X0JAA1NYxCkAW1KSJgFJ3RjukrfqSHWthS1d4o8fhHy\nKJKEnirE5hHqB50dafXrBfgZdaOs3C6ppRIePFe2o4vUEapMTCHFw0woQR8Ah4/R\nn7Z9G9Ln+0Cinmy0nbIDiZJ+pgLAXCOWBfDUzcOjDGKvcpoZharA07c0q1/5ojzO\n4F0Fh4g/BUmtrASwHfcIbjHyCSr1j/3Iz883iy07gJY5Yhiuaqmp0o0f9fgHkG53\n2xCU1owmACqaIBNQMukvXRDtB2GJMuKa/asTZDP6R5re+iXs7+s9ohcRRAKGyAyc\nYKIQKcaA+6M8T7/G+TPHZX6HJWqJJiYB+EC2ERblpvq9TPlLguEWcmvjbVc31nyq\nSDoO3ncFWKFmVsbQPTbP+pKUmlLfJwtb5XqxNR5GEXSwVv4I7IqBmJz1MmRafnBZ\ng0FJUtH668GnldO20XbnSVBr820F5SISMXVwCXDXEvGwwiB8Lt8PvqzXnGIFDAu3\nDlQI5sxSqpPVWSyw08ppKT2Tpmy8adiBotLfaCFl2VTHwOae48X2dMPBvQARAQAB\ntDFGZWRvcmEgKDMwKSA8ZmVkb3JhLTMwLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v\ncmc+iQI4BBMBAgAiBQJbbqxnAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK\nCRDvPBEfz8ZZudTnD/9170LL3nyTVUCFmBjT9wZ4gYnpwtKVPa/pKnxbbS+Bmmac\ng9TrT9pZbqOHrNJLiZ3Zx1Hp+8uxr3Lo6kbYwImLhkOEDrf4aP17HfQ6VYFbQZI8\nf79OFxWJ7si9+3gfzeh9UYFEqOQfzIjLWFyfnas0OnV/P+RMQ1Zr+vPRqO7AR2va\nN9wg+Xl7157dhXPCGYnGMNSoxCbpRs0JNlzvJMuAea5nTTznRaJZtK/xKsqLn51D\nK07k9MHVFXakOH8QtMCUglbwfTfIpO5YRq5imxlWbqsYWVQy1WGJFyW6hWC0+RcJ\nOx5zGtOfi4/dN+xJ+ibnbyvy/il7Qm+vyFhCYqIPyS5m2UVJUuao3eApE38k78/o\n8aQOTnFQZ+U1Sw+6woFTxjqRQBXlQm2+7Bt3bqGATg4sXXWPbmwdL87Ic+mxn/ml\nSMfQux/5k6iAu1kQhwkO2YJn9eII6HIPkW+2m5N1JsUyJQe4cbtZE5Yh3TRA0dm7\n+zoBRfCXkOW4krchbgww/ptVmzMMP7GINJdROrJnsGl5FVeid9qHzV7aZycWSma7\nCxBYB1J8HCbty5NjtD6XMYRrMLxXugvX6Q4NPPH+2NKjzX4SIDejS6JjgrP3KA3O\npMuo7ZHMfveBngv8yP+ZD/1sS6l+dfExvdaJdOdgFCnp4p3gPbw5+Lv70HrMjA==\n=BfZ/\n-----END PGP PUBLIC KEY BLOCK-----\n" - } - ], - "packages": ["@Core"] - } - }, - { - "name": "org.osbuild.timezone", - "options": { - "zone": "Europe/Prague" - } - } - ], - "assembler": { - "name": "org.osbuild.tar", - "options": { - "filename": "timezone.tar" - } - } -}