diff --git a/doc/configuration.rst b/doc/configuration.rst index a9960f76..a2b05c63 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -38,7 +38,6 @@ Minimal Config Example gather_source = "comps" gather_method = "deps" greedy_method = "build" - multilib_methods = [] check_deps = False # BUILDINSTALL @@ -377,11 +376,25 @@ Options **greedy_method** (*str*) -- see :doc:`gather`, recommended value: "build" -**multilib_methods** = [] - ([*str*]) -- see :doc:`gather`, recommended value: ["devel", "runtime"] +**multilib_methods** [deprecated] + ([*str*]) -- use ``multilib`` instead to configure this per-variant -**multilib_arches** - ([*str*] or None) -- list of compose architectures entitled for multilib; set to None to apply multilib on all compose arches +**multilib_arches** [deprecated] + ([*str*] or None) -- use ``multilib`` to implicitly configure this: if a + variant on any arch has non-empty multilib methods, it is automatically + eligible + +**multilib** + (*list*) -- mapping of variant regexes and arches to list of multilib + methods + + Available methods are: + * ``none`` + * ``all`` + * ``runtime`` + * ``file`` + * ``kernel`` + * ``yaboot`` **additional_packages** (*list*) -- additional packages to be included in a variant and architecture; format: [(variant_uid_regex, {arch|*: [package_globs]})] @@ -414,8 +427,6 @@ Example gather_source = "comps" gather_method = "deps" greedy_method = "build" - multilib_methods = ["devel", "runtime"] - multilib_arches = ["ppc64", "s390x", "x86_64"] check_deps = False hashed_directories = True @@ -438,6 +449,12 @@ Example }), ] + multilib = [ + ('^Server$', { + 'x86_64': ['devel', 'runtime'] + }) + ] + multilib_blacklist = { "*": [ "gcc", diff --git a/pungi/phases/gather/__init__.py b/pungi/phases/gather/__init__.py index 84ffd414..9c11b000 100644 --- a/pungi/phases/gather/__init__.py +++ b/pungi/phases/gather/__init__.py @@ -52,20 +52,11 @@ class GatherPhase(PhaseBase): name = "gather" config_options = ( - { - "name": "multilib_arches", - "expected_types": [list], - "optional": True, - }, { "name": "gather_lookaside_repos", "expected_types": [list], "optional": True, }, - { - "name": "multilib_methods", - "expected_types": [list], - }, { "name": "greedy_method", "expected_values": ["none", "all", "build"], @@ -91,7 +82,22 @@ class GatherPhase(PhaseBase): "expected_types": [bool], "optional": True, }, + { + "name": "multilib", + "expected_types": [list], + "optional": True, + }, # DEPRECATED OPTIONS + { + "name": "multilib_arches", + "deprecated": True, + "comment": "Use multilib instead", + }, + { + "name": "multilib_methods", + "deprecated": True, + "comment": "Use multilib instead", + }, { "name": "additional_packages_multiarch", "deprecated": True, diff --git a/pungi/phases/gather/link.py b/pungi/phases/gather/link.py index 4eba3c12..955ce07e 100644 --- a/pungi/phases/gather/link.py +++ b/pungi/phases/gather/link.py @@ -15,7 +15,6 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - import os import kobo.rpmlib diff --git a/pungi/phases/gather/methods/method_deps.py b/pungi/phases/gather/methods/method_deps.py index 22c52300..5cdfda0b 100644 --- a/pungi/phases/gather/methods/method_deps.py +++ b/pungi/phases/gather/methods/method_deps.py @@ -20,13 +20,12 @@ import tempfile from kobo.shortcuts import run -from pungi.util import rmtree +from pungi.util import rmtree, get_arch_variant_data from pungi.wrappers.pungi import PungiWrapper from pungi.arch import tree_arch_to_yum_arch import pungi.phases.gather - import pungi.phases.gather.method @@ -116,11 +115,7 @@ def resolve_deps(compose, arch, variant): compose.log_info("[BEGIN] %s" % msg) pungi_conf = compose.paths.work.pungi_conf(arch, variant) - multilib_methods = compose.conf.get("multilib_methods", None) - multilib_methods = compose.conf.get("multilib_methods", None) - is_multilib = arch in compose.conf["multilib_arches"] - if not is_multilib: - multilib_methods = None + multilib_methods = get_arch_variant_data(compose.conf, 'multilib', arch, variant) greedy_method = compose.conf.get("greedy_method", "none") diff --git a/pungi/phases/init.py b/pungi/phases/init.py index 29bcf095..9ffec4a3 100644 --- a/pungi/phases/init.py +++ b/pungi/phases/init.py @@ -109,11 +109,6 @@ class InitPhase(PhaseBase): "expected_types": [list], "optional": True, }, - { - "name": "multilib_arches", - "expected_types": [list], - "optional": True, - }, # CREATEREPO SETTINGS { diff --git a/pungi/phases/pkgset/__init__.py b/pungi/phases/pkgset/__init__.py index 67f296ec..6f3a4208 100644 --- a/pungi/phases/pkgset/__init__.py +++ b/pungi/phases/pkgset/__init__.py @@ -22,6 +22,7 @@ from kobo.shortcuts import force_list import pungi.phases.pkgset.pkgsets from pungi.arch import get_valid_arches from pungi.phases.base import PhaseBase +from pungi.util import is_arch_multilib class PkgsetPhase(PhaseBase): @@ -33,10 +34,6 @@ class PkgsetPhase(PhaseBase): "name": "pkgset_source", "expected_types": [str], }, - { - "name": "multilib_arches", - "expected_types": [list], - }, ) def run(self): @@ -54,7 +51,7 @@ def populate_arch_pkgsets(compose, path_prefix, global_pkgset): result = {} for arch in compose.get_arches(): compose.log_info("Populating package set for arch: %s" % arch) - is_multilib = arch in compose.conf["multilib_arches"] + is_multilib = is_arch_multilib(compose.conf, arch) arches = get_valid_arches(arch, is_multilib, add_src=True) pkgset = pungi.phases.pkgset.pkgsets.PackageSetBase(compose.conf["sigkeys"], logger=compose._logger, arches=arches) pkgset.merge(global_pkgset, arch, arches) diff --git a/pungi/phases/pkgset/common.py b/pungi/phases/pkgset/common.py index 7ca3fb01..c945b0c4 100644 --- a/pungi/phases/pkgset/common.py +++ b/pungi/phases/pkgset/common.py @@ -22,6 +22,7 @@ from kobo.shortcuts import run, force_list, relative_path import pungi.phases.pkgset.pkgsets from pungi.arch import get_valid_arches from pungi.wrappers.createrepo import CreaterepoWrapper +from pungi.util import is_arch_multilib # TODO: per arch? @@ -29,7 +30,7 @@ def populate_arch_pkgsets(compose, path_prefix, global_pkgset): result = {} for arch in compose.get_arches(): compose.log_info("Populating package set for arch: %s" % arch) - is_multilib = arch in compose.conf["multilib_arches"] + is_multilib = is_arch_multilib(compose.conf, arch) arches = get_valid_arches(arch, is_multilib, add_src=True) pkgset = pungi.phases.pkgset.pkgsets.PackageSetBase(compose.conf["sigkeys"], logger=compose._logger, arches=arches) pkgset.merge(global_pkgset, arch, arches) diff --git a/pungi/phases/pkgset/sources/source_koji.py b/pungi/phases/pkgset/sources/source_koji.py index de3ba515..53910021 100644 --- a/pungi/phases/pkgset/sources/source_koji.py +++ b/pungi/phases/pkgset/sources/source_koji.py @@ -24,6 +24,7 @@ import koji import pungi.wrappers.kojiwrapper import pungi.phases.pkgset.pkgsets from pungi.arch import get_valid_arches +from pungi.util import is_arch_multilib from pungi.phases.pkgset.common import create_arch_repos, create_global_repo, populate_arch_pkgsets @@ -85,7 +86,7 @@ def populate_global_pkgset(compose, koji_wrapper, path_prefix, compose_tag, even koji_proxy = koji_wrapper.koji_proxy ALL_ARCHES = set(["src"]) for arch in compose.get_arches(): - is_multilib = arch in compose.conf["multilib_arches"] + is_multilib = is_arch_multilib(compose.conf, arch) arches = get_valid_arches(arch, is_multilib) ALL_ARCHES.update(arches) diff --git a/pungi/phases/pkgset/sources/source_repos.py b/pungi/phases/pkgset/sources/source_repos.py index eb5f0b3b..305f0e0a 100644 --- a/pungi/phases/pkgset/sources/source_repos.py +++ b/pungi/phases/pkgset/sources/source_repos.py @@ -22,7 +22,7 @@ from kobo.shortcuts import run import pungi.phases.pkgset.pkgsets from pungi.arch import get_valid_arches -from pungi.util import makedirs +from pungi.util import makedirs, is_arch_multilib from pungi.wrappers.pungi import PungiWrapper from pungi.phases.pkgset.common import create_global_repo, create_arch_repos, populate_arch_pkgsets @@ -125,7 +125,7 @@ def get_pkgset_from_repos(compose): def populate_global_pkgset(compose, file_list, path_prefix): ALL_ARCHES = set(["src"]) for arch in compose.get_arches(): - is_multilib = arch in compose.conf["multilib_arches"] + is_multilib = is_arch_multilib(compose.conf, arch) arches = get_valid_arches(arch, is_multilib) ALL_ARCHES.update(arches) diff --git a/pungi/phases/test.py b/pungi/phases/test.py index d55fedee..7472227a 100644 --- a/pungi/phases/test.py +++ b/pungi/phases/test.py @@ -23,7 +23,7 @@ from pungi.wrappers.repoclosure import RepoclosureWrapper from pungi.arch import get_valid_arches from pungi.phases.base import PhaseBase from pungi.phases.gather import get_lookaside_repos -from pungi.util import rmtree +from pungi.util import rmtree, is_arch_multilib class TestPhase(PhaseBase): @@ -45,7 +45,7 @@ def run_repoclosure(compose): all_repos = {} # to be used as lookaside for the self-hosting check all_arches = set() for arch in compose.get_arches(): - is_multilib = arch in compose.conf["multilib_arches"] + is_multilib = is_arch_multilib(compose.conf, arch) arches = get_valid_arches(arch, is_multilib) all_arches.update(arches) for variant in compose.get_variants(arch=arch): diff --git a/pungi/util.py b/pungi/util.py index 9a849feb..d3aa3e57 100644 --- a/pungi/util.py +++ b/pungi/util.py @@ -215,6 +215,11 @@ def get_arch_variant_data(conf, var_name, arch, variant): return result +def is_arch_multilib(conf, arch): + """Check if at least one variant has multilib enabled on this variant.""" + return bool(get_arch_variant_data(conf, 'multilib', arch, None)) + + def resolve_git_url(url): """Given a url to a Git repo specifying HEAD as a ref, replace that specifier with actual SHA1 of the commit. diff --git a/tests/data/dummy-pungi.conf b/tests/data/dummy-pungi.conf index 4931402c..ae206844 100644 --- a/tests/data/dummy-pungi.conf +++ b/tests/data/dummy-pungi.conf @@ -42,8 +42,11 @@ greedy_method = "build" check_deps = False hashed_directories = True -multilib_arches = ["ppc64", "x86_64", "s390x"] -multilib_methods = ["devel", "runtime"] +multilib = [ + ('^Server.*$', { + '*': ['devel', 'runtime'] + }), +] additional_packages = [ ('^Server$', {