42 lines
1.4 KiB
Python
Executable file
42 lines
1.4 KiB
Python
Executable file
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ requests ])"
|
|
import json
|
|
import re
|
|
from hashlib import sha1
|
|
from struct import unpack
|
|
from subprocess import run
|
|
|
|
from requests import get
|
|
|
|
# Fetch the latest stable release metadata from GitHub
|
|
latestTag = get("https://api.github.com/repos/facebook/sapling/releases/latest").json()[
|
|
"tag_name"
|
|
]
|
|
|
|
|
|
def nixPrefetchUrl(url):
|
|
return run(
|
|
["nix-prefetch-url", "--type", "sha256", url],
|
|
check=True,
|
|
text=True,
|
|
capture_output=True,
|
|
).stdout.rstrip()
|
|
|
|
|
|
# Fetch the `setup.py` source and look for instances of assets being downloaded
|
|
# from files.pythonhosted.org.
|
|
setupPy = get(
|
|
f"https://github.com/facebook/sapling/raw/{latestTag}/eden/scm/setup.py"
|
|
).text
|
|
foundUrls = re.findall(r'(https://files\.pythonhosted\.org/packages/[^\s]+)"', setupPy)
|
|
|
|
dataDeps = {
|
|
"links": [{"url": url, "sha256": nixPrefetchUrl(url)} for url in foundUrls],
|
|
"version": latestTag,
|
|
# Find latest's git tag which corresponds to the Sapling version. Also
|
|
# needed is a hash of the version, so calculate that here. Taken from
|
|
# Sapling source `$root/eden/scm/setup_with_version.py`.
|
|
"versionHash": str(unpack(">Q", sha1(latestTag.encode("ascii")).digest()[:8])[0]),
|
|
}
|
|
|
|
open("deps.json", "w").write(json.dumps(dataDeps, indent=2, sort_keys=True) + "\n")
|