Traceback (most recent call last): File "/usr/lib/python3.12/site-packages/pungi/wrappers/kojiwrapper.py", line 49, in __init__ self.profile = self.compose.conf["koji_profile"] ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/kobo/conf.py", line 104, in __getitem__ return dict.__getitem__(self, name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ KeyError: 'koji_profile' 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 658, in cli_main main() File "/usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py", line 353, in main run_compose( File "/usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py", line 473, in run_compose pkgset_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/pkgset/__init__.py", line 36, in run self.package_sets, self.path_prefix = SourceClass(self.compose)() ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 195, in __call__ self.koji_wrapper = pungi.wrappers.kojiwrapper.KojiWrapper(compose) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pungi/wrappers/kojiwrapper.py", line 51, in __init__ raise RuntimeError("Koji profile must be configured") RuntimeError: Koji profile must be configured Frame __init__ in /usr/lib/python3.12/site-packages/pungi/wrappers/kojiwrapper.py at line 51 44 lock = threading.Lock() 45 46 def __init__(self, compose): 47 self.compose = compose 48 try: 49 self.profile = self.compose.conf["koji_profile"] 50 except KeyError: --> 51 raise RuntimeError("Koji profile must be configured") 52 with self.lock: 53 self.koji_module = koji.get_profile_module(self.profile) 54 session_opts = {} 55 for key in ( 56 "timeout", 57 "keepalive", compose = self = self.compose = self.lock = Frame __call__ in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 195 188 189 return modules 190 191 192 class PkgsetSourceKoji(pungi.phases.pkgset.source.PkgsetSourceBase): 193 def __call__(self): 194 compose = self.compose --> 195 self.koji_wrapper = pungi.wrappers.kojiwrapper.KojiWrapper(compose) 196 package_sets = get_pkgset_from_koji(self.compose, self.koji_wrapper) 197 return (package_sets, self.compose.koji_downloader.path_prefix) 198 199 200 def get_pkgset_from_koji(compose, koji_wrapper): 201 event_info = get_koji_event_info(compose, koji_wrapper) compose = self = self.compose = Frame run in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/__init__.py at line 36 29 self.path_prefix = None 30 31 def run(self): 32 from . import sources 33 34 SourceClass = sources.ALL_SOURCES[self.compose.conf["pkgset_source"].lower()] 35 --> 36 self.package_sets, self.path_prefix = SourceClass(self.compose)() 37 38 def validate(self): 39 extra_tasks = self.compose.conf.get("pkgset_koji_scratch_tasks", None) 40 sigkeys = tuple(self.compose.conf["sigkeys"] or [None]) 41 if extra_tasks is not None and None not in sigkeys and "" not in sigkeys: 42 raise ValueError( SourceClass = self = self._skipped = False self._start_time = 1772718410.4884503 self.compose = self.finished = False self.msg = '---------- PHASE: PKGSET ----------' self.name = 'pkgset' self.package_sets = [] self.path_prefix = None self.used_patterns = None sources = 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 = 1772718410.4884503 self.compose = self.finished = False self.msg = '---------- PHASE: PKGSET ----------' self.name = 'pkgset' self.package_sets = [] self.path_prefix = None self.used_patterns = None Frame run_compose in /usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py at line 473 466 compose.log_error(i) 467 print(i) 468 raise RuntimeError("Configuration is not valid") 469 470 init_phase.start() 471 init_phase.stop() 472 --> 473 pkgset_phase.start() 474 pkgset_phase.stop() 475 476 # WEAVER phase - launches other phases which can safely run in parallel 477 essentials_schema = ( 478 buildinstall_phase, 479 (gather_phase, createrepo_phase), buildinstall_phase = compose = config_copy_path = '/mnt/centos/composes/pungi/20260305-134642/logs/global/config-copy' config_dump_full = '/mnt/centos/composes/pungi/20260305-134642/logs/global/config-dump.global.log' config_file = '/home/composer/tests/pungi-centos/centos/variables.conf' create_latest_link = True createiso_phase = createrepo_phase = errors = [] extra_isos_phase = extrafiles_phase = f = <_io.TextIOWrapper name='/mnt/centos/composes/pungi/20260305-134642/logs/global/config-dump.global.log' mode='w' encoding='UTF-8'> gather_phase = image_build_phase = image_checksum_phase = image_container_phase = imagebuilder_phase = init_phase = installed_pkgs_log = '/mnt/centos/composes/pungi/20260305-134642/logs/global/installed-pkgs.global.log' kiwibuild_phase = latest_link_components = -1 latest_link_status = None livemedia_phase = osbs_phase = osbuild_phase = ostree_container_phase = ostree_installer_phase = ostree_phase = phase = pkgset_phase = pungi = repoclosure_phase = test_phase = Frame main in /usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py at line 353 346 logger.error("Config validation failed with the error: %s" % error) 347 fail_to_start("Config validation failed", errors=errors) 348 sys.exit(1) 349 350 notifier.compose = compose 351 COMPOSE = compose 352 try: --> 353 run_compose( 354 compose, 355 create_latest_link=create_latest_link, 356 latest_link_status=latest_link_status, 357 latest_link_components=latest_link_components, 358 ) 359 except UnsignedPackagesError: Compose = PHASES_NAMES_MODIFIED = ['buildinstall', 'createiso', 'createrepo', 'extra_files', 'extra_isos', 'gather', 'image_build', 'imagebuilder', 'image_checksum', 'image_container', 'init', 'kiwibuild', 'live_media', 'osbs', 'osbui abort = .abort at 0x7fa818540ae0> ci = ci_path = '/mnt/centos/composes/pungi/20260305-134642/work/global/composeinfo-base.json' compose = compose_dir = '/mnt/centos/composes/pungi/20260305-134642' compose_type = 'test' conf = {'RELEASE_NAME': 'CentOS Stream', 'RELEASE_SHORT': 'CentOS-Stream', 'RELEASE_VERSION': '9', 'PKGSET_KOJI_TAG': 'c9s-compose', 'PKGSET_KOJI_MODULE_TAG': 'el9-modules-pending-signed', 'RUNROOT_CHANNEL': create_latest_link = True errors = [] fail_to_start = .fail_to_start at 0x7fa8185409a0> group = kobo = latest_link_components = -1 latest_link_status = None logger = notifier = opts = Namespace(target_dir=None, compose_dir='/mnt/centos/composes/pungi/20260305-134642', label=None, no_label=True, supported=False, old_composes=[], config='/home/composer/tests/pungi-centos/centos.conf' 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: RELEASE_VERSION.' 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 658 651 signal.signal(signal.SIGINT, sigterm_handler) 652 signal.signal(signal.SIGTERM, sigterm_handler) 653 654 tracing.setup() 655 656 with tracing.span("run-compose"): 657 try: --> 658 main() 659 except (Exception, KeyboardInterrupt) as ex: 660 tracing.record_exception(ex) 661 if COMPOSE: 662 COMPOSE.log_error("Compose run failed: %s" % ex) 663 COMPOSE.traceback(show_locals=getattr(ex, "show_locals", True)) 664 COMPOSE.log_critical("Compose failed: %s" % COMPOSE.topdir) ex = RuntimeError('Koji profile must be configured')