From 0e3d60657c3eb553b8813cbd5674d12e0705815c Mon Sep 17 00:00:00 2001 From: clime Date: Sep 13 2018 12:05:25 +0000 Subject: Merge #313 `[rpmbuild] add --dump-configs option` --- diff --git a/rpmbuild/copr_rpmbuild/builders/mock.py b/rpmbuild/copr_rpmbuild/builders/mock.py index 231c210..7d8294a 100644 --- a/rpmbuild/copr_rpmbuild/builders/mock.py +++ b/rpmbuild/copr_rpmbuild/builders/mock.py @@ -51,18 +51,11 @@ class MockBuilder(object): self.resultdir = resultdir self.config = config self.logfile = self.config.get("main", "logfile") - log.info(self.__dict__) def run(self): - configdir = os.path.join(self.resultdir, "configs") - os.makedirs(configdir) - shutil.copy2("/etc/mock/site-defaults.cfg", configdir) - shutil.copy2("/etc/mock/{0}.cfg".format(self.chroot), configdir) - cfg = self.render_config_template() - with open(os.path.join(configdir, "child.cfg"), "w") as child: - child.write(cfg) - open(self.logfile, 'w').close() # truncate logfile + configdir = os.path.join(self.resultdir, "configs") + self.prepare_configs(configdir) spec = locate_spec(self.sourcedir) shutil.copy(spec, self.resultdir) @@ -71,6 +64,20 @@ class MockBuilder(object): srpm = locate_srpm(self.resultdir) self.produce_rpm(srpm, configdir, self.resultdir) + def prepare_configs(self, configdir): + site_config_path = os.path.join(configdir, "site-defaults.cfg") + mock_config_path = os.path.join(configdir, "{0}.cfg".format(self.chroot)) + child_config_path = os.path.join(configdir, "child.cfg") + + os.makedirs(configdir, exist_ok=True) + shutil.copy2("/etc/mock/site-defaults.cfg", site_config_path) + shutil.copy2("/etc/mock/{0}.cfg".format(self.chroot), mock_config_path) + cfg = self.render_config_template() + with open(child_config_path, "w") as child: + child.write(cfg) + + return [child_config_path, mock_config_path, site_config_path] + def render_config_template(self): jinja_env = Environment(loader=FileSystemLoader(CONF_DIRS)) template = jinja_env.get_template("mock.cfg.j2") diff --git a/rpmbuild/main.py b/rpmbuild/main.py index b4bce6e..a45f7cc 100755 --- a/rpmbuild/main.py +++ b/rpmbuild/main.py @@ -70,6 +70,7 @@ def get_parser(): product = shared_parser.add_mutually_exclusive_group() product.add_argument("--rpm", action="store_true", help="Build rpms. This is the default action.") product.add_argument("--srpm", action="store_true", help="Build srpm.") + product.add_argument("--dump-configs", action="store_true", help="Only dump configs, without actual building.") #product.add_argument("--tgz", action="store_true", help="Make tar.gz with build sources, spec and patches.") base_parser = argparse.ArgumentParser(description="COPR building tool.", parents=[shared_parser]) @@ -132,7 +133,14 @@ def main(): try: fcntl.lockf(lockfd, fcntl.LOCK_EX, 1) init(args, config) - action = build_srpm if args.srpm else build_rpm + + if args.dump_configs: + action = dump_configs + elif args.srpm: + action = build_srpm + else: + action = build_rpm + action(args, config) except (RuntimeError, OSError): log.exception("") @@ -152,22 +160,6 @@ def init(args, config): os.makedirs(resultdir) -def task_merge_args(task, args): - if args.chroot: - task['chroot'] = args.chroot - - if args.submode == 'scm': - task["source_type"] = SourceType.SCM - task["source_json"].update({ - 'clone_url': args.clone_url, - 'committish': args.committish, - 'subdirectory': args.subdirectory, - 'spec': args.spec, - 'type': args.type, - 'srpm_build_method': args.srpm_build_method, - }) - - def produce_srpm(task, config, resultdir): """ create tmpdir to allow --private-users=pick with make_srpm @@ -183,21 +175,42 @@ def produce_srpm(task, config, resultdir): shutil.copy(os.path.join(tmpdir_abspath, item), resultdir) -def build_srpm(args, config): +def get_task(args, config, task_url_path=None): + task = {'source_type': None, 'source_json': {}} + + if task_url_path: + task.update(get_vanilla_task(task_url_path, config)) + if args.chroot: - raise RuntimeError("--chroot option is not supported with --srpm") + task['chroot'] = args.chroot - resultdir = config.get("main", "resultdir") + if args.submode == 'scm': + task['source_type'] = SourceType.SCM + task['source_json'].update({ + 'clone_url': args.clone_url, + 'committish': args.committish, + 'subdirectory': args.subdirectory, + 'spec': args.spec, + 'type': args.type, + 'srpm_build_method': args.srpm_build_method, + }) - task = {'source_type': None, 'source_json': {}} - if args.build_id: - task.update(get_task("/backend/get-srpm-build-task/", args.build_id, config)) + return task - task_merge_args(task, args) +def log_task(task): pp = pprint.PrettyPrinter(width=120) log.info("Task:\n"+pp.pformat(task)+'\n') + +def build_srpm(args, config): + if args.chroot: + raise RuntimeError("--chroot option is not supported with --srpm") + + task = get_task(args, config, urljoin("/backend/get-srpm-build-task/", args.build_id)) + log_task(task) + + resultdir = config.get("main", "resultdir") produce_srpm(task, config, resultdir) log.info("Output: {}".format( @@ -211,15 +224,9 @@ def build_rpm(args, config): if not args.chroot: raise RuntimeError("Missing --chroot parameter") - task = {'source_type': None, 'source_json': {}} - if args.build_id: - task_id = "-".join([args.build_id, args.chroot]) - task.update(get_task("/backend/get-build-task/", task_id, config)) - - task_merge_args(task, args) - - pp = pprint.PrettyPrinter(width=120) - log.info("Task:\n"+pp.pformat(task)+'\n') + task_id = "-".join([args.build_id, args.chroot]) + task = get_task(args, config, urljoin("/backend/get-build-task/", task_id)) + log_task(task) sourcedir = tempfile.mkdtemp() scm_provider = providers.ScmProvider(task["source_json"], sourcedir, config) @@ -238,9 +245,26 @@ def build_rpm(args, config): shutil.rmtree(sourcedir) -def get_task(endpoint, id, config): +def dump_configs(args, config): + if not args.chroot: + raise RuntimeError("Missing --chroot parameter") + + task_id = "-".join([args.build_id, args.chroot]) + task = get_task(args, config, urljoin("/backend/get-build-task/", task_id)) + log_task(task) + + resultdir = config.get("main", "resultdir") + builder = MockBuilder(task, None, resultdir, config) + + configdir = os.path.join(resultdir, "configs") + config_paths = builder.prepare_configs(configdir) + for config_path in config_paths: + log.info("Wrote: "+config_path) + + +def get_vanilla_task(task_url_path, config): try: - url = urljoin(urljoin(config.get("main", "frontend_url"), endpoint), id) + url = urljoin(config.get("main", "frontend_url"), task_url_path) response = requests.get(url) task = response.json() task["source_json"] = json.loads(task["source_json"])