Make our builders into setuptools plugins.

This commit is contained in:
Ralph Bean
2017-11-10 16:03:44 -05:00
parent 8431d2698b
commit 318117c0c5
3 changed files with 46 additions and 29 deletions

View File

@@ -1,17 +1,10 @@
from module_build_service import conf
import pkg_resources
from base import GenericBuilder
from KojiModuleBuilder import KojiModuleBuilder
from MockModuleBuilder import MockModuleBuilder
__all__ = [
GenericBuilder
]
GenericBuilder.register_backend_class(KojiModuleBuilder)
GenericBuilder.register_backend_class(MockModuleBuilder)
if conf.system == "copr":
from CoprModuleBuilder import CoprModuleBuilder
GenericBuilder.register_backend_class(CoprModuleBuilder)
for entrypoint in pkg_resources.iter_entry_points('mbs.builder_backends'):
GenericBuilder.register_backend_class(entrypoint.load())

View File

@@ -33,7 +33,14 @@ setup(name='module-build-service',
'fedmsg = module_build_service.messaging:_fedmsg_backend',
'in_memory = module_build_service.messaging:_in_memory_backend',
# 'custom = your_organization:_custom_backend',
]
],
'mbs.builder_backends': [
'koji = module_build_service.builder.KojiModuleBuilder:KojiModuleBuilder',
'mock = module_build_service.builder.MockModuleBuilder:MockModuleBuilder',
# TODO - let's move this out into its own repo so @frostyx can
# iterate without us blocking him.
'copr = module_build_service.builder.CoprModuleBuilder:CoprModuleBuilder',
],
},
scripts=["contrib/mbs-build"],
data_files=[('/etc/module-build-service/', ['conf/cacert.pem',

View File

@@ -58,14 +58,20 @@ class TestRepoDone(unittest.TestCase):
module_build_service.scheduler.handlers.repos.done(
config=conf, session=db.session, msg=msg)
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.get_average_build_time',
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.get_average_build_time',
return_value=0.0)
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.list_tasks_for_components',
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.list_tasks_for_components',
return_value=[])
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.buildroot_ready', return_value=True)
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.get_session')
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.build')
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.buildroot_connect')
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.buildroot_ready', return_value=True)
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.get_session')
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.build')
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.buildroot_connect')
def test_a_single_match(self, connect, build_fn, get_session, ready, list_tasks_fn, mock_gabt):
""" Test that when a repo msg hits us and we have a single match.
"""
@@ -81,14 +87,20 @@ class TestRepoDone(unittest.TestCase):
source=('git://pkgs.domain.local/rpms/communicator'
'?#da95886c8a443b36a9ce31abda1f9bed22f2f9c2'))
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.get_average_build_time',
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.get_average_build_time',
return_value=0.0)
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.list_tasks_for_components',
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.list_tasks_for_components',
return_value=[])
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.buildroot_ready', return_value=True)
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.get_session')
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.build')
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.buildroot_connect')
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.buildroot_ready', return_value=True)
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.get_session')
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.build')
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.buildroot_connect')
def test_a_single_match_build_fail(self, connect, build_fn, config, ready, list_tasks_fn,
mock_gabt):
""" Test that when a KojiModuleBuilder.build fails, the build is
@@ -131,12 +143,17 @@ class TestRepoDone(unittest.TestCase):
# Make sure the module build didn't transition since all the components weren't tagged
self.assertEqual(module_build.state, module_build_service.models.BUILD_STATES['build'])
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.list_tasks_for_components',
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.list_tasks_for_components',
return_value=[])
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.buildroot_ready', return_value=True)
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.get_session')
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.build')
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiModuleBuilder.buildroot_connect')
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.buildroot_ready', return_value=True)
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.get_session')
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.build')
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
'KojiModuleBuilder.buildroot_connect')
@mock.patch("module_build_service.builder.GenericBuilder.default_buildroot_groups",
return_value={'build': [], 'srpm-build': []})
def test_failed_component_build(self, dbg, connect, build_fn, config, ready, list_tasks_fn):