def configure_release_views( jenkins, rosdistro_name, release_build_name, targets): views = [] # generate view aggregating all binary views if len([t for t in targets if t[2] != 'source']) > 1: view_prefix = get_release_binary_view_prefix( rosdistro_name, release_build_name) views.append(configure_view( jenkins, view_prefix, include_regex='%s_.+__.+' % view_prefix, template_name='dashboard_view_all_jobs.xml.em')) for os_name, os_code_name, arch in targets: view_name = get_release_view_name( rosdistro_name, release_build_name, os_name, os_code_name, arch) if arch == 'source': include_regex = '%s__.+__%s_%s__source' % \ (view_name, os_name, os_code_name) else: include_regex = '%s__.+__%s_%s_%s__binary' % \ (view_name, os_name, os_code_name, arch) views.append(configure_view( jenkins, view_name, include_regex=include_regex, template_name='dashboard_view_all_jobs.xml.em')) return views
def configure_release_views(jenkins, rosdistro_name, release_build_name, targets): views = [] # generate view aggregating all binary views if len([t for t in targets if t[2] != 'source']) > 1: view_prefix = get_release_binary_view_prefix(rosdistro_name, release_build_name) views.append( configure_view(jenkins, view_prefix, include_regex='%s_.+__.+' % view_prefix, template_name='dashboard_view_all_jobs.xml.em')) for os_name, os_code_name, arch in targets: view_name = get_release_view_name(rosdistro_name, release_build_name, os_name, os_code_name, arch) if arch == 'source': include_regex = '%s__.+__%s_%s__source' % \ (view_name, os_name, os_code_name) else: include_regex = '%s__.+__%s_%s_%s__binary' % \ (view_name, os_name, os_code_name, arch) views.append( configure_view(jenkins, view_name, include_regex=include_regex, template_name='dashboard_view_all_jobs.xml.em')) return views
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 configure_release_views(jenkins, rosdistro_name, release_build_name, targets, dry_run=False): from ros_buildfarm.jenkins import configure_view views = {} for os_name, os_code_name, arch in targets: view_name = get_release_view_name(rosdistro_name, release_build_name, os_name, os_code_name, arch) if arch == 'source': include_regex = '%s__.+__%s_%s__source' % \ (view_name, os_name, os_code_name) else: include_regex = '%s__.+__%s_%s_%s__binary' % \ (view_name, os_name, os_code_name, arch) views[view_name] = configure_view( jenkins, view_name, include_regex=include_regex, template_name='dashboard_view_all_jobs.xml.em', dry_run=dry_run) return views
def configure_devel_view(jenkins, view_name, dry_run=False): from ros_buildfarm.jenkins import configure_view return configure_view(jenkins, view_name, include_regex='%s__.+' % view_name, template_name='dashboard_view_devel_jobs.xml.em', dry_run=dry_run)
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 '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 configure_import_package_job( config_url, rosdistro_name, release_build_name, config=None, build_file=None, jenkins=None): if config is None: config = get_config_index(config_url) if build_file is None: build_files = get_release_build_files(config, rosdistro_name) build_file = build_files[release_build_name] if jenkins is None: jenkins = connect(config.jenkins_url) job_name = get_import_package_job_name(rosdistro_name, release_build_name) job_config = _get_import_package_job_config(build_file) view = configure_view(jenkins, JENKINS_MANAGEMENT_VIEW) # jenkinsapi.jenkins.Jenkins evaluates to false if job count is zero if isinstance(jenkins, object) and jenkins is not False: configure_job(jenkins, job_name, job_config, view)
def configure_release_views( jenkins, rosdistro_name, release_build_name, targets, dry_run=False): views = {} for os_name, os_code_name, arch in targets: view_name = get_release_view_name( rosdistro_name, release_build_name, os_name, os_code_name, arch) if arch == 'source': include_regex = '%s__.+__%s_%s__source' % \ (view_name, os_name, os_code_name) else: include_regex = '%s__.+__%s_%s_%s__binary' % \ (view_name, os_name, os_code_name, arch) views[view_name] = configure_view( jenkins, view_name, include_regex=include_regex, template_name='dashboard_view_all_jobs.xml.em', dry_run=dry_run) return views
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) view = configure_view(jenkins, JENKINS_MANAGEMENT_VIEW) group_name = get_devel_view_name( args.rosdistro_name, args.source_build_name) configure_reconfigure_jobs_job( jenkins, view, group_name, args, config, build_file) configure_trigger_jobs_job(jenkins, view, group_name, build_file)
def configure_doc_view(jenkins, view_name): from ros_buildfarm.jenkins import configure_view return configure_view( jenkins, view_name, include_regex='%s__.+' % view_name, template_name='dashboard_view_all_jobs.xml.em')
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)
def configure_devel_view(jenkins, view_name, dry_run=False): from ros_buildfarm.jenkins import configure_view return configure_view( jenkins, view_name, include_regex='%s__.+' % view_name, template_name='dashboard_view_devel_jobs.xml.em', dry_run=dry_run)
def configure_doc_view(jenkins, view_name): from ros_buildfarm.jenkins import configure_view return configure_view(jenkins, view_name, include_regex='%s__.+' % view_name, template_name='dashboard_view_all_jobs.xml.em')
def configure_devel_view(jenkins, view_name): return configure_view( jenkins, view_name, include_regex='%s__.+' % view_name)