def test_yuminject_plugin_notwrapped(tmpdir): df_content = """\ FROM fedora RUN yum install -y python-django CMD blabla""" df = DockerfileParser(str(tmpdir)) df.content = df_content tasker, workflow = prepare(df.dockerfile_path) metalink = 'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = render_yum_repo(OrderedDict( (('name', 'my-repo'), ('metalink', metalink), ('enabled', 1), ('gpgcheck', 0)), )) runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": False } }]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = r"""FROM fedora ADD atomic-reactor-repos/* '/etc/yum.repos.d/' RUN yum install -y python-django CMD blabla RUN rm -f '/etc/yum.repos.d/atomic-reactor-injected.repo' """ assert expected_output == df.content
def run(self): """ run the plugin """ source = self._load_source() set_flatpak_source_info(self.workflow, source) # Create the dockerfile if source.runtime: profile = 'runtime' else: profile = 'default' module_info = source.compose.base_module packages = ' '.join(module_info.mmd.profiles[profile].rpms) df_path = os.path.join(self.workflow.builder.df_dir, DOCKERFILE_FILENAME) with open(df_path, 'w') as fp: fp.write(DOCKERFILE_TEMPLATE.format(name=module_info.name, stream=module_info.stream, version=module_info.version, base_image=self.base_image, packages=packages, rpm_qf_args=rpm_qf_args())) self.workflow.builder.set_df_path(df_path) # Create the cleanup script cleanupscript = os.path.join(self.workflow.builder.df_dir, "cleanup.sh") with open(cleanupscript, 'w') as f: for line in source.flatpak_json.get('cleanup-commands', []): f.write(line) f.write("\n") os.chmod(cleanupscript, 0o0755) # Add a yum-repository pointing to the compose repo_name = 'atomic-reactor-module-{name}-{stream}-{version}'.format( name=module_info.name, stream=module_info.stream, version=module_info.version) repo = { 'name': repo_name, 'baseurl': source.compose.repo_url, 'enabled': 1, 'gpgcheck': 0, } path = os.path.join(YUM_REPOS_DIR, repo_name + '.repo') self.workflow.files[path] = render_yum_repo(repo, escape_dollars=False) override_build_kwarg(self.workflow, 'module_compose_id', source.compose.compose_id)
def test_render_yum_repo_unicode(): yum_repo = OrderedDict(( ("name", "asd"), ("baseurl", "http://example.com/$basearch/test.repo"), ("enabled", "1"), ("gpgcheck", "0"), )) rendered_repo = render_yum_repo(yum_repo) assert rendered_repo == """\
def run(self): """ run the plugin """ if self.workflow.builder.base_from_scratch and not self.workflow.builder.parent_images: self.log.info( "from scratch single stage can't add repos from koji target") return target_info = self.xmlrpc.getBuildTarget(self.target) if target_info is None: self.log.error("provided target '%s' doesn't exist", self.target) raise RuntimeError("Provided target '%s' doesn't exist!" % self.target) tag_info = self.xmlrpc.getTag(target_info['build_tag_name']) if not tag_info or 'name' not in tag_info: self.log.warning("No tag info was retrieved") return repo_info = self.xmlrpc.getRepo(tag_info['id']) if not repo_info or 'id' not in repo_info: self.log.warning("No repo info was retrieved") return # to use urljoin, we would have to append '/', so let's append everything baseurl = self.pathinfo.repo(repo_info['id'], tag_info['name']) + "/$basearch" self.log.info("baseurl = '%s'", baseurl) repo = { 'name': 'atomic-reactor-koji-plugin-%s' % self.target, 'baseurl': baseurl, 'enabled': 1, 'gpgcheck': 0, } # yum doesn't accept a certificate path in sslcacert - it requires a db with added cert # dnf ignores that option completely # we have to fall back to sslverify=0 everytime we get https repo from brew so we'll surely # be able to pull from it if baseurl.startswith("https://"): self.log.info("Ignoring certificates in the repo") repo['sslverify'] = 0 if self.proxy: self.log.info("Setting yum proxy to %s", self.proxy) repo['proxy'] = self.proxy path = YumRepo(os.path.join(YUM_REPOS_DIR, self.target)).dst_filename self.log.info("yum repo of koji target: '%s'", path) self.workflow.files[path] = render_yum_repo(repo, escape_dollars=False)
def test_yuminject_multiline_wrapped_with_chown(tmpdir): df_content = """\ FROM fedora RUN yum install -y --setopt=tsflags=nodocs bind-utils gettext iproute v8314 mongodb24-mongodb mongodb24 && \ yum clean all && \ mkdir -p /var/lib/mongodb/data && chown -R mongodb:mongodb /var/lib/mongodb/ && \ test "$(id mongodb)" = "uid=184(mongodb) gid=998(mongodb) groups=998(mongodb)" && \ chmod o+w -R /var/lib/mongodb && chmod o+w -R /opt/rh/mongodb24/root/var/lib/mongodb CMD blabla""" df = DockerfileParser(str(tmpdir)) df.content = df_content tasker = DockerTasker() workflow = DockerBuildWorkflow(SOURCE, "test-image") setattr(workflow, 'builder', X()) metalink = r'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = render_yum_repo( OrderedDict( (('name', 'my-repo'), ('metalink', metalink), ('enabled', 1), ('gpgcheck', 0)), )) setattr(workflow.builder, 'image_id', "asd123") setattr(workflow.builder, 'df_path', df.dockerfile_path) setattr(workflow.builder, 'df_dir', str(tmpdir)) setattr(workflow.builder, 'base_image', ImageName(repo='Fedora', tag='21')) setattr(workflow.builder, 'git_dockerfile_path', None) setattr(workflow.builder, 'git_path', None) setattr(workflow.builder, 'source', X()) setattr(workflow.builder.source, 'dockerfile_path', None) setattr(workflow.builder.source, 'path', '') runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": True } }]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = """FROM fedora RUN printf "[my-repo]\nname=my-repo\nmetalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-\\$releasever&arch=\ \\$basearch\nenabled=1\ngpgcheck=0\n" >/etc/yum.repos.d/atomic-reactor-injected.repo && \ yum install -y --setopt=tsflags=nodocs bind-utils gettext iproute v8314 mongodb24-mongodb mongodb24 && \ yum clean all && mkdir -p /var/lib/mongodb/data && chown -R mongodb:mongodb /var/lib/mongodb/ && \ test "$(id mongodb)" = "uid=184(mongodb) gid=998(mongodb) groups=998(mongodb)" && \ chmod o+w -R /var/lib/mongodb && chmod o+w -R /opt/rh/mongodb24/root/var/lib/mongodb && \ yum clean all && rm -f /etc/yum.repos.d/atomic-reactor-injected.repo CMD blabla""" assert df.content == expected_output
def run(self): """ run the plugin """ if self.workflow.builder.base_from_scratch and not self.workflow.builder.parent_images: self.log.info("from scratch single stage can't add repos from koji target") return target_info = self.xmlrpc.getBuildTarget(self.target) if target_info is None: self.log.error("provided target '%s' doesn't exist", self.target) raise RuntimeError("Provided target '%s' doesn't exist!" % self.target) tag_info = self.xmlrpc.getTag(target_info['build_tag_name']) if not tag_info or 'name' not in tag_info: self.log.warning("No tag info was retrieved") return repo_info = self.xmlrpc.getRepo(tag_info['id']) if not repo_info or 'id' not in repo_info: self.log.warning("No repo info was retrieved") return # to use urljoin, we would have to append '/', so let's append everything baseurl = self.pathinfo.repo(repo_info['id'], tag_info['name']) + "/$basearch" self.log.info("baseurl = '%s'", baseurl) repo = { 'name': 'atomic-reactor-koji-plugin-%s' % self.target, 'baseurl': baseurl, 'enabled': 1, 'gpgcheck': 0, } # yum doesn't accept a certificate path in sslcacert - it requires a db with added cert # dnf ignores that option completely # we have to fall back to sslverify=0 everytime we get https repo from brew so we'll surely # be able to pull from it if baseurl.startswith("https://"): self.log.info("Ignoring certificates in the repo") repo['sslverify'] = 0 if self.proxy: self.log.info("Setting yum proxy to %s", self.proxy) repo['proxy'] = self.proxy path = YumRepo(os.path.join(YUM_REPOS_DIR, self.target)).dst_filename self.log.info("yum repo of koji target: '%s'", path) self.workflow.files[path] = render_yum_repo(repo, escape_dollars=False)
def test_yuminject_multiline_wrapped_with_chown(tmpdir): df_content = """\ FROM fedora RUN yum install -y --setopt=tsflags=nodocs bind-utils gettext iproute v8314 mongodb24-mongodb mongodb24 && \ yum clean all && \ mkdir -p /var/lib/mongodb/data && chown -R mongodb:mongodb /var/lib/mongodb/ && \ test "$(id mongodb)" = "uid=184(mongodb) gid=998(mongodb) groups=998(mongodb)" && \ chmod o+w -R /var/lib/mongodb && chmod o+w -R /opt/rh/mongodb24/root/var/lib/mongodb CMD blabla""" df = DockerfileParser(str(tmpdir)) df.content = df_content tasker = DockerTasker() workflow = DockerBuildWorkflow(SOURCE, "test-image") setattr(workflow, 'builder', X()) metalink = r'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = render_yum_repo(OrderedDict( (('name', 'my-repo'), ('metalink', metalink), ('enabled', 1), ('gpgcheck', 0)), )) setattr(workflow.builder, 'image_id', "asd123") setattr(workflow.builder, 'df_path', df.dockerfile_path) setattr(workflow.builder, 'df_dir', str(tmpdir)) setattr(workflow.builder, 'base_image', ImageName(repo='Fedora', tag='21')) setattr(workflow.builder, 'git_dockerfile_path', None) setattr(workflow.builder, 'git_path', None) setattr(workflow.builder, 'source', X()) setattr(workflow.builder.source, 'dockerfile_path', None) setattr(workflow.builder.source, 'path', '') runner = PreBuildPluginsRunner(tasker, workflow, [{'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": True }}]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = """FROM fedora RUN printf "[my-repo]\nname=my-repo\nmetalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-\\$releasever&arch=\ \\$basearch\nenabled=1\ngpgcheck=0\n" >/etc/yum.repos.d/atomic-reactor-injected.repo && \ yum install -y --setopt=tsflags=nodocs bind-utils gettext iproute v8314 mongodb24-mongodb mongodb24 && \ yum clean all && mkdir -p /var/lib/mongodb/data && chown -R mongodb:mongodb /var/lib/mongodb/ && \ test "$(id mongodb)" = "uid=184(mongodb) gid=998(mongodb) groups=998(mongodb)" && \ chmod o+w -R /var/lib/mongodb && chmod o+w -R /opt/rh/mongodb24/root/var/lib/mongodb && \ yum clean all && rm -f /etc/yum.repos.d/atomic-reactor-injected.repo CMD blabla""" assert df.content == expected_output
def run(self): """ run the plugin """ self.workflow.repos.setdefault("yum", []) repo = { 'name': self.repo_name, 'baseurl': self.baseurl, 'enabled': 1, 'gpgcheck': 0, } path = os.path.join(YUM_REPOS_DIR, self.repo_name + ".repo") self.log.info("yum repo of koji target: '%s'", path) self.workflow.files[path] = render_yum_repo(repo)
def test_yuminject_plugin_wrapped(tmpdir): df_content = """\ FROM fedora RUN yum install -y python-django CMD blabla""" df = DockerfileParser(str(tmpdir)) df.content = df_content tasker = DockerTasker() workflow = DockerBuildWorkflow(SOURCE, "test-image") setattr(workflow, 'builder', X()) workflow.builder.source = workflow.source metalink = 'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = render_yum_repo(OrderedDict( (('name', 'my-repo'), ('metalink', metalink), ('enabled', '1'), ('gpgcheck', '0')), )) setattr(workflow.builder, 'image_id', "asd123") setattr(workflow.builder, 'df_path', df.dockerfile_path) setattr(workflow.builder, 'df_dir', str(tmpdir)) setattr(workflow.builder, 'base_image', ImageName(repo='Fedora', tag='21')) setattr(workflow.builder, 'git_dockerfile_path', None) setattr(workflow.builder, 'git_path', None) runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": True } }]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = """FROM fedora RUN printf "[my-repo]\nname=my-repo\nmetalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-\\$releasever&arch=\\$basearch\nenabled=1\ngpgcheck=0\n" >/etc/yum.repos.d/atomic-reactor-injected.repo && yum install -y python-django && yum clean all && rm -f /etc/yum.repos.d/atomic-reactor-injected.repo CMD blabla""" assert df.content == expected_output
def test_yuminject_multiline_wrapped(tmpdir, docker_tasker): # noqa df_content = """\ FROM fedora RUN yum install -y httpd \ uwsgi CMD blabla""" df = df_parser(str(tmpdir)) df.content = df_content workflow = DockerBuildWorkflow(SOURCE, "test-image") setattr(workflow, 'builder', X()) metalink = 'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = \ render_yum_repo(OrderedDict((('name', 'my-repo'), ('metalink', metalink), ('enabled', '1'), ('gpgcheck', '0')), )) setattr(workflow.builder, 'image_id', "asd123") setattr(workflow.builder, 'df_path', df.dockerfile_path) setattr(workflow.builder, 'df_dir', str(tmpdir)) setattr(workflow.builder, 'base_image', ImageName(repo='Fedora', tag='21')) setattr(workflow.builder, 'source', X()) setattr(workflow.builder.source, 'dockerfile_path', None) setattr(workflow.builder.source, 'path', None) runner = PreBuildPluginsRunner(docker_tasker, workflow, [{ 'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": True } }]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = """FROM fedora RUN printf "[my-repo]\nname=my-repo\nmetalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-\\$releasever&arch=\\$basearch\nenabled=1\ngpgcheck=0\n" >/etc/yum.repos.d/atomic-reactor-injected.repo && yum install -y httpd uwsgi && yum clean all && rm -f /etc/yum.repos.d/atomic-reactor-injected.repo CMD blabla""" # noqa assert df.content == expected_output
def run(self): """ run the plugin """ target_info = self.xmlrpc.getBuildTarget(self.target) if target_info is None: self.log.error("provided target '%s' doesn't exist", self.target) raise RuntimeError("Provided target '%s' doesn't exist!" % self.target) tag_info = self.xmlrpc.getTag(target_info['build_tag_name']) repo_info = self.xmlrpc.getRepo(tag_info['id']) # to use urljoin, we would have to append '/', so let's append everything baseurl = self.pathinfo.repo(repo_info['id'], tag_info['name']) + "/$basearch" self.log.info("baseurl = '%s'", baseurl) repo = { 'name': 'atomic-reactor-koji-plugin-%s' % self.target, 'baseurl': baseurl, 'enabled': 1, 'gpgcheck': 0, } path = os.path.join(YUM_REPOS_DIR, self.target + ".repo") self.log.info("yum repo of koji target: '%s'", path) self.workflow.files[path] = render_yum_repo(repo, escape_dollars=False)
def test_yuminject_plugin_notwrapped(tmpdir): df_content = """\ FROM fedora RUN yum install -y python-django CMD blabla""" df = df_parser(str(tmpdir)) df.content = df_content tasker, workflow = prepare(df.dockerfile_path) metalink = 'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = render_yum_repo( OrderedDict( (('name', 'my-repo'), ('metalink', metalink), ('enabled', 1), ('gpgcheck', 0)), )) runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": False } }]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = r"""FROM fedora ADD atomic-reactor-repos/* '/etc/yum.repos.d/' RUN yum install -y python-django CMD blabla RUN rm -f '/etc/yum.repos.d/atomic-reactor-injected.repo' """ assert expected_output == df.content
def run(self): """ run the plugin """ target_info = self.xmlrpc.getBuildTarget(self.target) if target_info is None: self.log.error("provided target '%s' doesn't exist", self.target) raise RuntimeError("Provided target '%s' doesn't exist!" % self.target) tag_info = self.xmlrpc.getTag(target_info['build_tag_name']) repo_info = self.xmlrpc.getRepo(tag_info['id']) # to use urljoin, we would have to append '/', so let's append everything baseurl = self.pathinfo.repo(repo_info['id'], tag_info['name']) + "/$basearch" self.log.info("baseurl = '%s'", baseurl) repo = { 'name': 'atomic-reactor-koji-plugin-%s' % self.target, 'baseurl': baseurl, 'enabled': 1, 'gpgcheck': 0, } # yum doesn't accept a certificate path in sslcacert - it requires a db with added cert # dnf ignores that option completely # we have to fall back to sslverify=0 everytime we get https repo from brew so we'll surely # be able to pull from it if baseurl.startswith("https://"): self.log.info("Ignoring certificates in the repo") repo['sslverify'] = 0 path = os.path.join(YUM_REPOS_DIR, self.target + ".repo") self.log.info("yum repo of koji target: '%s'", path) self.workflow.files[path] = render_yum_repo(repo, escape_dollars=False)
def run(self): """ run the plugin """ source = self._load_source() set_flatpak_source_info(self.workflow, source) builder = FlatpakBuilder(source, None, None) builder.precheck() # Create the dockerfile module_info = source.base_module # We need to enable all the modules other than the platform pseudo-module modules_str = ' '.join(builder.get_enable_modules()) install_packages_str = ' '.join(builder.get_install_packages()) name = source.flatpak_yaml.get('name', module_info.name) component = source.flatpak_yaml.get('component', module_info.name) df_path = os.path.join(self.workflow.builder.df_dir, DOCKERFILE_FILENAME) with open(df_path, 'w') as fp: fp.write(DOCKERFILE_TEMPLATE.format(name=name, component=component, stream=module_info.stream.replace('-', '_'), version=module_info.version, base_image=self.base_image, modules=modules_str, packages=install_packages_str, rpm_qf_args=rpm_qf_args())) self.workflow.builder.set_df_path(df_path) includepkgs = builder.get_includepkgs() includepkgs_path = os.path.join(self.workflow.builder.df_dir, 'atomic-reactor-includepkgs') with open(includepkgs_path, 'w') as f: f.write('includepkgs = ' + ','.join(includepkgs) + '\n') # Create the cleanup script cleanupscript = os.path.join(self.workflow.builder.df_dir, "cleanup.sh") with open(cleanupscript, 'w') as f: f.write(builder.get_cleanup_script()) os.chmod(cleanupscript, 0o0755) # Add a yum-repository pointing to the compose repo_name = 'atomic-reactor-module-{name}-{stream}-{version}'.format( name=module_info.name, stream=module_info.stream, version=module_info.version) compose_info = get_compose_info(self.workflow) repo = { 'name': repo_name, 'baseurl': compose_info.repo_url, 'enabled': 1, 'gpgcheck': 0, } path = YumRepo(os.path.join(YUM_REPOS_DIR, repo_name)).dst_filename self.workflow.files[path] = render_yum_repo(repo, escape_dollars=False)
def run(self): """ run the plugin """ source = self._load_source() set_flatpak_source_info(self.workflow, source) module_info = source.compose.base_module # For a runtime, certain information is duplicated between the container.yaml # and the modulemd, check that it matches if source.runtime: flatpak_yaml = source.flatpak_yaml flatpak_xmd = module_info.mmd.props.xmd['flatpak'] def check(condition, what): if not condition: raise RuntimeError( "Mismatch for {} betweeen module xmd and container.yaml" .format(what)) check(flatpak_yaml['branch'] == flatpak_xmd['branch'], "'branch'") check(source.profile in flatpak_xmd['runtimes'], 'profile name') profile_xmd = flatpak_xmd['runtimes'][source.profile] check(flatpak_yaml['id'] == profile_xmd['id'], "'id'") check( flatpak_yaml.get('runtime', None) == profile_xmd.get('runtime', None), "'runtime'") check( flatpak_yaml.get('sdk', None) == profile_xmd.get('sdk', None), "'sdk'") # Create the dockerfile install_packages = module_info.mmd.peek_profiles()[ source.profile].props.rpms.get() install_packages_str = ' '.join(install_packages) df_path = os.path.join(self.workflow.builder.df_dir, DOCKERFILE_FILENAME) with open(df_path, 'w') as fp: fp.write( DOCKERFILE_TEMPLATE.format(name=module_info.name, stream=module_info.stream, version=module_info.version, base_image=self.base_image, packages=install_packages_str, rpm_qf_args=rpm_qf_args())) self.workflow.builder.set_df_path(df_path) # For a runtime, we want to make sure that the set of RPMs that is installed # into the filesystem is *exactly* the set that is listed in the runtime # profile. Requiring the full listed set of RPMs to be listed makes it # easier to catch unintentional changes in the package list that might break # applications depending on the runtime. It also simplifies the checking we # do for application flatpaks, since we can simply look at the runtime # modulemd to find out what packages are present in the runtime. # # For an application, we want to make sure that each RPM that is installed # into the filesystem is *either* an RPM that is part of the 'runtime' # profile of the base runtime, or from a module that was built with # flatpak-rpm-macros in the install root and, thus, prefix=/app. # # We achieve this by restricting the set of available packages in the dnf # configuration to just the ones that we want. # # The advantage of doing this upfront, rather than just checking after the # fact is that this makes sure that when a application is being installed, # we don't get a different package to satisfy a dependency than the one # in the runtime - e.g. aajohan-comfortaa-fonts to satisfy font(:lang=en) # because it's alphabetically first. if not source.runtime: runtime_module = source.runtime_module runtime_profile = runtime_module.mmd.peek_profiles()['runtime'] available_packages = sorted(runtime_profile.props.rpms.get()) for m in source.app_modules: # Strip off the '.rpm' suffix from the filename to get something # that DNF can parse. available_packages.extend(x[:-4] for x in m.rpms) else: base_module = source.compose.base_module runtime_profile = base_module.mmd.peek_profiles()['runtime'] available_packages = sorted(runtime_profile.props.rpms.get()) includepkgs_path = os.path.join(self.workflow.builder.df_dir, 'atomic-reactor-includepkgs') with open(includepkgs_path, 'w') as f: f.write('includepkgs = ' + ','.join(available_packages) + '\n') # Create the cleanup script cleanupscript = os.path.join(self.workflow.builder.df_dir, "cleanup.sh") with open(cleanupscript, 'w') as f: cleanup_commands = source.flatpak_yaml.get('cleanup-commands') if cleanup_commands is not None: f.write(cleanup_commands.rstrip()) f.write("\n") os.chmod(cleanupscript, 0o0755) # Add a yum-repository pointing to the compose repo_name = 'atomic-reactor-module-{name}-{stream}-{version}'.format( name=module_info.name, stream=module_info.stream, version=module_info.version) repo = { 'name': repo_name, 'baseurl': source.compose.repo_url, 'enabled': 1, 'gpgcheck': 0, } path = os.path.join(YUM_REPOS_DIR, repo_name + '.repo') self.workflow.files[path] = render_yum_repo(repo, escape_dollars=False) override_build_kwarg(self.workflow, 'module_compose_id', source.compose.compose_id)
def run(self): """ run the plugin """ source = self._load_source() set_flatpak_source_info(self.workflow, source) # Create the dockerfile if source.runtime: profile = 'runtime' else: profile = 'default' module_info = source.compose.base_module packages = ' '.join(module_info.mmd.profiles[profile].rpms) df_path = os.path.join(self.workflow.builder.df_dir, DOCKERFILE_FILENAME) with open(df_path, 'w') as fp: fp.write( DOCKERFILE_TEMPLATE.format(name=module_info.name, stream=module_info.stream, version=module_info.version, base_image=self.base_image, packages=packages, rpm_qf_args=rpm_qf_args())) self.workflow.builder.set_df_path(df_path) # Create the cleanup script cleanupscript = os.path.join(self.workflow.builder.df_dir, "cleanup.sh") with open(cleanupscript, 'w') as f: for line in source.flatpak_json.get('cleanup-commands', []): f.write(line) f.write("\n") os.chmod(cleanupscript, 0o0755) # Add a yum-repository pointing to the compose repo_name = 'atomic-reactor-module-{name}-{stream}-{version}'.format( name=module_info.name, stream=module_info.stream, version=module_info.version) repo = { 'name': repo_name, 'baseurl': source.compose.repo_url, 'enabled': 1, 'gpgcheck': 0, } path = os.path.join(YUM_REPOS_DIR, repo_name + '.repo') self.workflow.files[path] = render_yum_repo(repo, escape_dollars=False) override_build_kwarg(self.workflow, 'module_compose_id', source.compose.compose_id)
def run(self): """ run the plugin """ source = self._load_source() set_flatpak_source_info(self.workflow, source) builder = FlatpakBuilder(source, None, None) builder.precheck() # Create the dockerfile module_info = source.base_module # We need to enable all the modules other than the platform pseudo-module modules_str = ' '.join(builder.get_enable_modules()) install_packages_str = ' '.join(builder.get_install_packages()) df_path = os.path.join(self.workflow.builder.df_dir, DOCKERFILE_FILENAME) with open(df_path, 'w') as fp: fp.write( DOCKERFILE_TEMPLATE.format(name=module_info.name, stream=module_info.stream, version=module_info.version, base_image=self.base_image, modules=modules_str, packages=install_packages_str, rpm_qf_args=rpm_qf_args())) self.workflow.builder.set_df_path(df_path) includepkgs = builder.get_includepkgs() includepkgs_path = os.path.join(self.workflow.builder.df_dir, 'atomic-reactor-includepkgs') with open(includepkgs_path, 'w') as f: f.write('includepkgs = ' + ','.join(includepkgs) + '\n') # Create the cleanup script cleanupscript = os.path.join(self.workflow.builder.df_dir, "cleanup.sh") with open(cleanupscript, 'w') as f: f.write(builder.get_cleanup_script()) os.chmod(cleanupscript, 0o0755) # Add a yum-repository pointing to the compose repo_name = 'atomic-reactor-module-{name}-{stream}-{version}'.format( name=module_info.name, stream=module_info.stream, version=module_info.version) compose_info = get_compose_info(self.workflow) repo = { 'name': repo_name, 'baseurl': compose_info.repo_url, 'enabled': 1, 'gpgcheck': 0, } path = YumRepo(os.path.join(YUM_REPOS_DIR, repo_name)).dst_filename self.workflow.files[path] = render_yum_repo(repo, escape_dollars=False) override_build_kwarg(self.workflow, 'module_compose_id', compose_info.compose_id)