if __name__ == '__main__': args = parse_arguments() template_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'static_jobs') templates = [] for entry in sorted(os.listdir(template_dir)): if not entry.endswith('.xml'): continue templates.append(entry[:-4]) jobs = [] if args.jobs: for job in args.jobs: if job not in templates: print("Unknown job '%s'" % job, file=sys.stderr) else: jobs.append(job) else: for template in templates: jobs.append(template) jenkins_instance = jenkins_support.JenkinsConfig_to_handle(jenkins_support.load_server_config_file(jenkins_support.get_default_catkin_rpms_config())) for job in jobs: template_filename = os.path.join(template_dir, job + '.xml') with open(template_filename, 'r') as f: config = f.read() create_jenkins_job(jenkins_instance, job, config, args.commit)
def doit(rd, distros, arches, yum_target_repository, fqdn, jobs_graph, rosdistro, packages, dry_maintainers, commit=False, delete_extra_jobs=False, whitelist_repos=None): jenkins_instance = None if args.commit or delete_extra_jobs: jenkins_instance = jenkins_support.JenkinsConfig_to_handle(jenkins_support.load_server_config_file(jenkins_support.get_default_catkin_rpms_config())) # Figure out default distros. Command-line arg takes precedence; if # it's not specified, then read targets.yaml. if distros: default_distros = distros else: default_distros = rd.get_target_distros() # TODO: pull arches from rosdistro target_arches = arches # We take the intersection of repo-specific targets with default # targets. results = {} for repo_name in sorted(rd.get_repo_list()): if whitelist_repos and repo_name not in whitelist_repos: continue r = rd.get_repo(repo_name) #todo add support for specific targets, needed in rosdistro.py too #if 'target' not in r or r['target'] == 'all': target_distros = default_distros #else: # target_distros = list(set(r['target']) & set(default_distros)) print ('Configuring WET repo "%s" at "%s" for "%s"' % (r.name, r.url, target_distros)) for p in sorted(r.packages.iterkeys()): if not r.version: print('- skipping "%s" since version is null' % p) continue pkg_name = rd.rpmify_package_name(p) results[pkg_name] = release_jobs.doit(r.url, pkg_name, packages[p], target_distros, target_arches, yum_target_repository, fqdn, jobs_graph, rosdistro=rosdistro, short_package_name=p, commit=commit, jenkins_instance=jenkins_instance) #time.sleep(1) #print ('individual results', results[pkg_name]) if args.wet_only: print ("wet only selected, skipping dry and delete") return results if rosdistro == 'backports': print ("No dry backports support") return results if rosdistro == 'groovy': packages_for_sync = 500 elif rosdistro == 'hydro': packages_for_sync = 60 else: packages_for_sync = 10000 #dry stacks # dry dependencies d = rospkg.distro.load_distro(rospkg.distro.distro_uri(rosdistro)) for s in sorted(d.stacks.iterkeys()): if whitelist_repos and s not in whitelist_repos: continue print ("Configuring DRY job [%s]" % s) if not d.stacks[s].version: print('- skipping "%s" since version is null' % s) continue results[rd.rpmify_package_name(s)] = release_jobs.dry_doit(s, dry_maintainers[s], default_distros, target_arches, fqdn, rosdistro, jobgraph=jobs_graph, commit=commit, jenkins_instance=jenkins_instance, packages_for_sync=packages_for_sync) #time.sleep(1) # special metapackages job if not whitelist_repos or 'metapackages' in whitelist_repos: results[rd.rpmify_package_name('metapackages')] = release_jobs.dry_doit('metapackages', [], default_distros, target_arches, fqdn, rosdistro, jobgraph=jobs_graph, commit=commit, jenkins_instance=jenkins_instance, packages_for_sync=packages_for_sync) if not whitelist_repos or 'sync' in whitelist_repos: results[rd.rpmify_package_name('sync')] = release_jobs.dry_doit('sync', [], default_distros, target_arches, fqdn, rosdistro, jobgraph=jobs_graph, commit=commit, jenkins_instance=jenkins_instance, packages_for_sync=packages_for_sync) if delete_extra_jobs: assert(not whitelist_repos) # clean up extra jobs configured_jobs = set() for jobs in results.values(): release_jobs.summarize_results(*jobs) for e in jobs: configured_jobs.update(set(e)) existing_jobs = set([j['name'] for j in jenkins_instance.get_jobs()]) relevant_jobs = existing_jobs - configured_jobs relevant_jobs = [j for j in relevant_jobs if rosdistro in j and ('_sourcerpm' in j or '_binaryrpm' in j)] for j in relevant_jobs: print('Job "%s" detected as extra' % j) if commit: jenkins_instance.delete_job(j) print('Deleted job "%s"' % j) return results