From e0d1c6eb0166119b20d13f8359a330b8075c3270 Mon Sep 17 00:00:00 2001 From: Jakub Kadlcik Date: Nov 15 2017 10:12:12 +0000 Subject: [PATCH 1/6] Use modularity DNF in the buildroot --- diff --git a/module_build_service/builder/CoprModuleBuilder.py b/module_build_service/builder/CoprModuleBuilder.py index ce45529..14c5b3a 100644 --- a/module_build_service/builder/CoprModuleBuilder.py +++ b/module_build_service/builder/CoprModuleBuilder.py @@ -105,6 +105,8 @@ class CoprModuleBuilder(GenericBuilder): copr = self._get_copr(**kwargs) self._create_chroot_safe(copr, self.chroot) + self.client.modify_project(copr.projectname, copr.username, + use_bootstrap_container=True) return copr def _get_copr(self, ownername, projectname): @@ -193,8 +195,19 @@ class CoprModuleBuilder(GenericBuilder): # Kojipkgs repos have been prematurely disabled without providing any # suitable alternative for Copr. This is a temporary workaround until # we figure out how to solve this permanently. - repos.append("https://kojipkgs.fedoraproject.org/compose/" - "latest-Fedora-Modular-26/compose/Server/x86_64/os/") + compose = ("https://kojipkgs.fedoraproject.org/compose/" + "latest-Fedora-Modular-{}/compose/Server/x86_64/os/") + + # We need to enable copr repositories with modularity DNF + # so we can install modules into the buildroot + copr = ("https://copr-be.cloud.fedoraproject.org/results/" + "@copr/{}/fedora-26-x86_64/") + + repos.extend([ + compose.format("Bikeshed"), + copr.format("dnf-modularity-nightly"), + copr.format("dnf-modularity-buildroot-deps"), + ]) self._update_chroot(repos=repos) From a942f29494f79b104120ac99eb2592b4143b6863 Mon Sep 17 00:00:00 2001 From: Jakub Kadlcik Date: Nov 15 2017 10:12:12 +0000 Subject: [PATCH 2/6] Rather install modules into the buildroot --- diff --git a/module_build_service/builder/CoprModuleBuilder.py b/module_build_service/builder/CoprModuleBuilder.py index 14c5b3a..6237ab8 100644 --- a/module_build_service/builder/CoprModuleBuilder.py +++ b/module_build_service/builder/CoprModuleBuilder.py @@ -83,9 +83,9 @@ class CoprModuleBuilder(GenericBuilder): self.copr = self._get_copr_safe() self._create_module_safe() - # @FIXME Not able to use gcc-c++ in chroot (RhBug: 1440889) - packages = groups["build"] - {"gcc-c++"} - self._update_chroot(packages=list(packages)) + buildrequires = ["@{}:{}/{}".format(n, s, "buildroot") + for n, s in self.module.mmd().buildrequires.items()] + self._update_chroot(packages=buildrequires) if self.copr and self.copr.projectname and self.copr.username: self.__prep = True From 6214476eaa643c1831e6bf8347e079cafdae546c Mon Sep 17 00:00:00 2001 From: Jakub Kadlcik Date: Nov 15 2017 10:12:12 +0000 Subject: [PATCH 3/6] Put name, stream and version into the modulemd file --- diff --git a/module_build_service/builder/CoprModuleBuilder.py b/module_build_service/builder/CoprModuleBuilder.py index 6237ab8..7c17618 100644 --- a/module_build_service/builder/CoprModuleBuilder.py +++ b/module_build_service/builder/CoprModuleBuilder.py @@ -125,9 +125,7 @@ class CoprModuleBuilder(GenericBuilder): def _create_module_safe(self): from copr.exceptions import CoprRequestException - modulemd = tempfile.mktemp() - self.module.mmd().dump(modulemd) - + modulemd = self._dump_mmd() kwargs = { "username": self.module.copr_owner or self.owner, "projectname": self.module.copr_project or @@ -144,6 +142,18 @@ class CoprModuleBuilder(GenericBuilder): finally: os.remove(modulemd) + def _dump_mmd(self): + # Write module's name, stream and version into the modulemd file + # so Copr can parse it from there + mmd = self.module.mmd() + mmd.name = str(self.module.name) + mmd.stream = str(self.module.stream) + mmd.version = int(self.module.version) + + modulemd = tempfile.mktemp() + mmd.dump(modulemd) + return modulemd + def buildroot_ready(self, artifacts=None): """ :param artifacts=None : a list of artifacts supposed to be in the buildroot @@ -295,8 +305,7 @@ class CoprModuleBuilder(GenericBuilder): chroots=[self.chroot]) def finalize(self): - modulemd = tempfile.mktemp() - self.module.mmd().dump(modulemd) + modulemd = self._dump_mmd() # Create a module from previous project result = self.client.make_module(username=self.copr.username, From 998ed7994943d0a6e1f975615fd3095e7ddbd2d4 Mon Sep 17 00:00:00 2001 From: Jakub Kadlcik Date: Nov 15 2017 10:12:12 +0000 Subject: [PATCH 4/6] Remove redundant import --- diff --git a/module_build_service/builder/CoprModuleBuilder.py b/module_build_service/builder/CoprModuleBuilder.py index 7c17618..635f8b3 100644 --- a/module_build_service/builder/CoprModuleBuilder.py +++ b/module_build_service/builder/CoprModuleBuilder.py @@ -123,8 +123,6 @@ class CoprModuleBuilder(GenericBuilder): chroots=current_chroots + [chroot]) def _create_module_safe(self): - from copr.exceptions import CoprRequestException - modulemd = self._dump_mmd() kwargs = { "username": self.module.copr_owner or self.owner, From c06c09f3fa832194f4bdbe123ecd28cf0fdc3cd7 Mon Sep 17 00:00:00 2001 From: Jakub Kadlcik Date: Nov 15 2017 16:20:23 +0000 Subject: [PATCH 5/6] Bikeshed compose is gone, use F27 and Rawhide instead --- diff --git a/module_build_service/builder/CoprModuleBuilder.py b/module_build_service/builder/CoprModuleBuilder.py index 635f8b3..3abf33d 100644 --- a/module_build_service/builder/CoprModuleBuilder.py +++ b/module_build_service/builder/CoprModuleBuilder.py @@ -212,7 +212,8 @@ class CoprModuleBuilder(GenericBuilder): "@copr/{}/fedora-26-x86_64/") repos.extend([ - compose.format("Bikeshed"), + compose.format("27"), + compose.format("Rawhide"), copr.format("dnf-modularity-nightly"), copr.format("dnf-modularity-buildroot-deps"), ]) From 5eef24c1a8a05aff7c5891282fb08dce7b5404be Mon Sep 17 00:00:00 2001 From: Jakub Kadlcik Date: Nov 21 2017 10:45:30 +0000 Subject: [PATCH 6/6] Install also packages from the buildroot profile --- diff --git a/module_build_service/builder/CoprModuleBuilder.py b/module_build_service/builder/CoprModuleBuilder.py index 3abf33d..f19b02f 100644 --- a/module_build_service/builder/CoprModuleBuilder.py +++ b/module_build_service/builder/CoprModuleBuilder.py @@ -82,9 +82,15 @@ class CoprModuleBuilder(GenericBuilder): """ self.copr = self._get_copr_safe() self._create_module_safe() + mmd = self.module.mmd() buildrequires = ["@{}:{}/{}".format(n, s, "buildroot") - for n, s in self.module.mmd().buildrequires.items()] + for n, s in mmd.buildrequires.items()] + + buildroot_profile = mmd.profiles.get("buildroot") + if buildroot_profile: + buildrequires.extend(buildroot_profile.rpms) + self._update_chroot(packages=buildrequires) if self.copr and self.copr.projectname and self.copr.username: