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
83 lines
2.3 KiB
Python
Executable File
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:])
|
|
})
|