blob: 962d5479251763a5c867278a644204c2bb04e710 [file] [log] [blame]
#!/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()