From 715a1d14481c331a0b0828777938e3b633751cf8 Mon Sep 17 00:00:00 2001 From: Tomas Hozza Date: Thu, 1 Sep 2022 13:14:00 +0200 Subject: [PATCH] Hub: support `image_type` being an array for backwards compatibility The support for specifying multiple `image_types` for a single compose has been removed by [1]. This turned out to be problematic, because e.g. Pungi uses the array type when triggering image builds via osbuild. Bring back the support for specifying the `image_type` as an array, but restrict it to a single item. This will cover the Pungi use-case, since it is always passing a single `image_type` in the array. The array is then converted to a string in the Hub plugin and passed as such to the Builder plugin. Extend unit tests covering the introduced compatibility layer. [1] https://github.com/osbuild/koji-osbuild/commit/c7252650814f82281ee57b598cb2ad970b580451 --- plugins/hub/osbuild.py | 23 +++++++++++++++++++++-- test/unit/test_hub.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/plugins/hub/osbuild.py b/plugins/hub/osbuild.py index 5a8635f..d49e6d1 100644 --- a/plugins/hub/osbuild.py +++ b/plugins/hub/osbuild.py @@ -28,8 +28,21 @@ "description": "Distribution" }, { - "type": "string", - "description": "Image Type", + "oneOf": [ + { + "type": "string", + "description": "Image Type" + }, + { + "type": "array", + "description": "Image Types (this option is deprecated)", + "minItems": 1, + "maxItems": 1, + "items": { + "type": "string" + } + } + ] }, { "type": "string", @@ -224,6 +237,12 @@ def osbuildImage(name, version, distro, image_type, target, arches, opts=None, p except jsonschema.exceptions.ValidationError as err: raise koji.ParameterError(str(err)) from None + # Support array for backwards compatibility + # This check must be done after the schema validation + if isinstance(image_type, list): + image_type = image_type[0] + args = [name, version, distro, image_type, target, arches, opts] + if priority and priority < 0 and not context.session.hasPerm('admin'): raise koji.ActionNotAllowed('only admins may create high-priority tasks') diff --git a/test/unit/test_hub.py b/test/unit/test_hub.py index 967e420..9d4a31e 100644 --- a/test/unit/test_hub.py +++ b/test/unit/test_hub.py @@ -60,13 +60,41 @@ def test_basic(self): self.plugin.osbuildImage(*args, {}) + def test_image_types_array(self): + context = self.mock_koji_context() + + opts = {"repo": ["repo1", "repo2"], + "release": "1.2.3", + "skip_tag": True} + make_task_args = [ + "name", "version", "distro", + "image_type", + "target", + ["arches"], + opts + ] + args = ["name", "version", "distro", + ["image_type"], + "target", + ["arches"], + opts] + + task = {"channel": "image"} + + kojihub = self.mock_kojihub(make_task_args, task) + + setattr(self.plugin, "context", context) + setattr(self.plugin, "kojihub", kojihub) + + self.plugin.osbuildImage(*args, {}) + def test_input_validation(self): context = self.mock_koji_context() setattr(self.plugin, "context", context) opts = {} args = ["name", "version", "distro", - ["image_type"], # image type not an array + ["image_type", "image_type2"], # only a single image type is allowed "target", ["arches"], opts]