#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0-or-later # Copyright 2023 sysmocom - s.f.m.c. GmbH import argparse import lib.docker import lib.osc import sys projects_opensuse = None projects_osmocom = None def parse_args(): parser = argparse.ArgumentParser(description="Check for new distribution" " projects on the openSUSE OBS, that we want to configure in the" " Osmocom OBS as soon as they are available") parser.add_argument("-d", "--docker", help="run in docker to avoid installing required pkgs", action="store_true") parser.add_argument("-v", "--verbose", action="store_true", help="always print shell commands and their output," " instead of only printing them on error") advanced = parser.add_argument_group("advanced options") advanced.add_argument("-A", "--apiurl", help="source OBS API URL" " (default: https://api.opensuse.org)", default="https://api.opensuse.org") advanced.add_argument("-p", "--prefix", default="openSUSE.org-mirror", help="destination OBS prefix" " (default: openSUSE.org-mirror)") advanced.add_argument("-t", "--to-apiurl", help="destination OBS API URL" " (default: https://obs.osmocom.org)", default="https://obs.osmocom.org") args = parser.parse_args() lib.set_args(args) lib.osc.check_oscrc() if args.docker: lib.docker.run_in_docker_and_exit("check_new_distros.py", add_oscrc=True) def find_highest_distro_project(distro): highest = None for project in projects_opensuse: if not project.startswith(f"{distro}:"): continue num = project[len(distro) + 1:] if not lib.config.check_new_distros_version_regex.match(num): if lib.args.verbose: print(f"ignoring {distro}:{num} (doesn't match version regex)") continue if not highest or float(num) > float(highest): highest = num if highest: return f"{distro}:{highest}" return None def check_distro(distro): highest = find_highest_distro_project(distro) if not highest: print(f"ERROR: {distro}: not found in {lib.args.apiurl}") return False # check if it is in the osmo obs exp = f"{lib.args.prefix}:{highest}" if exp in projects_osmocom: print(f"{exp}: OK") return True print() print(f"ERROR: {exp} not found") print() print("Follow this guide to add it to the Osmocom OBS:") print("https://osmocom.org/projects/cellular-infrastructure/wiki/Add_a_new_distribution_to_OBS") print() return False def main(): global projects_opensuse global projects_osmocom parse_args() ret = 0 # Get list of projects from Osmocom OBS lib.osc.set_apiurl(lib.args.to_apiurl) projects_osmocom = lib.osc.get_projects() # Get list of projects from openSUSE OBS lib.osc.set_apiurl(lib.args.apiurl) projects_opensuse = lib.osc.get_projects() # Check for missing distros in Osmocom OBS for distro in lib.config.check_new_distros: if not check_distro(distro): ret = 1 sys.exit(ret) if __name__ == "__main__": main()