Files
nixpkgs/pkgs/by-name/st/stash/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

83 lines
2.3 KiB
Python
Executable File

#! /usr/bin/env nix-shell
#! nix-shell -i python3 -p python3 prefetch-yarn-deps nix-prefetch-git nix-prefetch
from pathlib import Path
from shutil import copyfile
from urllib.request import Request, urlopen
import json
import os
import subprocess
def run_external(args: list[str]):
proc = subprocess.run(
args,
check=True,
stdout=subprocess.PIPE,
)
return proc.stdout.strip().decode("utf8")
def get_latest_release_tag():
req = Request("https://api.github.com/repos/stashapp/stash/tags?per_page=1")
if "GITHUB_TOKEN" in os.environ:
req.add_header("authorization", f"Bearer {os.environ['GITHUB_TOKEN']}")
with urlopen(req) as resp:
return json.loads(resp.read())[0]
def prefetch_github(rev: str):
print(f"Prefetching stashapp/stash({rev})")
proc = run_external(["nix-prefetch-git", "--no-deepClone", "--rev", rev, f"https://github.com/stashapp/stash"])
return json.loads(proc)
def prefetch_yarn(lock_file: str):
print(f"Prefetching yarn deps")
hash = run_external(["prefetch-yarn-deps", lock_file])
return run_external(["nix", "hash", "convert", "--hash-algo", "sha256", hash])
def prefetch_go_modules(src: str, version: str):
print(f"Prefetching go modules")
expr = fr"""
{{ sha256 }}: (buildGoModule {{
pname = "stash";
src = {src};
version = "{version}";
vendorHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
}}).goModules.overrideAttrs (_: {{ modSha256 = sha256; }})
"""
return run_external([
"nix-prefetch",
"--option",
"extra-experimental-features",
"flakes",
expr
])
def save_version_json(version: dict[str, str]):
print("Writing version.json")
with open(Path(__file__).parent / "version.json", 'w') as f:
json.dump(version, f, indent=2)
f.write("\n")
if __name__ == "__main__":
release = get_latest_release_tag()
src = prefetch_github(release['name'])
yarn_hash = prefetch_yarn(f"{src['path']}/ui/v2.5/yarn.lock")
save_version_json({
"version": release["name"][1:],
"gitHash": release["commit"]["sha"][:8],
"srcHash": src["hash"],
"yarnHash": yarn_hash,
"vendorHash": prefetch_go_modules(src["path"], release["name"][1:])
})