Created
March 9, 2026 14:19
-
-
Save LenkaSeg/aec473156b05b88d8b33ae7c09913837 to your computer and use it in GitHub Desktop.
fully_retired_script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import koji | |
| import requests | |
| profile = koji.get_profile_module("koji") | |
| koji_session = profile.ClientSession(profile.config.server) | |
| koji_session.opts["authtype"] = profile.config.authtype | |
| koji_session.gssapi_login() | |
| def get_retired_packages(branch): | |
| result = [] | |
| endpoint_url = f"https://src.fedoraproject.org/lookaside/retired_in_{branch}.json" | |
| print(f"Retrieving retired packages for {branch}") | |
| response = requests.get(endpoint_url) | |
| if response.ok: | |
| result = response.json()[branch] | |
| return result | |
| def get_branches(package): | |
| branches_api_url = ( | |
| f"https://src.fedoraproject.org/api/0/rpms/{package}/git/branches" | |
| ) | |
| print(f"Getting list of branches for project {package}") | |
| response = requests.get(branches_api_url) | |
| result = response.json().get("branches", []) | |
| return result | |
| response = requests.get( | |
| "https://bodhi.fedoraproject.org/releases/?exclude_archived=True" | |
| ) | |
| active_branches = [] | |
| response_json = response.json() | |
| if response_json["releases"]: | |
| for branch in response_json["releases"]: | |
| active_branches.append(branch["branch"]) | |
| print(f"active branches: {active_branches}") | |
| print("Retrieving list of packages retired in dist_git") | |
| retired_packages = dict() | |
| for branch in active_branches: | |
| for package in get_retired_packages(branch): | |
| if package not in retired_packages: | |
| retired_packages[package] = [] | |
| retired_packages[package].append(branch) | |
| print("retired_packages dict") | |
| print(retired_packages) | |
| # Check for fully retired packages | |
| fully_retired = [] | |
| for package in retired_packages.keys(): | |
| branches = get_branches(package) | |
| intersection = list(set(branches) & set(active_branches)) | |
| if not intersection: | |
| continue | |
| print(f"intersection: {intersection}") | |
| blocked_on_all = True | |
| for branch in intersection: | |
| try: | |
| target = koji_session.getBuildTarget(branch) | |
| tag = target["build_tag_name"].removesuffix("-build") | |
| print(f"branch: {branch}, package: {package}, tag: {tag}") | |
| except (koji.GenericError, TypeError) as e: | |
| print(f"Failed to get koji tag for {branch}, {e}. Skipping.") | |
| blocked_on_all = False | |
| break | |
| result = koji_session.listPackages(pkgID=package, tagID=tag) | |
| if not result or not result[0]["blocked"]: | |
| blocked_on_all = False | |
| print(f"false, blocked: {result[0]['blocked']}") | |
| break | |
| if blocked_on_all: | |
| fully_retired.append(package) | |
| print(f"Identified as fully blocked: package: {package}") | |
| print(f"fully_retired {fully_retired}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment