breilly / fm-orchestrator

Forked from fm-orchestrator 4 years ago
Clone

3183991 Architecture limited module builds fail to build locally

Authored and Committed by tpopela 2 years ago
    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', <ModuleBuild flatpak-common, id=2, stream=f36, version=3620220516070452, scratch=False, state 'failed', batch 0, state_reason 'An unknown error occurred while validating the modulemd'>
    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 <module>
        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).