def metadata_builder(column_data): distro, jobtype = column_data.split('_', 1) data = { 'rosdistro': args.rosdistro, 'rosdistro_short': args.rosdistro[0].upper(), 'distro': distro, 'distro_short': distro[0].upper(), 'distro_ver': fedora_release_version(distro) } is_source = jobtype == 'SRPMS' if is_source: column_label = '{rosdistro_short}src{distro_short}' view_name = '{rosdistro_short}src' else: data['arch_short'] = {'x86_64': '64', 'i386': '32'}[jobtype] column_label = '{rosdistro_short}binF{distro_ver}x{arch_short}' view_name = '{rosdistro_short}binF{distro_ver}x{arch_short}' data['column_label'] = column_label.format(**data) data['view_url'] = 'http://151.159.91.137:8080/view/%s/' % view_name.format(**data) if is_source: job_name = 'ros-{rosdistro}-{{pkg}}_sourcerpm' else: data['arch'] = jobtype job_name = 'ros-{rosdistro}-{{pkg}}_binaryrpm_{distro}_{arch}' data['job_url'] = ('{view_url}job/%s/' % job_name).format(**data) return data
def dry_binaryrpm_jobs(stackname, dry_maintainers, rosdistro, distros, arches, fqdn, jobgraph, packages_for_sync): jenkins_config = jenkins_support.load_server_config_file(jenkins_support.get_default_catkin_rpms_config()) package = redhatify_package_name(rosdistro, stackname) d = dict( FQDN=fqdn, PACKAGE=package, ROSDISTRO=rosdistro, STACK_NAME=stackname, NOTIFICATION_EMAIL=' '.join(dry_maintainers), USERNAME=jenkins_config.username, IS_METAPACKAGES=(stackname == 'metapackages'), PACKAGES_FOR_SYNC=str(packages_for_sync) ) jobs = [] for distro in distros: for arch in arches: d['ARCH'] = arch d['DISTRO'] = distro d['DISTRO_VER'] = fedora_release_version(distro) d["CHILD_PROJECTS"] = calc_child_jobs(package, distro, arch, jobgraph) d["DEPENDENTS"] = "True" config = create_dry_binaryrpm_config(d) #print(config) job_name = binaryrpm_job_name(package, distro, arch) jobs.append((job_name, config)) #print ("config of %s is %s" % (job_name, config)) return jobs
def compute_missing(distros, arches, fqdn, rosdistro, sourcerpm_only=False, wet_only=False): """ Compute what packages are missing from a repo based on the rosdistro files, both wet and dry. """ repo_url = 'http://%s/smd-ros-building' % fqdn rd = Rosdistro(rosdistro) # We take the intersection of repo-specific targets with default # targets. if distros: target_distros = distros else: target_distros = rd.get_target_distros() missing = {} for short_package_name in rd.get_package_list(): #print ('Analyzing WET stack "%s" for "%s"' % (r['url'], target_distros)) # todo check if sourcerpm is present with the right version rpm_name = redhatify_package_name(rosdistro, short_package_name) expected_version = rd.get_version(short_package_name, full_version=True) missing[short_package_name] = [] for d in target_distros: d_ver = fedora_release_version(d) if not repo.rpm_in_repo(repo_url, rpm_name, str(expected_version) + "\.fc" + d_ver, d, 'SRPMS'): missing[short_package_name].append((d, 'SRPMS')) if not sourcerpm_only: for a in arches: if not repo.rpm_in_repo(repo_url, rpm_name, str(expected_version) + "\.fc" + d_ver, d, a): missing[short_package_name].append((d, a)) if not sourcerpm_only and not wet_only: #dry stacks # dry dependencies dist = load_distro(distro_uri(rosdistro)) distro_arches = [] for d in target_distros: for a in arches: distro_arches.append((d, a)) for s in dist.stacks: #print ("Analyzing DRY job [%s]" % s) expected_version = dry_get_stack_version(s, dist) # sanitize undeclared versions for string substitution if not expected_version: expected_version = '' missing[s] = [] # for each distro arch check if the RPM is present. If not trigger the build. for (d, a) in distro_arches: if not repo.rpm_in_repo(repo_url, redhatify_package_name(rosdistro, s), expected_version + "\.fc" + fedora_release_version(d), d, a): missing[s].append((d, a)) return missing
def sourcerpm_jobs(package, maintainer_emails, distros, fqdn, release_uri, child_projects, rosdistro, short_package_name): jenkins_config = jenkins_support.load_server_config_file(jenkins_support.get_default_catkin_rpms_config()) d = dict( RELEASE_URI=release_uri, RELEASE_BRANCH='master', FQDN=fqdn, DISTROS=distros, CHILD_PROJECTS=child_projects, PACKAGE=package, NOTIFICATION_EMAIL=' '.join(maintainer_emails), ROSDISTRO=rosdistro, SHORT_PACKAGE_NAME=short_package_name, USERNAME=jenkins_config.username ) jobs = [] for distro in distros: d['DISTRO'] = distro d['DISTRO_VER'] = fedora_release_version(distro) jobs.append((sourcerpm_job_name(package, distro), create_sourcerpm_config(d))) return jobs
def binaryrpm_jobs(package, maintainer_emails, distros, arches, fqdn, jobgraph): jenkins_config = jenkins_support.load_server_config_file(jenkins_support.get_default_catkin_rpms_config()) d = dict( DISTROS=distros, FQDN=fqdn, PACKAGE=package, NOTIFICATION_EMAIL=' '.join(maintainer_emails), USERNAME=jenkins_config.username ) jobs = [] for distro in distros: d['DISTRO'] = distro d['DISTRO_VER'] = fedora_release_version(distro) for arch in arches: d['ARCH'] = arch d["CHILD_PROJECTS"] = calc_child_jobs(package, distro, arch, jobgraph) d["DEPENDENTS"] = add_dependent_to_dict(package, jobgraph) config = create_binaryrpm_config(d) #print(config) job_name = binaryrpm_job_name(package, distro, arch) jobs.append((job_name, config)) return jobs