nix: bring back local release pin to update.py

Revert "nix: remove unused code from update.py"

This reverts commit 48dfd73c91.

nix: update local release pin function in update.py
This commit is contained in:
Toast 2025-08-01 13:27:09 +02:00
parent 910e2e3c89
commit 0f575181ee

View file

@ -2,18 +2,23 @@
# Update the Nix package pin # Update the Nix package pin
# #
# Usage: ./update.sh # Usage: ./update.sh [PATH]
# When the [PATH] is not set, it will fetch the latest release from the repo.
# With [PATH] set, it will hash the given file and generate the URL,
# base on the version contained within the file
import base64 import base64
import json import json
import hashlib import hashlib
import sys import sys
import tarfile
from pathlib import Path from pathlib import Path
OUTPUT_FILE = Path("pin.json") OUTPUT_FILE = Path("pin.json")
TARGET_ASSET = lambda version: f"copyparty-{version}.tar.gz" TARGET_ASSET = lambda version: f"copyparty-{version}.tar.gz"
HASH_TYPE = "sha256" HASH_TYPE = "sha256"
LATEST_RELEASE_URL = "https://api.github.com/repos/9001/copyparty/releases/latest" LATEST_RELEASE_URL = "https://api.github.com/repos/9001/copyparty/releases/latest"
DOWNLOAD_URL = lambda version: f"https://github.com/9001/copyparty/releases/download/v{version}/{TARGET_ASSET(version)}"
def get_formatted_hash(binary): def get_formatted_hash(binary):
@ -24,6 +29,16 @@ def get_formatted_hash(binary):
return f"{HASH_TYPE}-{encoded_hash}" return f"{HASH_TYPE}-{encoded_hash}"
def version_from_tar_gz(path):
with tarfile.open(path) as tarball:
release_name = tarball.getmembers()[0].name
prefix = "copyparty-"
if release_name.startswith(prefix):
return release_name.replace(prefix, "")
raise ValueError("version not found in provided file")
def remote_release_pin(): def remote_release_pin():
import requests import requests
@ -38,7 +53,20 @@ def remote_release_pin():
return result return result
def local_release_pin(path):
version = version_from_tar_gz(path)
download_url = DOWNLOAD_URL(version)
formatted_hash = get_formatted_hash(path.read_bytes())
result = {"url": download_url, "version": version, "hash": formatted_hash}
return result
def main(): def main():
if len(sys.argv) > 1:
asset_path = Path(sys.argv[1])
result = local_release_pin(asset_path)
else:
result = remote_release_pin() result = remote_release_pin()
print(result) print(result)