diff --git a/module_build_service/builder/KojiModuleBuilder.py b/module_build_service/builder/KojiModuleBuilder.py index 9387f8e5..01125ba7 100644 --- a/module_build_service/builder/KojiModuleBuilder.py +++ b/module_build_service/builder/KojiModuleBuilder.py @@ -418,10 +418,15 @@ chmod 644 %buildroot/%_sysconfdir/rpm/macros.zz-modules ) add_groups() + # Koji targets can only be 50 characters long, but the generate_koji_tag function + # checks the length with '-build' at the end, but we know we will never append '-build', + # so we can safely have the name check be more characters + target_length = 50 + len('-build') + target = module_build_service.utils.generate_koji_tag( + self.module.name, self.module.stream, self.module.version, self.module.context, + target_length) # Add main build target. - self.module_target = self._koji_add_target(self.tag_name, - self.module_build_tag, - self.module_tag) + self.module_target = self._koji_add_target(target, self.module_build_tag, self.module_tag) self.__prep = True log.info("%r buildroot sucessfully connected." % self) diff --git a/module_build_service/utils/general.py b/module_build_service/utils/general.py index 2f9fbb22..087d6eda 100644 --- a/module_build_service/utils/general.py +++ b/module_build_service/utils/general.py @@ -93,7 +93,7 @@ def module_build_state_from_msg(msg): return state -def generate_koji_tag(name, stream, version, context): +def generate_koji_tag(name, stream, version, context, max_length=256): """ Generate a koji tag from name, stream, version and context. @@ -101,14 +101,15 @@ def generate_koji_tag(name, stream, version, context): :param stream: a module's stream :param version: a module's version :param context: a module's context + :kwarg max_length: the maximum length the Koji tag can be before falling back to + the old format of "module-" :return: a Koji tag """ nsvc_list = [name, stream, str(version), context] nsvc_tag = 'module-' + '-'.join(nsvc_list) - if len(nsvc_tag) + len('-build') > 256: - # Koji supports tag names with a max length of 256, fallback - # to the old way of 'module-' if the generated koji tag - # name is too long + if len(nsvc_tag) + len('-build') > max_length: + # Fallback to the old format of 'module-' if the generated koji tag + # name is longer than max_length nsvc_hash = hashlib.sha1('.'.join(nsvc_list)).hexdigest()[:16] return 'module-' + nsvc_hash return nsvc_tag diff --git a/tests/test_builder/test_koji.py b/tests/test_builder/test_koji.py index f2469f4f..4daae99a 100644 --- a/tests/test_builder/test_koji.py +++ b/tests/test_builder/test_koji.py @@ -69,7 +69,10 @@ class FakeKojiModuleBuilder(KojiModuleBuilder): koji_session.createTag = _createTag def _getBuildTarget(name): - return {"build_tag_name": name + "-build", "dest_tag_name": name} + return { + "build_tag_name": self.module_build_tag['name'], + "dest_tag_name": self.module_tag['name'] + } koji_session.getBuildTarget = _getBuildTarget def _getAllPerms(*args, **kwargs):