Traceback (most recent call last):
File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 279, in _add_module_to_variant
mod_stream = read_single_module_stream_from_file(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/pungi/util.py", line 1009, in read_single_module_stream_from_file
return _read_single_module_stream(*args, is_file=True, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/pungi/util.py", line 982, in _read_single_module_stream
mod_index.update_from_file(file_or_string, True)
TypeError: Argument 1 does not allow None as a value
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 196, in __call__
package_sets = get_pkgset_from_koji(self.compose, self.koji_wrapper)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 202, in get_pkgset_from_koji
return populate_global_pkgset(compose, koji_wrapper, event_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 768, in populate_global_pkgset
_get_modules_from_koji_tags(
File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 648, in _get_modules_from_koji_tags
nsvc = _add_module_to_variant(
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 285, in _add_module_to_variant
raise RuntimeError("Failed to read %s: %s", mmds[filename], str(exc))
RuntimeError: ('Failed to read %s: %s', None, 'Argument 1 does not allow None as a value')
Frame _add_module_to_variant in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 285
278 try:
279 mod_stream = read_single_module_stream_from_file(
280 mmds[filename], compose, arch, build
281 )
282 except Exception as exc:
283 # libmodulemd raises various GLib exceptions with not very helpful
284 # messages. Let's replace it with something more useful.
--> 285 raise RuntimeError("Failed to read %s: %s", mmds[filename], str(exc))
286 if mod_stream:
287 added = True
288 variant.arch_mmds.setdefault(arch, {})[nsvc] = mod_stream
289
290 if not added:
291 # The module is filtered on all arches of this variant.
_ = 'txt'
add_to_variant_modules = True
added = False
arch = 'aarch64'
archive = {'btype': 'module', 'btype_id': 5, 'build_id': 95121, 'buildroot_id': 779381, 'checksum': '8e4b24448ce469cc8f020c3d7e007777', 'checksum_type': 0, 'compression_type': None, 'extra': {'typeinfo': {'modu
archives = [{'btype': 'module', 'btype_id': 5, 'build_id': 95121, 'buildroot_id': 779381, 'checksum': '6da98a1e30c681169916045806e74827', 'checksum_type': 0, 'compression_type': None, 'extra': {'typeinfo': {'mod
available_arches = {'s390x', 'aarch64', 'src', 'ppc64le', 'x86_64'}
basearch = 'aarch64'
build = {'build_id': 95121, 'cg_id': 1, 'completion_time': '2026-01-22 10:13:15+00:00', 'completion_ts': 1769076795.0, 'creation_event_id': 3052374, 'creation_time': '2026-01-22 10:13:19.679513+00:00', 'creat
compose =
exclude_module_ns = []
file_path = None
filename = 'modulemd.aarch64.txt'
info = {'module_build_service_id': 1318, 'content_koji_tag': 'module-ruby-4.0-920260120082040-9', 'modulemd_str': '---\ndocument: modulemd\nversion: 2\ndata:\n name: ruby\n stream: "4.0"\n version: 920260
koji_wrapper =
mmds = {'modulemd.src.txt': None, 'modulemd.txt': None, 'modulemd.x86_64.txt': None, 'modulemd.s390x.txt': None, 'modulemd.ppc64le.txt': None, 'modulemd.aarch64.txt': None}
ns = 'ruby:4.0'
nsvc = 'ruby:4.0:920260120082040:9'
typedir = '/mnt/koji/packages/ruby/4.0/920260120082040.9/files/module'
variant = Variant(id="AppStream", name="AppStream", type="variant", parent=None)
Frame _get_modules_from_koji_tags in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 648
641
642 # For each latest modular Koji build, add it to variant and
643 # variant_tags.
644 for build in latest_builds:
645 # Get the Build from Koji to get modulemd and module_tag.
646 build = koji_proxy.getBuild(build["build_id"])
647
--> 648 nsvc = _add_module_to_variant(
649 koji_wrapper,
650 variant,
651 build,
652 True,
653 compose=compose,
654 exclude_module_ns=exclude_module_ns,
_key = ._key at 0x7f61ac139800>
build = {'build_id': 95121, 'cg_id': 1, 'completion_time': '2026-01-22 10:13:15+00:00', 'completion_ts': 1769076795.0, 'creation_event_id': 3052374, 'creation_time': '2026-01-22 10:13:19.679513+00:00', 'creat
compose =
compose_tags = [{'name': 'el9-modules-pending-signed'}]
event_id = {'id': 3117176, 'ts': 1772718772.53768}
exclude_module_ns = []
expected_modules = set()
koji_proxy =
koji_wrapper =
latest_builds = [{'build_id': 95121, 'completion_time': '2026-01-22 10:13:15+00:00', 'create_event': 3066861, 'creation_event_id': 3052374, 'creation_time': '2026-01-22 10:13:19.679513+00:00', 'draft': False, 'epoch'
modular_koji_tag = {'name': 'el9-modules-pending-signed'}
module_builds = [{'build_id': 95121, 'completion_time': '2026-01-22 10:13:15+00:00', 'create_event': 3066861, 'creation_event_id': 3052374, 'creation_time': '2026-01-22 10:13:19.679513+00:00', 'draft': False, 'epoch'
ns = 'mariadb:10.11'
ns_builds =
nsv = '920260127112814'
nsv_builds =
tag = 'el9-modules-pending-signed'
tag_to_mmd = {}
variant = Variant(id="AppStream", name="AppStream", type="variant", parent=None)
variant_modules = [{'name': 'mariadb:10.11', 'glob': False}, {'name': 'mariadb:11.8', 'glob': False}, {'name': 'maven:3.8', 'glob': False}, {'name': 'maven:3.9', 'glob': False}, {'name': 'mysql:8.4', 'glob': False}, {'
variant_tags = {Variant(id="AppStream", name="AppStream", type="variant", parent=None): []}
Frame populate_global_pkgset in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 768
761 ":".join(nsvc.split(":")[:2]) for nsvc in extra_modules
762 ]
763
764 if modular_koji_tags or (
765 compose.conf["pkgset_koji_module_tag"] and variant.modules
766 ):
767 # List modules tagged in particular tags.
--> 768 _get_modules_from_koji_tags(
769 compose,
770 koji_wrapper,
771 event,
772 variant,
773 variant_tags,
774 tag_to_mmd,
all_arches = {'s390x', 'noarch', 'i586', 'aarch64', 'athlon', 'src', 'i686', 'i386', 'ppc64le', 'i486', 'x86_64'}
allow_invalid_sigkeys = False
compose =
compose_tags = []
comps =
event = {'id': 3117176, 'ts': 1772718772.53768}
exclude_module_ns = []
extra_modules = []
group = 'load-balancer'
groups = ['network-file-system-client', 'internet-browser', 'conflicts-appstream', 'hardware-support', 'input-methods', 'core', 'rt-debug', 'gnome-desktop', 'large-systems', 'print-server', 'networkmanager-sub
koji_wrapper =
modular_koji_tags = []
packages_to_gather = ['insights-client', 'xdg-desktop-portal-gtk', 'postgresql-odbc', 'libwebp', 'libocxl', 'cyrus-sasl', 'proj-data-hu', 'gcc-toolset-15-offload-nvptx', 'texlive-times', 'langpacks-ru', 'python3.11-pybind
pkgset_koji_tags = ['c9s-compose']
populate_only_packages_to_gather = False
tag_to_mmd = {}
variant = Variant(id="AppStream", name="AppStream", type="variant", parent=None)
variant_tags = {Variant(id="AppStream", name="AppStream", type="variant", parent=None): []}
Frame get_pkgset_from_koji in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 202
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)
--> 202 return populate_global_pkgset(compose, koji_wrapper, event_info)
203
204
205 def _add_module_to_variant(
206 koji_wrapper,
207 variant,
208 build,
compose =
event_info = {'id': 3117176, 'ts': 1772718772.53768}
koji_wrapper =
Frame __call__ in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 196
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)
202 return populate_global_pkgset(compose, koji_wrapper, event_info)
compose =
self =
self.compose =
self.koji_wrapper =
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 = 1772718789.2457933
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 = 1772718789.2457933
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-135301/logs/global/config-copy'
config_dump_full = '/mnt/centos/composes/pungi/20260305-135301/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-135301/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-135301/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 0x7f61aa924ae0>
ci =
ci_path = '/mnt/centos/composes/pungi/20260305-135301/work/global/composeinfo-base.json'
compose =
compose_dir = '/mnt/centos/composes/pungi/20260305-135301'
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 0x7f61aa9249a0>
group =
kobo =
latest_link_components = -1
latest_link_status = None
logger =
notifier =
opts = Namespace(target_dir=None, compose_dir='/mnt/centos/composes/pungi/20260305-135301', label=None, no_label=True, supported=False, old_composes=[], config='/home/composer/tests/pungi-centos/centos-new.c
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: EXTRA_ISOS_ARCHES.'
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('Failed to read %s: %s', None, 'Argument 1 does not allow None as a value')