107 lines
2.3 KiB
Python
107 lines
2.3 KiB
Python
import json
|
|
import os
|
|
import requests
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
# See YC_SDK_STORAGE_URL in
|
|
# https://storage.yandexcloud.net/yandexcloud-yc/install.sh
|
|
storage_url = "https://storage.yandexcloud.net/yandexcloud-yc"
|
|
|
|
systems = [
|
|
("aarch64", "darwin"),
|
|
("aarch64", "linux"),
|
|
("i686", "linux"),
|
|
("x86_64", "darwin"),
|
|
("x86_64", "linux"),
|
|
]
|
|
|
|
|
|
def to_goarch(cpu):
|
|
return {
|
|
"aarch64": "arm64",
|
|
"i686": "386",
|
|
"x86_64": "amd64",
|
|
}.get(cpu, cpu)
|
|
|
|
|
|
nixpkgs_path = "."
|
|
attr_path = os.getenv("UPDATE_NIX_ATTR_PATH", "yandex-cloud")
|
|
|
|
package_attrs = json.loads(subprocess.run(
|
|
[
|
|
"nix",
|
|
"--extra-experimental-features", "nix-command",
|
|
"eval",
|
|
"--json",
|
|
"--file", nixpkgs_path,
|
|
"--apply", """p: {
|
|
dir = builtins.dirOf p.meta.position;
|
|
version = p.version;
|
|
}""",
|
|
"--",
|
|
attr_path,
|
|
],
|
|
stdout=subprocess.PIPE,
|
|
text=True,
|
|
check=True,
|
|
).stdout)
|
|
|
|
old_version = package_attrs["version"]
|
|
new_version = requests.get(f"{storage_url}/release/stable").text.rstrip()
|
|
|
|
if new_version == old_version:
|
|
sys.exit()
|
|
|
|
binaries = {}
|
|
for cpu, kernel in systems:
|
|
goos = kernel
|
|
goarch = to_goarch(cpu)
|
|
system = f"{cpu}-{kernel}"
|
|
|
|
url = f"{storage_url}/release/{new_version}/{goos}/{goarch}/yc"
|
|
|
|
nix_hash = subprocess.run(
|
|
[
|
|
"nix-prefetch-url",
|
|
"--type", "sha256",
|
|
url,
|
|
],
|
|
stdout=subprocess.PIPE,
|
|
text=True,
|
|
check=True,
|
|
).stdout.rstrip()
|
|
|
|
sri_hash = subprocess.run(
|
|
[
|
|
"nix",
|
|
"--extra-experimental-features", "nix-command",
|
|
"hash",
|
|
"to-sri",
|
|
"--type", "sha256",
|
|
"--",
|
|
nix_hash,
|
|
],
|
|
stdout=subprocess.PIPE,
|
|
text=True,
|
|
check=True,
|
|
).stdout.rstrip()
|
|
|
|
binaries[system] = {
|
|
"url": url,
|
|
"hash": sri_hash,
|
|
}
|
|
|
|
package_dir = package_attrs["dir"]
|
|
file_path = os.path.join(package_dir, "sources.json")
|
|
file_content = json.dumps({
|
|
"version": new_version,
|
|
"binaries": binaries,
|
|
}, indent=2) + "\n"
|
|
|
|
with tempfile.NamedTemporaryFile(mode="w") as t:
|
|
t.write(file_content)
|
|
t.flush()
|
|
shutil.copyfile(t.name, file_path)
|