Skip to content

Instantly share code, notes, and snippets.

@edigiacomo
Created September 26, 2024 10:14
Show Gist options
  • Save edigiacomo/b6296acbfdb065c622fd661e0ac4b0f6 to your computer and use it in GitHub Desktop.
Save edigiacomo/b6296acbfdb065c622fd661e0ac4b0f6 to your computer and use it in GitHub Desktop.
Script Python per ottenere le versioni dei pacchetti del SIMC pubblicati su Copr
import functools
import requests
import dnf
def get_package_version_from_repo(owner, project, chroot, package_name):
repo_url = f"https://download.copr.fedorainfracloud.org/results/{owner}/{project}/{chroot}"
# Creare una base per la transazione dnf
base = dnf.Base()
# Aggiungere il repository remoto
repo = base.repos.add_new_repo('custom_repo', base.conf, [repo_url])
# Abilitare il repository
repo.enable()
# Aggiornare le informazioni sui repository
base.fill_sack(load_system_repo=False) # Carica solo repository remoti
# Cercare il pacchetto specifico
pkg_query = base.sack.query().available().filter(name=package_name)
# Restituire la versione del pacchetto se trovata
for pkg in pkg_query:
if pkg.arch == "src":
return f"{pkg.version}-{pkg.release}"
return None
@functools.lru_cache
def get_copr_monitor(owner, project):
url = "https://copr.fedorainfracloud.org/api_3/monitor"
resp = requests.get(url, params={
"ownername": owner,
"projectname": project,
})
resp.raise_for_status()
return resp.json()
def get_chroots_for_package(owner, project, package_name):
monitor = get_copr_monitor(owner, project)
package_monitor = [
item
for item in monitor["packages"]
if item["name"] == package_name
]
if not package_monitor:
return []
else:
return list(package_monitor[0]["chroots"].keys())
owner = "simc"
project = "stable"
packages = [
"arkimet",
"dballe",
"wreport",
"libsim",
]
for package in packages:
for chroot in get_chroots_for_package(owner, project, package):
version = get_package_version_from_repo(owner, project, chroot, package)
if version is not None:
print(package, chroot, version)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment