Skip to content

Instantly share code, notes, and snippets.

@LenkaSeg
Created March 9, 2026 14:19
Show Gist options
  • Select an option

  • Save LenkaSeg/aec473156b05b88d8b33ae7c09913837 to your computer and use it in GitHub Desktop.

Select an option

Save LenkaSeg/aec473156b05b88d8b33ae7c09913837 to your computer and use it in GitHub Desktop.
fully_retired_script
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