Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at python-updates 82 lines 2.4 kB view raw
1#! /usr/bin/env nix-shell 2#! nix-shell -i python3 -p python3 prefetch-yarn-deps nix-prefetch-git nix-prefetch 3 4from pathlib import Path 5from shutil import copyfile 6from urllib.request import Request, urlopen 7import json 8import os 9import subprocess 10 11 12def run_external(args: list[str]): 13 proc = subprocess.run( 14 args, 15 check=True, 16 stdout=subprocess.PIPE, 17 ) 18 19 return proc.stdout.strip().decode("utf8") 20 21def get_latest_release_tag(): 22 req = Request("https://api.github.com/repos/stashapp/stash/tags?per_page=1") 23 24 if "GITHUB_TOKEN" in os.environ: 25 req.add_header("authorization", f"Bearer {os.environ['GITHUB_TOKEN']}") 26 27 with urlopen(req) as resp: 28 return json.loads(resp.read())[0] 29 30def prefetch_github(rev: str): 31 print(f"Prefetching stashapp/stash({rev})") 32 33 proc = run_external(["nix-prefetch-git", "--no-deepClone", "--rev", rev, f"https://github.com/stashapp/stash"]) 34 35 return json.loads(proc) 36 37def prefetch_yarn(lock_file: str): 38 print(f"Prefetching yarn deps") 39 40 hash = run_external(["prefetch-yarn-deps", lock_file]) 41 42 return run_external(["nix", "hash", "convert", "--hash-algo", "sha256", hash]) 43 44def prefetch_go_modules(src: str, version: str): 45 print(f"Prefetching go modules") 46 expr = fr""" 47 {{ sha256 }}: (buildGoModule {{ 48 pname = "stash"; 49 src = {src}; 50 version = "{version}"; 51 vendorHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; 52 }}).goModules.overrideAttrs (_: {{ modSha256 = sha256; }}) 53 """ 54 return run_external([ 55 "nix-prefetch", 56 "--option", 57 "extra-experimental-features", 58 "flakes", 59 expr 60 ]) 61 62 63def save_version_json(version: dict[str, str]): 64 print("Writing version.json") 65 with open(Path(__file__).parent / "version.json", 'w') as f: 66 json.dump(version, f, indent=2) 67 f.write("\n") 68 69if __name__ == "__main__": 70 release = get_latest_release_tag() 71 72 src = prefetch_github(release['name']) 73 74 yarn_hash = prefetch_yarn(f"{src['path']}/ui/v2.5/yarn.lock") 75 76 save_version_json({ 77 "version": release["name"][1:], 78 "gitHash": release["commit"]["sha"][:8], 79 "srcHash": src["hash"], 80 "yarnHash": yarn_hash, 81 "vendorHash": prefetch_go_modules(src["path"], release["name"][1:]) 82 })