mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-04 03:08:21 +08:00
Merge #413 Fix #409 - Remove koji_tag_inherit_from and whitelist all the components we are going to build instead.
This commit is contained in:
@@ -319,7 +319,7 @@ class KojiModuleBuilder(GenericBuilder):
|
||||
_build_lock = threading.Lock()
|
||||
|
||||
@module_build_service.utils.validate_koji_tag('tag_name')
|
||||
def __init__(self, owner, module, config, tag_name):
|
||||
def __init__(self, owner, module, config, tag_name, components):
|
||||
"""
|
||||
:param owner: a string representing who kicked off the builds
|
||||
:param module: string representing module
|
||||
@@ -345,6 +345,7 @@ class KojiModuleBuilder(GenericBuilder):
|
||||
self.module_target = None # A koji target dict
|
||||
|
||||
self.build_priority = config.koji_build_priority
|
||||
self.components = components
|
||||
|
||||
def __repr__(self):
|
||||
return "<KojiModuleBuilder module: %s, tag: %s>" % (
|
||||
@@ -495,6 +496,8 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules
|
||||
self.module_build_tag = self._koji_create_tag(
|
||||
self.tag_name + "-build", self.arches, perm="admin")
|
||||
|
||||
self._koji_whitelist_packages(self.components)
|
||||
|
||||
@module_build_service.utils.retry(wait_on=SysCallError, interval=5)
|
||||
def add_groups():
|
||||
return self._koji_add_groups_to_tag(
|
||||
@@ -765,8 +768,7 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules
|
||||
taginfo = self.koji_session.getTag(tag_name)
|
||||
|
||||
if not taginfo:
|
||||
self.koji_session.createTag(
|
||||
tag_name, parent=conf.koji_tag_inherit_from)
|
||||
self.koji_session.createTag(tag_name)
|
||||
taginfo = self._get_tag(tag_name)
|
||||
|
||||
opts = {}
|
||||
@@ -803,25 +805,35 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules
|
||||
|
||||
def _get_component_owner(self, package):
|
||||
user = self.koji_session.getLoggedInUser()['name']
|
||||
if not self.koji_session.getUser(user):
|
||||
raise ValueError("Unknown user %s" % user)
|
||||
return user
|
||||
|
||||
def _koji_whitelist_packages(self, packages):
|
||||
def _koji_whitelist_packages(self, packages, tags = None):
|
||||
if not tags:
|
||||
tags = [self.module_tag, self.module_build_tag]
|
||||
|
||||
# TODO: This has to be done per-package or just without the need
|
||||
# to pass the `packages` to it depending on the result of
|
||||
# issue #337.
|
||||
owner = self._get_component_owner(packages[0])
|
||||
|
||||
# This will help with potential resubmiting of failed builds
|
||||
pkglist = dict([(p['package_name'], p['package_id']) for p in self.koji_session.listPackages(tagID=self.module_tag['id'])])
|
||||
to_add = []
|
||||
for package in packages:
|
||||
package_id = pkglist.get(package, None)
|
||||
if not package_id is None:
|
||||
log.debug("%s Package %s is already whitelisted." % (self, package))
|
||||
continue
|
||||
to_add.append(package)
|
||||
pkglists = {}
|
||||
for tag in tags:
|
||||
pkglists[tag['id']] = dict([(p['package_name'], p['package_id']) for p in self.koji_session.listPackages(tagID=tag['id'])])
|
||||
|
||||
for package in to_add:
|
||||
owner = self._get_component_owner(package)
|
||||
if not self.koji_session.getUser(owner):
|
||||
raise ValueError("Unknown user %s" % owner)
|
||||
self.koji_session.multicall = True
|
||||
for tag in tags:
|
||||
pkglist = pkglists[tag['id']]
|
||||
to_add = []
|
||||
for package in packages:
|
||||
if pkglist.get(package, None):
|
||||
log.debug("%s Package %s is already whitelisted." % (self, package))
|
||||
continue
|
||||
|
||||
self.koji_session.packageListAdd(self.module_tag['name'], package, owner)
|
||||
self.koji_session.packageListAdd(tag['name'], package, owner)
|
||||
self.koji_session.multiCall(strict=True)
|
||||
|
||||
@module_build_service.utils.validate_koji_tag(['build_tag', 'dest_tag'])
|
||||
def _koji_add_target(self, name, build_tag, dest_tag):
|
||||
@@ -905,7 +917,7 @@ class CoprModuleBuilder(GenericBuilder):
|
||||
_build_lock = threading.Lock()
|
||||
|
||||
@module_build_service.utils.validate_koji_tag('tag_name')
|
||||
def __init__(self, owner, module, config, tag_name):
|
||||
def __init__(self, owner, module, config, tag_name, components):
|
||||
self.owner = owner
|
||||
self.config = config
|
||||
self.tag_name = tag_name
|
||||
@@ -1179,7 +1191,7 @@ mdpolicy=group:primary
|
||||
"""
|
||||
|
||||
@module_build_service.utils.validate_koji_tag('tag_name')
|
||||
def __init__(self, owner, module, config, tag_name):
|
||||
def __init__(self, owner, module, config, tag_name, components):
|
||||
self.module_str = module
|
||||
self.tag_name = tag_name
|
||||
self.config = config
|
||||
|
||||
@@ -167,10 +167,6 @@ class Config(object):
|
||||
'type': str,
|
||||
'default': '',
|
||||
'desc': 'Target to build "module-build-macros" RPM in.'},
|
||||
'koji_tag_inherit_from': {
|
||||
'type': str,
|
||||
'default': 'module-package-list',
|
||||
'desc': 'Tag that new module tags inherit from.'},
|
||||
'koji_tag_prefixes': {
|
||||
'type': list,
|
||||
'default': ['module'],
|
||||
|
||||
@@ -79,7 +79,8 @@ def _finalize(config, session, msg, state):
|
||||
module_name = parent.name
|
||||
tag = parent.koji_tag
|
||||
builder = module_build_service.builder.GenericBuilder.create(
|
||||
parent.owner, module_name, config.system, config, tag_name=tag)
|
||||
parent.owner, module_name, config.system, config, tag_name=tag,
|
||||
components=[c.package for c in parent.component_builds])
|
||||
|
||||
groups = module_build_service.builder.GenericBuilder.default_buildroot_groups(
|
||||
session, parent)
|
||||
|
||||
@@ -79,7 +79,8 @@ def failed(config, session, msg):
|
||||
|
||||
if build.koji_tag:
|
||||
builder = module_build_service.builder.GenericBuilder.create(
|
||||
build.owner, build.name, config.system, config, tag_name=build.koji_tag)
|
||||
build.owner, build.name, config.system, config, tag_name=build.koji_tag,
|
||||
components=[c.package for c in build.component_builds])
|
||||
builder.buildroot_connect(groups)
|
||||
|
||||
for component in unbuilt_components:
|
||||
@@ -222,7 +223,8 @@ def wait(config, session, msg):
|
||||
build.koji_tag = tag
|
||||
|
||||
builder = module_build_service.builder.GenericBuilder.create(
|
||||
build.owner, build.name, config.system, config, tag_name=tag)
|
||||
build.owner, build.name, config.system, config, tag_name=tag,
|
||||
components=[c.package for c in build.component_builds])
|
||||
builder.buildroot_connect(groups)
|
||||
log.debug("Adding dependencies %s into buildroot for module %s" % (dependencies, module_info))
|
||||
builder.buildroot_add_repos(dependencies)
|
||||
|
||||
@@ -84,7 +84,7 @@ def done(config, session, msg):
|
||||
|
||||
builder = module_build_service.builder.GenericBuilder.create(
|
||||
module_build.owner, module_build.name, config.system, config,
|
||||
tag_name=tag)
|
||||
tag_name=tag, components=[c.package for c in module_build.component_builds])
|
||||
builder.buildroot_connect(groups)
|
||||
|
||||
# Ok, for the subset of builds that did complete successfully, check to
|
||||
|
||||
@@ -93,7 +93,7 @@ class TestModuleBuilder(GenericBuilder):
|
||||
on_tag_artifacts_cb = None
|
||||
|
||||
@module_build_service.utils.validate_koji_tag('tag_name')
|
||||
def __init__(self, owner, module, config, tag_name):
|
||||
def __init__(self, owner, module, config, tag_name, components):
|
||||
self.module_str = module
|
||||
self.tag_name = tag_name
|
||||
self.config = config
|
||||
|
||||
@@ -65,7 +65,8 @@ class TestKojiBuilder(unittest.TestCase):
|
||||
fake_kmb = FakeKojiModuleBuilder(owner='Moe Szyslak',
|
||||
module='nginx',
|
||||
config=conf,
|
||||
tag_name='module-nginx-1.2')
|
||||
tag_name='module-nginx-1.2',
|
||||
components=[])
|
||||
fake_kmb.module_target = {'build_tag': 'module-fake_tag'}
|
||||
|
||||
with self.assertRaises(IOError):
|
||||
@@ -88,7 +89,8 @@ class TestGetKojiClientSession(unittest.TestCase):
|
||||
KojiModuleBuilder(owner=self.owner,
|
||||
module=self.module,
|
||||
config=self.config,
|
||||
tag_name=self.tag_name)
|
||||
tag_name=self.tag_name,
|
||||
components=[])
|
||||
args, kwargs = mocked_krb_login.call_args
|
||||
self.assertTrue(set([('proxyuser', self.owner)]).issubset(set(kwargs.items())))
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@ class TestModuleWait(unittest.TestCase):
|
||||
mmd.loads(f)
|
||||
|
||||
mocked_module_build.mmd.return_value = mmd
|
||||
mocked_module_build.component_builds = []
|
||||
|
||||
from_module_event.return_value = mocked_module_build
|
||||
|
||||
|
||||
Reference in New Issue
Block a user