From 31839917bcd97c20f16e3a1348f0e64bd36f6a69 Mon Sep 17 00:00:00 2001 From: Tomas Popela Date: Mon, 16 May 2022 14:08:34 +0200 Subject: [PATCH] Architecture limited module builds fail to build locally We use module builds as an intermediate build for building flatpaked applications on Fedora. As Flatpaks in Fedora are officially supported only on aarch64 and x86_64 we wanted to limit the builds just to these architectures to save Fedora resources. We were able to do with commit https://src.fedoraproject.org/modules/flatpak-common/c/65a01f which works perfectly in koji/mbs, but doesn't work when run locally as the build fails with following errors and exceptions: info: Getting tag for flatpak-common:f36:3620220516070452 info: Start to handle flatpak-common:f36:3620220516070452:cab77b58 which is in init state. Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/module_build_service/scheduler/handlers/modules.py", line 182, in init record_module_build_arches(mmd, build) File "/usr/lib/python3.10/site-packages/module_build_service/scheduler/submit.py", line 150, in record_module_build_arches arches = get_build_arches(mmd, conf) File "/usr/lib/python3.10/site-packages/module_build_service/scheduler/submit.py", line 95, in get_build_arches new_arches = _check_buildopts_arches(mmd, arches) File "/usr/lib/python3.10/site-packages/module_build_service/scheduler/submit.py", line 131, in _check_buildopts_arches print(arches not in unsupported_arches, file=sys.stderr) TypeError: unhashable type: 'list' info: State transition: 'init' -> 'failed', warning: Note that retrieved module state 4 doesn't match message module state 'failed' Traceback (most recent call last): File "/usr/bin/mbs-manager", line 33, in sys.exit(load_entry_point('module-build-service==3.6.1', 'console_scripts', 'mbs-manager')()) File "/usr/lib/python3.10/site-packages/click/core.py", line 1137, in __call__ return self.main(*args, **kwargs) File "/usr/lib/python3.10/site-packages/flask/cli.py", line 596, in main return super().main(*args, **kwargs) File "/usr/lib/python3.10/site-packages/click/core.py", line 1062, in main rv = self.invoke(ctx) File "/usr/lib/python3.10/site-packages/click/core.py", line 1668, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/lib/python3.10/site-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/lib/python3.10/site-packages/click/core.py", line 763, in invoke return __callback(*args, **kwargs) File "/usr/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func return f(get_current_context(), *args, **kwargs) File "/usr/lib/python3.10/site-packages/flask/cli.py", line 440, in decorator return __ctx.invoke(f, *args, **kwargs) File "/usr/lib/python3.10/site-packages/click/core.py", line 763, in invoke return __callback(*args, **kwargs) File "/usr/lib/python3.10/site-packages/module_build_service/manage.py", line 171, in build_module_locally module_build_service.scheduler.local.main(module_build_ids) File "/usr/lib/python3.10/site-packages/module_build_service/scheduler/local.py", line 57, in main raise_for_failed_build(module_build_ids) File "/usr/lib/python3.10/site-packages/module_build_service/scheduler/local.py", line 39, in raise_for_failed_build raise ValueError("Local module build failed.") ValueError: Local module build failed. The problem is that the code as it's now will fail to proceed if it will detect any unsupported architecture - in this case the aarch64 even tough the local x86_64 is supported. The check should be redone so if there's an unsupported architecture detected, we should check that isn't not the local one and proceed with the build, otherwise fail (the local hardware doesn't support any of the specified architectures). --- module_build_service/scheduler/submit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module_build_service/scheduler/submit.py b/module_build_service/scheduler/submit.py index 60fc8f81..21e1aa56 100644 --- a/module_build_service/scheduler/submit.py +++ b/module_build_service/scheduler/submit.py @@ -132,7 +132,9 @@ def _check_buildopts_arches(mmd, arches): return arches # Must be a subset of the input module arches unsupported_arches = set(buildopts_arches) - set(arches) - if unsupported_arches: + # If there are unsupported architectures, and the local one is one of them, + # then we should fail, otherwise continue. + if unsupported_arches and set(arches) in unsupported_arches: raise ValidationError("The following buildopts arches are not supported with these " "buildrequires: %r" % unsupported_arches) if buildopts_arches: