diff options
Diffstat (limited to 'scripts/obs/check_new_distros.py')
-rwxr-xr-x | scripts/obs/check_new_distros.py | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/scripts/obs/check_new_distros.py b/scripts/obs/check_new_distros.py new file mode 100755 index 0000000..962d547 --- /dev/null +++ b/scripts/obs/check_new_distros.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright 2023 sysmocom - s.f.m.c. GmbH <info@sysmocom.de> +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() |