Files
nixpkgs/pkgs/by-name/gi/gildas/update.py
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

149 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p "python3.withPackages (ps: [ ps.beautifulsoup4 ps.requests ])"
"""
Update the gildas package in nixpkgs.
"""
import re
import subprocess
import requests
import os
from bs4 import BeautifulSoup
def to_version(srcVersion):
"""
Convert the source version to the package version
This function converts the source version from the format "apr25a"
to "20250401_a".
"""
months = {
"jan": "01",
"feb": "02",
"mar": "03",
"apr": "04",
"may": "05",
"jun": "06",
"jul": "07",
"aug": "08",
"sep": "09",
"oct": "10",
"nov": "11",
"dec": "12",
}
month = srcVersion[0:3]
year = srcVersion[3:5]
revision = srcVersion[5:6]
return f"20{year}{months[month]}01_{revision}"
def get_srcVersion():
"""
Get the available source versions from the gildas website
"""
srcVersions = []
response = requests.get("https://www.iram.fr/~gildas/dist/index.html")
soup = BeautifulSoup(response.text, "html.parser")
pattern = r"^gildas-src-([a-z]{3}\d{2}[a-z])\.tar\.xz$"
for link in soup.find_all("a"):
href = link["href"]
match = re.search(pattern, href)
if match:
srcVersions.append(match.group(1))
return srcVersions
def find_latest(srcVersions):
"""
Return the latest source version from a list
"""
latestVersion = ""
for srcVersion in srcVersions:
version = to_version(srcVersion)
if version > latestVersion:
latest = srcVersion
return latest
def get_hash(srcVersion):
"""
Get the hash of a given source versionn
"""
url = f"http://www.iram.fr/~gildas/dist/gildas-src-{srcVersion}.tar.xz"
srcHash = subprocess.check_output(["nix-prefetch-url", url]).decode().strip()
# Convert to SRI representation
srcSRIHash = (
subprocess.check_output(["nix-hash", "--to-sri", "--type", "sha256", srcHash])
.decode()
.strip()
)
return srcSRIHash
def get_package_attribute(attr):
"""
Get a package attribute
"""
pattern = attr + r'\s*=\s*"([^"]+)";'
with open("package.nix", "r") as f:
for line in f:
match = re.search(pattern, line)
if match:
return match.group(1)
def update_package(srcVersion, version, srcHash):
"""
Update the package
"""
current_srcVersion = get_package_attribute("srcVersion")
current_version = get_package_attribute("version")
current_hash = get_package_attribute("hash")
with open("package.nix", "r") as f:
lines = f.readlines()
with open("package.nix", "w") as f:
for line in lines:
line = line.replace(current_srcVersion, srcVersion)
line = line.replace(current_version, version)
line = line.replace(current_hash, srcHash)
f.write(line)
def main():
os.chdir(os.path.dirname(os.path.abspath(__file__))) # allow to run from anywhere
latest = find_latest(get_srcVersion())
if latest != get_package_attribute("srcVersion"):
srcVersion = latest
version = to_version(srcVersion)
print(f"Updating gildas to {version}...")
srcHash = get_hash(srcVersion)
update_package(srcVersion, version, srcHash)
print("done")
else:
print("Already up to date")
if __name__ == "__main__":
main()