diff --git a/module_build_service/builder.py b/module_build_service/builder.py index 51cce99a..c27fc856 100644 --- a/module_build_service/builder.py +++ b/module_build_service/builder.py @@ -145,6 +145,46 @@ class GenericBuilder(six.with_metaclass(ABCMeta)): backend = "generic" + @classmethod + def create(cls, owner, module, backend, config, **extra): + """ + :param owner: a string representing who kicked off the builds + :param module: a module string e.g. 'testmodule-1.0' + :param backend: a string representing backend e.g. 'koji' + :param config: instance of module_build_service.config.Config + + Any additional arguments are optional extras which can be passed along + and are implementation-dependent. + """ + + if isinstance(config.system, Mock): + return KojiModuleBuilder(owner=owner, module=module, + config=config, **extra) + elif backend == "koji": + return KojiModuleBuilder(owner=owner, module=module, + config=config, **extra) + elif backend == "copr": + return CoprModuleBuilder(owner=owner, module=module, + config=config, **extra) + else: + raise ValueError("Builder backend='%s' not recognized" % backend) + + @classmethod + def tag_to_repo(cls, backend, config, tag_name, arch): + """ + :param backend: a string representing the backend e.g. 'koji'. + :param config: instance of rida.config.Config + :param tag_name: Tag for which the repository is returned + :param arch: Architecture for which the repository is returned + + Returns URL of repository containing the built artifacts for + the tag with particular name and architecture. + """ + if backend == "koji": + return KojiModuleBuilder.repo_from_tag(config, tag_name, arch) + else: + raise ValueError("Builder backend='%s' not recognized" % backend) + @abstractmethod def buildroot_connect(self): """ @@ -226,7 +266,7 @@ class GenericBuilder(six.with_metaclass(ABCMeta)): @classmethod @abstractmethod - def tag_to_repo(self, config, tag_name, arch): + def repo_from_tag(self, config, tag_name, arch): """ :param config: instance of rida.config.Config :param tag_name: Tag for which the repository is returned @@ -237,49 +277,6 @@ class GenericBuilder(six.with_metaclass(ABCMeta)): """ raise NotImplementedError() -class Builder(object): - """Wrapper class""" - - def __new__(cls, owner, module, backend, config, **extra): - """ - :param owner: a string representing who kicked off the builds - :param module: a module string e.g. 'testmodule-1.0' - :param backend: a string representing backend e.g. 'koji' - :param config: instance of module_build_service.config.Config - - Any additional arguments are optional extras which can be passed along - and are implementation-dependent. - """ - - if isinstance(config.system, Mock): - return KojiModuleBuilder(owner=owner, module=module, - config=config, **extra) - elif backend == "koji": - return KojiModuleBuilder(owner=owner, module=module, - config=config, **extra) - elif backend == "copr": - return CoprModuleBuilder(owner=owner, module=module, - config=config, **extra) - else: - raise ValueError("Builder backend='%s' not recognized" % backend) - - @classmethod - def tag_to_repo(cls, backend, config, tag_name, arch): - """ - :param backend: a string representing the backend e.g. 'koji'. - :param config: instance of rida.config.Config - :param tag_name: Tag for which the repository is returned - :param arch: Architecture for which the repository is returned - - Returns URL of repository containing the built artifacts for - the tag with particular name and architecture. - """ - if backend == "koji": - return KojiModuleBuilder.tag_to_repo(config, tag_name, arch) - else: - raise ValueError("Builder backend='%s' not recognized" % backend) - - class KojiModuleBuilder(GenericBuilder): """ Koji specific builder class """ @@ -608,7 +605,7 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules return task_id, state, reason, None @classmethod - def tag_to_repo(cls, config, tag_name, arch): + def repo_from_tag(cls, config, tag_name, arch): """ :param config: instance of rida.config.Config :param tag_name: Tag for which the repository is returned diff --git a/module_build_service/scheduler/handlers/components.py b/module_build_service/scheduler/handlers/components.py index 602476fc..ec721a91 100644 --- a/module_build_service/scheduler/handlers/components.py +++ b/module_build_service/scheduler/handlers/components.py @@ -77,8 +77,8 @@ def _finalize(config, session, msg, state): # And install the macros. module_name = parent.name tag = parent.koji_tag - builder = module_build_service.builder.Builder(parent.owner, module_name, config.system, - config, tag_name=tag) + builder = module_build_service.builder.GenericBuilder.create( + parent.owner, module_name, config.system, config, tag_name=tag) builder.buildroot_connect() # tag && add to srpm-build group nvr = "{}-{}-{}".format(msg.build_name, msg.build_version, diff --git a/module_build_service/scheduler/handlers/modules.py b/module_build_service/scheduler/handlers/modules.py index ecd6bb57..9402c08a 100644 --- a/module_build_service/scheduler/handlers/modules.py +++ b/module_build_service/scheduler/handlers/modules.py @@ -119,8 +119,8 @@ def wait(config, session, msg): log.debug("Assigning koji tag=%s to module build" % tag) build.koji_tag = tag - builder = module_build_service.builder.Builder(build.owner, build.name, config.system, config, - tag_name=tag) + builder = module_build_service.builder.GenericBuilder.create( + build.owner, build.name, config.system, config, tag_name=tag) build.buildroot_task_id = builder.buildroot_connect() log.debug("Adding dependencies %s into buildroot for module %s" % (dependencies, module_info)) builder.buildroot_add_repos(dependencies) diff --git a/module_build_service/scheduler/handlers/repos.py b/module_build_service/scheduler/handlers/repos.py index dcdfafb2..2eff8dc8 100644 --- a/module_build_service/scheduler/handlers/repos.py +++ b/module_build_service/scheduler/handlers/repos.py @@ -79,8 +79,9 @@ def done(config, session, msg): log.warn("Odd! All components in batch failed for %r." % module_build) return - builder = module_build_service.builder.Builder(module_build.owner, module_build.name, - config.system, config, tag_name=tag) + builder = module_build_service.builder.GenericBuilder.create( + module_build.owner, module_build.name, config.system, config, + tag_name=tag) builder.buildroot_connect() # Ok, for the subset of builds that did complete successfully, check to diff --git a/tests/test_builder/test_koji.py b/tests/test_builder/test_koji.py index c40a6ddb..3906433c 100644 --- a/tests/test_builder/test_koji.py +++ b/tests/test_builder/test_koji.py @@ -40,7 +40,7 @@ class TestKojiBuilder(unittest.TestCase): """ Test that when a repo msg hits us and we have no match, that we do nothing gracefully. """ - repo = module_build_service.builder.Builder.tag_to_repo( + repo = module_build_service.builder.GenericBuilder.tag_to_repo( "koji", self.config, "module-base-runtime-0.25-9", "x86_64")