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') 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] 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) import_upstream_job_config = get_import_upstream_job_config( args, config, build_file) jenkins = connect(config.jenkins_url) view = configure_view(jenkins, JENKINS_MANAGEMENT_VIEW) group_name = get_release_view_name( args.rosdistro_name, args.release_build_name) job_name = '%s_%s' % (group_name, 'reconfigure-jobs') configure_job(jenkins, job_name, reconfigure_jobs_job_config, view=view) job_name = '%s_%s' % (group_name, 'trigger-jobs') configure_job(jenkins, job_name, trigger_jobs_job_config, view=view) job_name = 'import_upstream' configure_job(jenkins, job_name, import_upstream_job_config, view=view)
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') 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) group_name = get_doc_view_name( args.rosdistro_name, args.doc_build_name) configure_reconfigure_jobs_job( jenkins, group_name, args, config, build_file) configure_trigger_jobs_job(jenkins, group_name, build_file)
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 '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 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 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="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 'check_slaves' job on Jenkins") add_argument_config_url(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) job_name = 'check_slaves' configure_job(jenkins, job_name, job_config)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'dashboard' job on Jenkins") add_argument_config_url(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) view = configure_view(jenkins, JENKINS_MANAGEMENT_VIEW) job_name = 'dashboard' configure_job(jenkins, job_name, job_config, view=view)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'bloom_status' 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(args, config) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) job_name = 'bloom_status' configure_job(jenkins, job_name, job_config, dry_run=args.dry_run)
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) 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) job_name = '%s_rosdistro-cache' % args.rosdistro_name configure_job(jenkins, job_name, job_config)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'failing_jobs' 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.rosdistro_name) jenkins = connect(config.jenkins_url) configure_management_view(jenkins, dry_run=args.dry_run) job_name = '%s_failing-jobs' % 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 'repos_status_page' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(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) prefix = get_release_job_prefix(args.rosdistro_name) job_name = '%s_repos-status-page' % prefix configure_job(jenkins, job_name, job_config)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'release_status_page' job on Jenkins") add_argument_config_url(parser) add_argument_debian_repository_urls(parser) add_argument_os_code_name_and_arch_tuples(parser) add_argument_output_name(parser) args = parser.parse_args(argv) config = get_index(args.config_url) job_config = get_job_config(args, config) jenkins = connect(config.jenkins_url) view = configure_view(jenkins, JENKINS_MANAGEMENT_VIEW) job_name = '%s_repos-status-page' % args.output_name configure_job(jenkins, job_name, job_config, view=view)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'release_status_page' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') args = parser.parse_args(argv) config = get_index(args.config_url) job_config = get_job_config(args, config) jenkins = connect(config.jenkins_url) view = configure_view(jenkins, JENKINS_MANAGEMENT_VIEW) job_name = '%s_%s_release-status-page' % \ (args.rosdistro_name, args.release_build_name) configure_job(jenkins, job_name, job_config, view=view)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate the 'blocked_source_entries_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_blocked-source-entries-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 the 'release' management jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') 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) 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) job_name = '%s_%s' % (group_name, 'reconfigure-jobs') configure_job(jenkins, job_name, reconfigure_jobs_job_config) job_name = '%s_%s' % (group_name, 'trigger-jobs') configure_job(jenkins, job_name, trigger_jobs_job_config) job_name = 'import_upstream' configure_job(jenkins, job_name, import_upstream_job_config) 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)
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') 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)
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 'devel' management jobs on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'source') 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) group_name = get_devel_view_name( args.rosdistro_name, args.source_build_name) configure_reconfigure_jobs_job( jenkins, group_name, args, config, build_file) configure_trigger_jobs_job(jenkins, group_name, build_file)
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 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 all jobs on Jenkins') add_argument_config_url(parser) parser.add_argument( '--ros-distro-names', nargs='*', metavar='ROS_DISTRO_NAME', default=[], help='The list of ROS distribution names if not generating all') parser.add_argument( '--skip-rosdistro-cache-job', action='store_true', help='Skip generating the rosdistro-cache jobs') args = parser.parse_args(argv) config = get_index(args.config_url) ros_distro_names = config.distributions.keys() invalid_ros_distro_name = [ n for n in args.ros_distro_names if n not in ros_distro_names] if invalid_ros_distro_name: parser.error( 'The following ROS distribution names are not part of the ' + 'buildfarm index: ' + ', '.join(sorted(invalid_ros_distro_name))) # try to connect to Jenkins master connect(config.jenkins_url) generate_check_slaves_job(args.config_url) if not args.ros_distro_names: generate_dashboard_job(args.config_url) for doc_build_name in sorted(config.doc_builds.keys()): generate_doc_independent_job(args.config_url, doc_build_name) selected_ros_distro_names = [ n for n in ros_distro_names if not args.ros_distro_names or n in args.ros_distro_names] for ros_distro_name in sorted(selected_ros_distro_names): print(ros_distro_name) if not args.skip_rosdistro_cache_job: generate_rosdistro_cache_job(args.config_url, ros_distro_name) release_build_files = get_release_build_files(config, ros_distro_name) for release_build_name in release_build_files.keys(): generate_release_status_page_job( args.config_url, ros_distro_name, release_build_name) generate_release_maintenance_jobs( args.config_url, ros_distro_name, release_build_name) source_build_files = get_source_build_files(config, ros_distro_name) for source_build_name in source_build_files.keys(): generate_devel_maintenance_jobs( args.config_url, ros_distro_name, source_build_name) doc_build_files = get_doc_build_files(config, ros_distro_name) for doc_build_name, doc_build_file in doc_build_files.items(): if doc_build_file.documentation_type == DOC_TYPE_ROSDOC: generate_doc_maintenance_jobs( args.config_url, ros_distro_name, doc_build_name) elif doc_build_file.documentation_type == DOC_TYPE_MANIFEST: generate_doc_metadata_job( args.config_url, ros_distro_name, doc_build_name) else: assert False, ("Unknown documentation type '%s' in doc " + "build file '%s'") % \ (doc_build_file.documentation_type, doc_build_name) generate_repos_status_page_jobs( args.config_url, ros_distro_name)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description='Generate all jobs on Jenkins') add_argument_config_url(parser) parser.add_argument( '--ros-distro-names', nargs='*', metavar='ROS_DISTRO_NAME', default=[], help='The list of ROS distribution names if not generating all') parser.add_argument('--skip-rosdistro-cache-job', action='store_true', help='Skip generating the rosdistro-cache jobs') parser.add_argument( '--commit', action='store_true', help='Apply the changes to Jenkins instead of only showing them') args = parser.parse_args(argv) if args.commit: print('The following changes will be applied to the Jenkins server.') else: print('This is a dry run. The Jenkins configuration is not changed.') print('') config = get_index(args.config_url) ros_distro_names = sorted(config.distributions.keys()) invalid_ros_distro_name = [ n for n in args.ros_distro_names if n not in ros_distro_names ] if invalid_ros_distro_name: parser.error( 'The following ROS distribution names are not part of the ' + 'buildfarm index: ' + ', '.join(sorted(invalid_ros_distro_name))) # try to connect to Jenkins master jenkins = connect(config.jenkins_url) configure_view(jenkins, 'Queue', filter_queue=False, dry_run=not args.commit) generate_check_agents_job(args.config_url, dry_run=not args.commit) if not args.ros_distro_names: generate_dashboard_job(args.config_url, dry_run=not args.commit) for doc_build_name in sorted(config.doc_builds.keys()): generate_doc_independent_job(args.config_url, doc_build_name, dry_run=not args.commit) selected_ros_distro_names = [ n for n in ros_distro_names if not args.ros_distro_names or n in args.ros_distro_names ] for ros_distro_name in selected_ros_distro_names: print(ros_distro_name) if not args.skip_rosdistro_cache_job: generate_rosdistro_cache_job(args.config_url, ros_distro_name, dry_run=not args.commit) generate_failing_jobs_job(args.config_url, ros_distro_name, dry_run=not args.commit) release_build_files = get_release_build_files(config, ros_distro_name) for release_build_name in release_build_files.keys(): generate_release_status_page_job(args.config_url, ros_distro_name, release_build_name, dry_run=not args.commit) generate_release_maintenance_jobs(args.config_url, ros_distro_name, release_build_name, dry_run=not args.commit) source_build_files = get_source_build_files(config, ros_distro_name) for source_build_name in source_build_files.keys(): generate_devel_maintenance_jobs(args.config_url, ros_distro_name, source_build_name, dry_run=not args.commit) doc_build_files = get_doc_build_files(config, ros_distro_name) for doc_build_name, doc_build_file in doc_build_files.items(): if doc_build_file.documentation_type == DOC_TYPE_ROSDOC: generate_doc_maintenance_jobs(args.config_url, ros_distro_name, doc_build_name, dry_run=not args.commit) elif doc_build_file.documentation_type == DOC_TYPE_MANIFEST: generate_doc_metadata_job(args.config_url, ros_distro_name, doc_build_name, dry_run=not args.commit) else: assert False, ("Unknown documentation type '%s' in doc " + "build file '%s'") % \ (doc_build_file.documentation_type, doc_build_name) generate_repos_status_page_jobs(args.config_url, ros_distro_name, dry_run=not args.commit) index = ros_distro_names.index(ros_distro_name) if index > 0: # generate compare pages for this rosdistro against all older ones generate_release_compare_page_job(args.config_url, ros_distro_name, ros_distro_names[:index], dry_run=not args.commit) generate_blocked_releases_page_job(args.config_url, ros_distro_name, dry_run=not args.commit)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description='Generate all jobs on Jenkins') add_argument_config_url(parser) parser.add_argument( '--ros-distro-names', nargs='*', metavar='ROS_DISTRO_NAME', default=[], help='The list of ROS distribution names if not generating all') parser.add_argument( '--skip-rosdistro-cache-job', action='store_true', help='Skip generating the rosdistro-cache jobs') parser.add_argument( '--commit', action='store_true', help='Apply the changes to Jenkins instead of only showing them') args = parser.parse_args(argv) if args.commit: print('The following changes will be applied to the Jenkins server.') else: print('This is a dry run. The Jenkins configuration is not changed.') print('') config = get_index(args.config_url) ros_distro_names = sorted(config.distributions.keys()) invalid_ros_distro_name = [ n for n in args.ros_distro_names if n not in ros_distro_names] if invalid_ros_distro_name: parser.error( 'The following ROS distribution names are not part of the ' + 'buildfarm index: ' + ', '.join(sorted(invalid_ros_distro_name))) # try to connect to Jenkins master jenkins = connect(config.jenkins_url) configure_view( jenkins, 'Queue', filter_queue=False, dry_run=not args.commit) generate_check_slaves_job(args.config_url, dry_run=not args.commit) if not args.ros_distro_names: generate_dashboard_job(args.config_url, dry_run=not args.commit) for doc_build_name in sorted(config.doc_builds.keys()): generate_doc_independent_job( args.config_url, doc_build_name, dry_run=not args.commit) selected_ros_distro_names = [ n for n in ros_distro_names if not args.ros_distro_names or n in args.ros_distro_names] for ros_distro_name in selected_ros_distro_names: print(ros_distro_name) if not args.skip_rosdistro_cache_job: generate_rosdistro_cache_job( args.config_url, ros_distro_name, dry_run=not args.commit) release_build_files = get_release_build_files(config, ros_distro_name) for release_build_name in release_build_files.keys(): generate_release_status_page_job( args.config_url, ros_distro_name, release_build_name, dry_run=not args.commit) generate_release_maintenance_jobs( args.config_url, ros_distro_name, release_build_name, dry_run=not args.commit) source_build_files = get_source_build_files(config, ros_distro_name) for source_build_name in source_build_files.keys(): generate_devel_maintenance_jobs( args.config_url, ros_distro_name, source_build_name, dry_run=not args.commit) doc_build_files = get_doc_build_files(config, ros_distro_name) for doc_build_name, doc_build_file in doc_build_files.items(): if doc_build_file.documentation_type == DOC_TYPE_ROSDOC: generate_doc_maintenance_jobs( args.config_url, ros_distro_name, doc_build_name, dry_run=not args.commit) elif doc_build_file.documentation_type == DOC_TYPE_MANIFEST: generate_doc_metadata_job( args.config_url, ros_distro_name, doc_build_name, dry_run=not args.commit) else: assert False, ("Unknown documentation type '%s' in doc " + "build file '%s'") % \ (doc_build_file.documentation_type, doc_build_name) generate_repos_status_page_jobs( args.config_url, ros_distro_name, dry_run=not args.commit) index = ros_distro_names.index(ros_distro_name) if index > 0: # Generate comparison pages for this rosdistro against all older ones. generate_release_compare_page_job( args.config_url, ros_distro_name, ros_distro_names[:index], dry_run=not args.commit)