Created
September 26, 2024 10:14
-
-
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
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 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