def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'devel' management jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'source') add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_source_build_files(config, args.rosdistro_name) build_file = build_files[args.source_build_name] jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) group_name = get_devel_view_name(args.rosdistro_name, args.source_build_name) configure_reconfigure_jobs_job(jenkins, group_name, args, config, build_file, dry_run=args.dry_run) configure_trigger_jobs_job(jenkins, group_name, build_file, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Run the 'release' job") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'source') add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) add_argument_groovy_script(parser) add_argument_dockerfile_dir(parser) add_argument_dry_run(parser) add_argument_package_names(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'uid': get_user_id(), }) create_dockerfile( 'release/release_create_reconfigure_task.Dockerfile.em', data, args.dockerfile_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Run the 'devel' job") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'source') add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) add_argument_groovy_script(parser) add_argument_dockerfile_dir(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'uid': get_user_id(), }) create_dockerfile( 'devel/devel_create_reconfigure_task.Dockerfile.em', data, args.dockerfile_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'upload_main' and 'upload_testing' jobs.") add_argument_config_url(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) template_name = 'release/trigger_upload_repo_job.xml.em' config = get_index(args.config_url) jenkins = connect(config.jenkins_url) for repo in ['main', 'testing']: job_name = 'upload_%s' % repo block_when_upstream_building = 'true' if repo == 'testing': block_when_upstream_building = 'false' job_config = expand_template( template_name, { 'block_when_upstream_building': block_when_upstream_building, 'repo': repo, 'upstream_job_names': get_upstream_job_names(config, repo), 'recipients': config.notify_emails }) configure_job(jenkins, job_name, job_config, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'doc_metadata' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'doc') add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_doc_build_files(config, args.rosdistro_name) build_file = build_files[args.doc_build_name] if build_file.documentation_type != DOC_TYPE_MANIFEST: print(("The doc build file '%s' has the wrong documentation type to " + "be used with this script") % args.doc_build_name, file=sys.stderr) return 1 return configure_doc_metadata_job(args.config_url, args.rosdistro_name, args.doc_build_name, config=config, build_file=build_file, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'doc' management jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'doc') add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_doc_build_files(config, args.rosdistro_name) build_file = build_files[args.doc_build_name] if build_file.documentation_type != DOC_TYPE_ROSDOC: print(("The doc build file '%s' has the wrong documentation type to " + "be used with this script") % args.doc_build_name, file=sys.stderr) return 1 jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) group_name = get_doc_view_name(args.rosdistro_name, args.doc_build_name) configure_reconfigure_jobs_job(jenkins, group_name, args, config, build_file, dry_run=args.dry_run) configure_trigger_jobs_job(jenkins, group_name, build_file, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'doc' management jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'doc') add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_doc_build_files(config, args.rosdistro_name) build_file = build_files[args.doc_build_name] if build_file.documentation_type != DOC_TYPE_ROSDOC: print(("The doc build file '%s' has the wrong documentation type to " + "be used with this script") % args.doc_build_name, file=sys.stderr) return 1 jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) group_name = get_doc_view_name( args.rosdistro_name, args.doc_build_name) configure_reconfigure_jobs_job( jenkins, group_name, args, config, build_file, dry_run=args.dry_run) configure_trigger_jobs_job( jenkins, group_name, build_file, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'release' management jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_release_build_files(config, args.rosdistro_name) build_file = build_files[args.release_build_name] package_formats = set( package_format_mapping[os_name] for os_name in build_file.targets.keys()) assert len(package_formats) == 1 package_format = package_formats.pop() group_name = get_release_job_prefix( args.rosdistro_name, args.release_build_name) reconfigure_jobs_job_config = get_reconfigure_jobs_job_config( args, config, build_file) trigger_jobs_job_config = get_trigger_jobs_job_config( args, config, build_file) trigger_missed_jobs_job_config = get_trigger_missed_jobs_job_config( args, config, build_file) import_upstream_job_config = get_import_upstream_job_config( args, config, build_file, package_format) trigger_broken_with_non_broken_upstream_job_config = \ _get_trigger_broken_with_non_broken_upstream_job_config( args.rosdistro_name, args.release_build_name, build_file) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) job_name = '%s_%s' % (group_name, 'reconfigure-jobs') configure_job( jenkins, job_name, reconfigure_jobs_job_config, dry_run=args.dry_run) job_name = '%s_%s' % (group_name, 'trigger-jobs') configure_job( jenkins, job_name, trigger_jobs_job_config, dry_run=args.dry_run) job_name = '%s_%s' % (group_name, 'trigger-missed-jobs') configure_job( jenkins, job_name, trigger_missed_jobs_job_config, dry_run=args.dry_run) job_name = 'import_upstream%s' % ('' if package_format == 'deb' else '_' + package_format) configure_job( jenkins, job_name, import_upstream_job_config, dry_run=args.dry_run) job_name = '%s_%s' % \ (group_name, 'trigger-broken-with-non-broken-upstream') configure_job( jenkins, job_name, trigger_broken_with_non_broken_upstream_job_config, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description='Mirror a remote RPM repository to a pulp distribution') add_argument_dry_run(parser) add_argument_pulp_base_url(parser) add_argument_pulp_password(parser) add_argument_pulp_task_timeout(parser) add_argument_pulp_username(parser) parser.add_argument('--remote-source-expression', required=True, help='Expression to match for pulp remote names') parser.add_argument( '--distribution-dest-expression', required=True, help='Expression to transform matching source remote names ' 'into destination distribution names') args = parser.parse_args(argv) pulp_client = PulpRpmClient(args.pulp_base_url, args.pulp_username, args.pulp_password, task_timeout=args.pulp_task_timeout) dists_to_sync = [] with Scope('SUBSECTION', 'enumerating remotes and distributions to sync'): remote_expression = re.compile(args.remote_source_expression) distributions = { dist.name for dist in pulp_client.enumerate_distributions() } for remote in pulp_client.enumerate_remotes(): (dist_dest_pattern, matched_source) = remote_expression.subn( args.distribution_dest_expression, remote.name) if matched_source: dist_dest_matches = [ dist for dist in distributions if re.match(dist_dest_pattern, dist) ] if not dist_dest_matches: print("No distributions match destination pattern '%s'" % dist_dest_pattern, file=sys.stderr) return 1 dists_to_sync.extend((remote.name, dist_dest) for dist_dest in dist_dest_matches) dists_to_sync = sorted(set(dists_to_sync)) print('Syncing %d distributions:' % len(dists_to_sync)) for remote_name_and_dist_dest in dists_to_sync: print('- %s => %s' % remote_name_and_dist_dest) with Scope('SUBSECTION', 'synchronizing remotes and publishing mirrors'): for remote_name, dist_name in dists_to_sync: pulp_client.mirror_remote_to_distribution(remote_name, dist_name, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'release' management jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_release_build_files(config, args.rosdistro_name) build_file = build_files[args.release_build_name] group_name = get_release_job_prefix( args.rosdistro_name, args.release_build_name) reconfigure_jobs_job_config = get_reconfigure_jobs_job_config( args, config, build_file) trigger_jobs_job_config = get_trigger_jobs_job_config( args, config, build_file) trigger_missed_jobs_job_config = get_trigger_missed_jobs_job_config( args, config, build_file) import_upstream_job_config = get_import_upstream_job_config( args, config, build_file) trigger_broken_with_non_broken_upstream_job_config = \ _get_trigger_broken_with_non_broken_upstream_job_config( args.rosdistro_name, args.release_build_name, build_file) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) job_name = '%s_%s' % (group_name, 'reconfigure-jobs') configure_job( jenkins, job_name, reconfigure_jobs_job_config, dry_run=args.dry_run) job_name = '%s_%s' % (group_name, 'trigger-jobs') configure_job( jenkins, job_name, trigger_jobs_job_config, dry_run=args.dry_run) job_name = '%s_%s' % (group_name, 'trigger-missed-jobs') configure_job( jenkins, job_name, trigger_missed_jobs_job_config, dry_run=args.dry_run) job_name = 'import_upstream' configure_job( jenkins, job_name, import_upstream_job_config, dry_run=args.dry_run) job_name = '%s_%s' % \ (group_name, 'trigger-broken-with-non-broken-upstream') configure_job( jenkins, job_name, trigger_broken_with_non_broken_upstream_job_config, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'doc' jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'doc') add_argument_groovy_script(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) return configure_doc_jobs( args.config_url, args.rosdistro_name, args.doc_build_name, groovy_script=args.groovy_script, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'release' jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_groovy_script(parser) add_argument_dry_run(parser) add_argument_package_names(parser) args = parser.parse_args(argv) return configure_release_jobs( args.config_url, args.rosdistro_name, args.release_build_name, groovy_script=args.groovy_script, dry_run=args.dry_run, whitelist_package_names=args.package_names)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser(description="Generate the 'dashboard' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) job_config = get_job_config(args, config) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) job_name = "%s_rosdistro-cache" % args.rosdistro_name configure_job(jenkins, job_name, job_config, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'check_agents' job on Jenkins") add_argument_config_url(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) job_config = get_job_config(config.notify_emails) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) job_name = 'check_agents' configure_job(jenkins, job_name, job_config, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'CI' jobs on Jenkins") # Positional add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'ci', nargs='*') add_argument_dry_run(parser) add_argument_groovy_script(parser) args = parser.parse_args(argv) return configure_ci_jobs( args.config_url, args.rosdistro_name, ci_build_names=args.ci_build_name, groovy_script=args.groovy_script, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'release' jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_groovy_script(parser) add_argument_dry_run(parser) add_argument_package_names(parser) args = parser.parse_args(argv) print("do configure_release_jobs", file=sys.stderr) return configure_release_jobs(args.config_url, args.rosdistro_name, args.release_build_name, groovy_script=args.groovy_script, dry_run=args.dry_run, whitelist_package_names=args.package_names)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'dashboard' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) job_config = get_job_config(args, config) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) job_name = '%s_rosdistro-cache' % args.rosdistro_name configure_job(jenkins, job_name, job_config, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'doc' jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'doc') add_argument_groovy_script(parser) add_argument_dry_run(parser) add_argument_repository_names(parser) args = parser.parse_args(argv) return configure_doc_jobs(args.config_url, args.rosdistro_name, args.doc_build_name, groovy_script=args.groovy_script, dry_run=args.dry_run, whitelist_repository_names=args.repository_names)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'repos_status_page' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) job_config = get_job_config(args, config) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) prefix = get_release_job_prefix(args.rosdistro_name) job_name = '%s_repos-status-page' % prefix configure_job(jenkins, job_name, job_config, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'devel' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'source') add_argument_repository_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) configure_devel_job( args.config_url, args.rosdistro_name, args.source_build_name, args.repository_name, args.os_name, args.os_code_name, args.arch, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'CI' management jobs on Jenkins") # Positional add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_ci_build_files(config, args.rosdistro_name) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) group_name = get_ci_view_name(args.rosdistro_name) configure_reconfigure_jobs_job( jenkins, group_name, args, config, build_files, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'release' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) configure_release_job(args.config_url, args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'doc_independent' job on Jenkins") add_argument_config_url(parser) add_argument_build_name(parser, 'doc') add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_global_doc_build_files(config) build_file = build_files[args.doc_build_name] if build_file.documentation_type != DOC_TYPE_MAKE: print(("The doc build file '%s' has the wrong documentation type to " + "be used with this script") % args.doc_build_name, file=sys.stderr) return 1 return configure_doc_independent_job( args.config_url, args.doc_build_name, config=config, build_file=build_file, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description='Import packages into a repository and publish it') parser.add_argument( 'package_resources', nargs='*', metavar="PULP_HREF", help='Identifiers for packages which should be imported') add_argument_dry_run(parser) add_argument_invalidate(parser) parser.add_argument( '--invalidate-expression', default=None, help='Any existing package names matching this expression will be removed') add_argument_pulp_base_url(parser) add_argument_pulp_distribution_name(parser) add_argument_pulp_password(parser) add_argument_pulp_task_timeout(parser) add_argument_pulp_username(parser) args = parser.parse_args(argv) pulp_client = PulpRpmClient( args.pulp_base_url, args.pulp_username, args.pulp_password, task_timeout=args.pulp_task_timeout) with Scope('SUBSECTION', 'performing repository transaction'): pkgs_added, pkgs_removed = pulp_client.import_and_invalidate( args.pulp_distribution_name, args.package_resources, args.invalidate_expression, args.invalidate, dry_run=args.dry_run) with Scope('SUBSECTION', 'enumerating results'): if not pkgs_added: print('Not importing any new packages') for pkg in pkgs_added: print('Importing package: %s-%s.%s' % (pkg.name, format_pkg_ver(pkg), pkg.arch)) if not pkgs_removed: print('Not removing any existing packages') for pkg in pkgs_removed: print('Removing package: %s-%s.%s' % (pkg.name, format_pkg_ver(pkg), pkg.arch))
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'devel' management jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'source') add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_source_build_files(config, args.rosdistro_name) build_file = build_files[args.source_build_name] jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) group_name = get_devel_view_name( args.rosdistro_name, args.source_build_name) configure_reconfigure_jobs_job( jenkins, group_name, args, config, build_file, dry_run=args.dry_run) configure_trigger_jobs_job( jenkins, group_name, build_file, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'CI' job on Jenkins") # Positional add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'ci') add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) configure_ci_job(args.config_url, args.rosdistro_name, args.ci_build_name, args.os_name, args.os_code_name, args.arch, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'CI' management jobs on Jenkins") # Positional add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_ci_build_files(config, args.rosdistro_name) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) group_name = get_ci_view_name(args.rosdistro_name) configure_reconfigure_jobs_job(jenkins, group_name, args, config, build_files, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'upload_main' and 'upload_testing' jobs.") add_argument_config_url(parser) add_argument_dry_run(parser) args = parser.parse_args(argv) template_name = 'release/trigger_upload_repo_job.xml.em' config = get_index(args.config_url) jenkins = connect(config.jenkins_url) for repo in ['main', 'testing']: job_name = 'upload_%s' % repo block_when_upstream_building = 'true' if repo == 'testing': block_when_upstream_building = 'false' job_config = expand_template(template_name, { 'block_when_upstream_building': block_when_upstream_building, 'repo': repo, 'upstream_job_names': get_upstream_job_names(config, repo), 'recipients': config.notify_emails}) configure_job(jenkins, job_name, job_config, dry_run=args.dry_run)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description='Sync packages between pulp distributions') add_argument_dry_run(parser) add_argument_invalidate(parser) parser.add_argument( '--invalidate-expression', default=None, help='Any existing package names matching this expression will be removed') add_argument_pulp_base_url(parser) add_argument_pulp_password(parser) add_argument_pulp_task_timeout(parser) add_argument_pulp_username(parser) parser.add_argument( '--package-name-expression', default='.*', help='Expression to match against packages in the repositories') parser.add_argument( '--distribution-source-expression', required=True, help='Expression to match for source distribution names') parser.add_argument( '--distribution-dest-expression', required=True, help='Expression to transform matching source distribution names into destination names') args = parser.parse_args(argv) pulp_client = PulpRpmClient( args.pulp_base_url, args.pulp_username, args.pulp_password, task_timeout=args.pulp_task_timeout) dists_to_sync = [] with Scope('SUBSECTION', 'enumerating distributions to sync'): dist_expression = re.compile(args.distribution_source_expression) distributions = {dist.name for dist in pulp_client.enumerate_distributions()} for dist_source in sorted(distributions): (dist_dest_pattern, matched_source) = dist_expression.subn( args.distribution_dest_expression, dist_source) if matched_source: dist_dest_matches = [ dist for dist in distributions if re.match(dist_dest_pattern, dist)] if not dist_dest_matches: print( "No distributions match destination pattern '%s'" % dist_dest_pattern, file=sys.stderr) return 1 dists_to_sync.extend((dist_source, dist_dest) for dist_dest in dist_dest_matches) dists_to_sync = sorted(set(dists_to_sync)) print('Syncing %d distributions:' % len(dists_to_sync)) for dist_source_dest in dists_to_sync: print('- %s => %s' % dist_source_dest) packages = {} with Scope('SUBSECTION', 'enumerating packages to sync'): package_expression = re.compile(args.package_name_expression) for dist_source, _ in dists_to_sync: packages[dist_source] = { pkg.pulp_href: pkg for pkg in pulp_client.enumerate_pkgs_in_distribution_name(dist_source) if package_expression.match(pkg.name)} print('Matched %d packages from source distributions:' % ( sum([len(pkgs) for pkgs in packages.values()]))) for dist_source, _ in dists_to_sync: print('- %s: %d matching packages' % (dist_source, len(packages[dist_source]))) with Scope('SUBSECTION', 'invalidation and committing changes'): for dist_source, dist_dest in dists_to_sync: packages_to_sync = packages[dist_source] if not packages_to_sync: print('Skipping sync from %s to %s' % (dist_source, dist_dest)) continue print('Syncing %d packages from %s to %s...%s' % ( len(packages_to_sync), dist_source, dist_dest, ' (dry run)' if args.dry_run else '')) new_pkgs, pkgs_removed = pulp_client.import_and_invalidate( dist_dest, packages_to_sync, args.invalidate_expression, args.invalidate, package_cache=packages_to_sync, dry_run=args.dry_run) print('- Added %d packages%s' % ( len(new_pkgs), ' (dry run)' if args.dry_run else '')) for pkg in sorted(new_pkgs, key=lambda pkg: pkg.name): print(' - %s-%s' % (pkg.name, format_pkg_ver(pkg))) print('- Removed %d packages%s' % ( len(pkgs_removed), ' (dry run)' if args.dry_run else '')) for pkg in sorted(pkgs_removed, key=lambda pkg: pkg.name): print(' - %s-%s' % (pkg.name, format_pkg_ver(pkg)))
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'release' management jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_dry_run(parser) args = parser.parse_args(argv) config = get_index(args.config_url) build_files = get_release_build_files(config, args.rosdistro_name) build_file = build_files[args.release_build_name] group_name = get_release_job_prefix(args.rosdistro_name, args.release_build_name) reconfigure_jobs_job_config = get_reconfigure_jobs_job_config( args, config, build_file) trigger_jobs_job_config = get_trigger_jobs_job_config( args, config, build_file) trigger_missed_jobs_job_config = get_trigger_missed_jobs_job_config( args, config, build_file) import_upstream_job_config = get_import_upstream_job_config( args, config, build_file) trigger_broken_with_non_broken_upstream_job_config = \ _get_trigger_broken_with_non_broken_upstream_job_config( args.rosdistro_name, args.release_build_name, build_file) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) job_name = '%s_%s' % (group_name, 'reconfigure-jobs') configure_job(jenkins, job_name, reconfigure_jobs_job_config, dry_run=args.dry_run) job_name = '%s_%s' % (group_name, 'trigger-jobs') configure_job(jenkins, job_name, trigger_jobs_job_config, dry_run=args.dry_run) job_name = '%s_%s' % (group_name, 'trigger-missed-jobs') configure_job(jenkins, job_name, trigger_missed_jobs_job_config, dry_run=args.dry_run) job_name = 'import_upstream' configure_job(jenkins, job_name, import_upstream_job_config, dry_run=args.dry_run) job_name = '%s_%s' % \ (group_name, 'trigger-broken-with-non-broken-upstream') configure_job(jenkins, job_name, trigger_broken_with_non_broken_upstream_job_config, dry_run=args.dry_run)