From e90ffdfd93ea1fb5f4799ae940f130b2101251f2 Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Thu, 7 Mar 2024 14:05:52 -0800 Subject: [PATCH] kiwibuild: allow setting description scm and path at phase level Neal wanted this to work - he tried using global_description_scm and global_description_path in the initial PR - but it wasn't wired up to work. This should make it possible to set `kiwibuild_description_scm` and `kiwibuild_description_path`. It also technically lets you set `global_` for both, since the `get_config` implementation is very generic, but it doesn't add it to the checks, so you'd still get an "unrecognized config option" warning, I think. It seems appropriate to encourage setting this as a phase-level option rather than a global one since it seems quite specific to the kiwibuild phase. Merges: https://pagure.io/pungi/pull-request/1737 Signed-off-by: Adam Williamson --- pungi/checks.py | 8 ++++++-- pungi/phases/kiwibuild.py | 36 ++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/pungi/checks.py b/pungi/checks.py index cacd89a5..7b598219 100644 --- a/pungi/checks.py +++ b/pungi/checks.py @@ -1238,8 +1238,10 @@ def make_schema(): "subvariant": {"type": "string"}, }, "required": [ - "description_scm", - "description_path", + # description_scm and description_path + # are really required, but as they can + # be set at the phase level we cannot + # enforce that here "kiwi_profile", ], "additionalProperties": False, @@ -1248,6 +1250,8 @@ def make_schema(): }, "additionalProperties": False, }, + "kiwibuild_description_scm": {"type": "url"}, + "kiwibuild_description_path": {"type": "string"}, "kiwibuild_target": {"type": "string"}, "kiwibuild_release": {"$ref": "#/definitions/optional_string"}, "kiwibuild_version": {"type": "string"}, diff --git a/pungi/phases/kiwibuild.py b/pungi/phases/kiwibuild.py index ff08a491..f8284f05 100644 --- a/pungi/phases/kiwibuild.py +++ b/pungi/phases/kiwibuild.py @@ -79,8 +79,14 @@ class KiwiBuildPhase( self.log_debug("skip: no arches") continue - release = self.get_release(image_conf) - target = self.get_config(image_conf, "target") + # these properties can be set per-image *or* as e.g. + # kiwibuild_description_scm or global_release in the config + generics = { + "release": self.get_release(image_conf), + "target": self.get_config(image_conf, "target"), + "descscm": self.get_config(image_conf, "description_scm"), + "descpath": self.get_config(image_conf, "description_path"), + } repo = self._get_repo(image_conf, variant) @@ -95,8 +101,7 @@ class KiwiBuildPhase( variant, image_conf, build_arches, - release, - target, + generics, repo, failable_arches, ) @@ -107,16 +112,7 @@ class KiwiBuildPhase( class RunKiwiBuildThread(WorkerThread): def process(self, item, num): - ( - compose, - variant, - config, - arches, - release, - target, - repo, - failable_arches, - ) = item + (compose, variant, config, arches, generics, repo, failable_arches) = item self.failable_arches = failable_arches # the Koji task as a whole can only fail if *all* arches are failable can_task_fail = set(failable_arches).issuperset(set(arches)) @@ -129,21 +125,21 @@ class RunKiwiBuildThread(WorkerThread): "kiwibuild", logger=self.pool._logger, ): - self.worker(compose, variant, config, arches, release, target, repo) + self.worker(compose, variant, config, arches, generics, repo) - def worker(self, compose, variant, config, arches, release, target, repo): + def worker(self, compose, variant, config, arches, generics, repo): msg = "kiwibuild task for variant %s" % variant.uid self.pool.log_info("[BEGIN] %s" % msg) koji = kojiwrapper.KojiWrapper(compose) koji.login() task_id = koji.koji_proxy.kiwiBuild( - target, + generics["target"], arches, - config["description_scm"], - config["description_path"], + generics["descscm"], + generics["descpath"], profile=config["kiwi_profile"], - release=release, + release=generics["release"], repos=repo, # this ensures the task won't fail if only failable arches fail optional_arches=self.failable_arches,