""" Script for detecting retired packages that have not been blocked in koji. Takes the retired packages from the json files in the lookaside cache and checks if they are blocked in koji. """ import koji import re import requests from collections import defaultdict koji_session = koji.ClientSession("https://koji.fedoraproject.org/kojihub") def get_active_releases(): releases = [] url = "https://bodhi.fedoraproject.org/releases?exclude_archived=true" resp = requests.get(url) if not resp.ok: print("Unable to retrieve active releases from Bodhi.") return None response = resp.json() for b in response["releases"]: if re.match(r"^(f|epel)\d{1,2}$", b["branch"]): releases.append(b["branch"]) releases = list(set(releases)) releases.remove(max(releases)) releases.append("rawhide") releases.sort() return releases active_releases = get_active_releases() base_url = "https://src.fedoraproject.org/lookaside" def get_tag_from_target(branch): try: print(f"Getting koji tag for {branch} target") target = koji_session.getBuildTarget(branch) tag = target["build_tag_name"].removesuffix("-build") return tag except koji.GenericError as e: print(f"Failed to get {branch} tag in koji: {e}") return None needs_blocking = defaultdict(list) for active_release in active_releases: retired_url = f"{base_url}/retired_in_{active_release}.json" response = requests.get(retired_url) packages = response.json()[active_release] for package in packages: if active_release == "rawhide": active_release = get_tag_from_target("rawhide") elif "epel" in active_release: active_release = get_tag_from_target(active_release) try: print( f"Checking if package {package} is blocked " f"in koji for release {active_release}" ) (resp,) = koji_session.listPackages(pkgID=package, tagID=active_release) if not resp["blocked"]: try: print(f"Blocking package {package}, tag: {active_release}") needs_blocking[active_release].append(package) except (koji.GenericError, koji.ActionNotAllowed) as e: print( f"Failed to block retired package {package} " f"on branch {active_release}: {e}" ) except (koji.GenericError, koji.ActionNotAllowed) as e: print(f"Failed to list package {package} from koji: {e}") print(f"All packages that should be blocked: {dict(needs_blocking)}")