diff --git a/module_build_service/builder/__init__.py b/module_build_service/builder/__init__.py index ae135a43..dbfdd9a0 100644 --- a/module_build_service/builder/__init__.py +++ b/module_build_service/builder/__init__.py @@ -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()) diff --git a/setup.py b/setup.py index 47f62ddd..a4177fdc 100644 --- a/setup.py +++ b/setup.py @@ -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', diff --git a/tests/test_scheduler/test_repo_done.py b/tests/test_scheduler/test_repo_done.py index 78549b49..271e51f8 100644 --- a/tests/test_scheduler/test_repo_done.py +++ b/tests/test_scheduler/test_repo_done.py @@ -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):