Traceback (most recent call last): File "/usr/lib/python3.12/site-packages/productmd/compose.py", line 142, in _load_metadata obj.load(path) File "/usr/lib/python3.12/site-packages/productmd/common.py", line 301, in load self.deserialize(parser) File "/usr/lib/python3.12/site-packages/productmd/images.py", line 174, in deserialize self.add(variant, arch, image_obj) File "/usr/lib/python3.12/site-packages/productmd/images.py", line 211, in add raise ValueError("Image {0} shares all UNIQUE_IMAGE_ATTRIBUTES with " ValueError: Image shares all UNIQUE_IMAGE_ATTRIBUTES with image ! This is forbidden. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py", line 668, in cli_main main() File "/usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py", line 352, in main run_compose( File "/usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py", line 562, in run_compose test_phase.start() File "/usr/lib/python3.12/site-packages/pungi/phases/base.py", line 66, in start self.run() File "/usr/lib/python3.12/site-packages/pungi/phases/test.py", line 25, in run check_image_metadata(self.compose) File "/usr/lib/python3.12/site-packages/pungi/phases/test.py", line 36, in check_image_metadata return compose.images ^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/productmd/compose.py", line 110, in images self._images = self._load_metadata(paths, productmd.images.Images) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/productmd/compose.py", line 144, in _load_metadata raise RuntimeError('%s can not be deserialized: %s.' % (path, exc)) RuntimeError: /mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1/compose/metadata/images.json can not be deserialized: Image shares all UNIQUE_IMAGE_ATTRIBUTES with image ! This is forbidden.. Frame _load_metadata in /usr/lib/python3.12/site-packages/productmd/compose.py at line 144 137 138 def _load_metadata(self, paths, cls): 139 path = self._find_metadata_file(paths) 140 obj = cls() 141 try: 142 obj.load(path) 143 except ValueError as exc: --> 144 raise RuntimeError('%s can not be deserialized: %s.' % (path, exc)) 145 return obj cls = obj = path = '/mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1/compose/metadata/images.json' paths = ['metadata/images.json', 'metadata/image-manifest.json'] self = self._composeinfo = None self._images = None self._modules = None self._rpms = None self.compose_path = '/mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1/compose' self.images - uninitialized variable self.info = self.modules = self.rpms = Frame images in /usr/lib/python3.12/site-packages/productmd/compose.py at line 110 103 if self._images is not None: 104 return self._images 105 106 paths = [ 107 "metadata/images.json", 108 "metadata/image-manifest.json", 109 ] --> 110 self._images = self._load_metadata(paths, productmd.images.Images) 111 return self._images 112 113 @property 114 def rpms(self): 115 """(:class:`productmd.rpms.Rpms`) -- Compose RPMs metadata""" 116 if self._rpms is not None: paths = ['metadata/images.json', 'metadata/image-manifest.json'] self = self._composeinfo = self._images = None self._modules = self._rpms = self.compose_path = '/mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1/compose' self.images - uninitialized variable self.info = self.modules = self.rpms = Frame check_image_metadata in /usr/lib/python3.12/site-packages/pungi/phases/test.py at line 36 29 """ 30 Check the images metadata for entries that cannot be serialized. 31 Often caused by isos with duplicate metadata. 32 Accessing the `images` attribute will raise an exception if there's a problem 33 """ 34 if compose.im.images: 35 compose = productmd.compose.Compose(compose.paths.compose.topdir()) --> 36 return compose.images compose = Frame run in /usr/lib/python3.12/site-packages/pungi/phases/test.py at line 25 18 import productmd.compose 19 20 21 class TestPhase(PhaseBase): 22 name = "test" 23 24 def run(self): --> 25 check_image_metadata(self.compose) 26 27 28 def check_image_metadata(compose): 29 """ 30 Check the images metadata for entries that cannot be serialized. 31 Often caused by isos with duplicate metadata. self = self._skipped = False self._start_time = 1788165797.281018 self.compose = self.finished = False self.msg = '---------- PHASE: TEST ----------' self.name = 'test' self.used_patterns = None Frame start in /usr/lib/python3.12/site-packages/pungi/phases/base.py at line 66 59 if self._skipped: 60 self.compose.log_warning("[SKIP ] %s" % self.msg) 61 self.finished = True 62 return 63 self._start_time = time.time() 64 self.compose.log_info("[BEGIN] %s" % self.msg) 65 self.compose.notifier.send("phase-start", phase_name=self.name) --> 66 self.run() 67 68 def get_config_block(self, variant, arch=None): 69 """In config for current phase, find a block corresponding to given 70 variant and arch. The arch should be given if and only if the config 71 uses variant/arch mapping. 72 """ self = self._skipped = False self._start_time = 1788165797.281018 self.compose = self.finished = False self.msg = '---------- PHASE: TEST ----------' self.name = 'test' self.used_patterns = None Frame run_compose in /usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py at line 562 555 and kiwibuild_phase.skip() 556 and imagebuilder_phase.skip() 557 and osbuild_phase.skip() 558 and ostree_container_phase.skip() 559 ): 560 compose.im.dump(compose.paths.compose.metadata("images.json")) 561 --> 562 test_phase.start() 563 test_phase.stop() 564 565 compose.write_status("FINISHED") 566 latest_link = False 567 if create_latest_link: 568 if latest_link_status is None: arch = 'src' bi = boot_iso_phase = buildinstall_phase = compose = compose_images_phase = compose_images_schema = config_copy_path = '/mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1/logs/global/config-copy' config_dump_full = '/mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1/logs/global/config-dump.global.log' config_file = '/home/composer/jenkins/workspace/stream10-prod-compose/pungi-centos/centos/variables.conf' create_latest_link = True createiso_phase = createrepo_phase = errors = [] essentials_phase = essentials_schema = extra_isos_phase = extra_phase = extra_phase_schema = extrafiles_phase = f = <_io.TextIOWrapper name='/mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1/logs/global/config-dump.global.log' mode='w' encoding='UTF-8'> gather_phase = image_build_phase = image_checksum_phase = imagebuilder_phase = init_phase = installed_pkgs_log = '/mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1/logs/global/installed-pkgs.global.log' kiwibuild_phase = latest_link_components = -1 latest_link_status = None livemedia_phase = osbuild_phase = ostree_container_phase = ostree_installer_phase = ostree_phase = phase = pkgset_phase = pungi = repoclosure_phase = rpm_repo_mapping_phase = setup_phase = setup_schema = test_phase = timestamp = '1788164939.108968' trigger_konflux_pipeline = variant = Variant(id="SAPHANA", name="SAP Solutions", type="variant", parent=None) Frame main in /usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py at line 352 345 logger.error("Config validation failed with the error: %s" % error) 346 fail_to_start("Config validation failed", errors=errors) 347 sys.exit(1) 348 349 notifier.compose = compose 350 COMPOSE = compose 351 try: --> 352 run_compose( 353 compose, 354 create_latest_link=create_latest_link, 355 latest_link_status=latest_link_status, 356 latest_link_components=latest_link_components, 357 ) 358 except UnsignedPackagesError: Compose = PHASES_NAMES_MODIFIED = ['boot_iso', 'buildinstall', 'createiso', 'createrepo', 'extra_files', 'extra_isos', 'gather', 'image_build', 'imagebuilder', 'image_checksum', 'init', 'kiwibuild', 'live_media', 'osbuild', 'ostree_co abort = .abort at 0x7f552dbb6f20> compose = compose_dir = '/mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1' compose_type = 'production' conf = {'RELEASE_NAME': 'CentOS Stream', 'RELEASE_SHORT': 'CentOS-Stream', 'RELEASE_VERSION': '10', 'PKGSET_KOJI_TAG': 'c10s-compose', 'RUNROOT_CHANNEL': 'runroot', 'RUNROOT_TAG': 'c10s-build', 'RELEASE_VERS create_latest_link = True errors = [] fail_to_start = .fail_to_start at 0x7f552dbb6de0> group = kobo = latest_link_components = -1 latest_link_status = None logger = notifier = opts = Namespace(target_dir='/mnt/centos/composes/stream-10/production', compose_dir=None, label='RC-0.1', no_label=False, supported=False, old_composes=['/mnt/centos/composes/stream-10/production'], config= parser = ArgumentParser(prog='pungi-koji', usage=None, description=None, formatter_class=, conflict_handler='error', add_help=True) productmd = pungi = rv = None warning = 'WARNING: Unrecognized config option: GATHER_PREPOPULATE_BRANCH.' warnings = ["WARNING: Config option release_is_layered was removed and has no effect; remove it. It's layered if there's configuration for base product.", "WARNING: Config option runroot was removed and has no e Frame cli_main in /usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py at line 668 661 signal.signal(signal.SIGINT, sigterm_handler) 662 signal.signal(signal.SIGTERM, sigterm_handler) 663 664 tracing.setup() 665 666 with tracing.span("run-compose"): 667 try: --> 668 main() 669 except (Exception, KeyboardInterrupt) as ex: 670 tracing.record_exception(ex) 671 if COMPOSE: 672 COMPOSE.log_error("Compose run failed: %s" % ex) 673 COMPOSE.traceback(show_locals=getattr(ex, "show_locals", True)) 674 COMPOSE.log_critical("Compose failed: %s" % COMPOSE.topdir) ex = RuntimeError('/mnt/centos/composes/stream-10/production/CentOS-Stream-10-20260831.1/compose/metadata/images.json can not be deserialized: Image