diff --git a/pungi/phases/osbuild.py b/pungi/phases/osbuild.py index c8322cc4..f3cfa2ea 100644 --- a/pungi/phases/osbuild.py +++ b/pungi/phases/osbuild.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import os -import re from kobo.threads import ThreadPool, WorkerThread from kobo import shortcuts from productmd.images import Image @@ -139,21 +138,21 @@ class RunOSBuildThread(WorkerThread): "OSBuild: task %s failed: see %s for details" % (task_id, log_file) ) - # Parse NVR from the task output. If release part of NVR was generated - # by Koji, we don't have enough information in the configuration. - nvr = get_nvr(log_file) - # Refresh koji session which may have timed out while the task was # running. Watching is done via a subprocess, so the session is # inactive. koji = kojiwrapper.KojiWrapper(compose.conf["koji_profile"]) + # Get build id via the task's result json data + result = koji.koji_proxy.getTaskResult(task_id) + build_id = result["koji"]["build"] + linker = Linker(logger=self.pool._logger) # Process all images in the build. There should be one for each # architecture, but we don't verify that. - build_info = koji.koji_proxy.getBuild(nvr) - for archive in koji.koji_proxy.listArchives(buildID=build_info["build_id"]): + build_info = koji.koji_proxy.getBuild(build_id) + for archive in koji.koji_proxy.listArchives(buildID=build_id): if archive["type_name"] not in config["image_types"]: # Ignore values that are not of required types. continue @@ -205,12 +204,3 @@ class RunOSBuildThread(WorkerThread): compose.im.add(variant=variant.uid, arch=arch, image=img) self.pool.log_info("[DONE ] %s (task id: %s)" % (msg, task_id)) - - -def get_nvr(log_file): - with open(log_file) as f: - for line in f: - match = re.search("Creating compose: ([^ ]+) ", line) - if match: - return match.group(1) - raise RuntimeError("Failed to find image NVR in the output") diff --git a/tests/test_osbuild_phase.py b/tests/test_osbuild_phase.py index a81472f5..30be2a22 100644 --- a/tests/test_osbuild_phase.py +++ b/tests/test_osbuild_phase.py @@ -133,11 +133,16 @@ class RunOSBuildThreadTest(helpers.PungiTestCase): @mock.patch("pungi.phases.osbuild.kojiwrapper.KojiWrapper") def test_process(self, KojiWrapper, Linker): cfg = {"name": "test-image", "distro": "rhel-8", "image_types": ["qcow2"]} + build_id = 5678 koji = KojiWrapper.return_value koji.watch_task.side_effect = self.make_fake_watch(0) koji.koji_proxy.osbuildImage.return_value = 1234 + koji.koji_proxy.getTaskResult.return_value = { + "composer": {"server": "https://composer.osbuild.org", "id": ""}, + "koji": {"build": build_id}, + } koji.koji_proxy.getBuild.return_value = { - "build_id": 5678, + "build_id": build_id, "name": "test-image", "version": "1", "release": "1", @@ -192,8 +197,9 @@ class RunOSBuildThreadTest(helpers.PungiTestCase): }, ), mock.call.watch_task(1234, mock.ANY), - mock.call.koji_proxy.getBuild("test-image-1-1"), - mock.call.koji_proxy.listArchives(buildID=5678), + mock.call.koji_proxy.getTaskResult(1234), + mock.call.koji_proxy.getBuild(build_id), + mock.call.koji_proxy.listArchives(buildID=build_id), ], ) @@ -247,11 +253,16 @@ class RunOSBuildThreadTest(helpers.PungiTestCase): @mock.patch("pungi.phases.osbuild.kojiwrapper.KojiWrapper") def test_process_without_release(self, KojiWrapper, Linker): cfg = {"name": "test-image", "distro": "rhel-8", "image_types": ["qcow2"]} + build_id = 5678 koji = KojiWrapper.return_value koji.watch_task.side_effect = self.make_fake_watch(0) koji.koji_proxy.osbuildImage.return_value = 1234 + koji.koji_proxy.getTaskResult.return_value = { + "composer": {"server": "https://composer.osbuild.org", "id": ""}, + "koji": {"build": build_id}, + } koji.koji_proxy.getBuild.return_value = { - "build_id": 5678, + "build_id": build_id, "name": "test-image", "version": "1", "release": "1", @@ -302,8 +313,9 @@ class RunOSBuildThreadTest(helpers.PungiTestCase): opts={"repo": [self.topdir + "/compose/Everything/$arch/os"]}, ), mock.call.watch_task(1234, mock.ANY), - mock.call.koji_proxy.getBuild("test-image-1-1"), - mock.call.koji_proxy.listArchives(buildID=5678), + mock.call.koji_proxy.getTaskResult(1234), + mock.call.koji_proxy.getBuild(build_id), + mock.call.koji_proxy.listArchives(buildID=build_id), ], )