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:
Jan Kaluža
2017-03-14 16:22:38 +00:00
8 changed files with 44 additions and 30 deletions

View File

@@ -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

View File

@@ -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'],

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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())))

View File

@@ -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