nixpkgs/pkgs/by-name/fl/flet-client-flutter/update-lockfiles.py
lucasew f6604f9491 flet-client-flutter: adjusting the updater to handle the new cases
Signed-off-by: lucasew <lucas59356@gmail.com>
2025-02-09 19:36:12 -03:00

43 lines
1.3 KiB
Python

from argparse import ArgumentParser
from pathlib import Path
import json
import subprocess
import yaml
THIS_FOLDER = Path(__file__).parent
FLAKE_DIR = THIS_FOLDER
while True:
assert str(FLAKE_DIR) != '/'
if (FLAKE_DIR / "flake.nix").exists():
break
FLAKE_DIR = FLAKE_DIR.parent
source = Path(subprocess.run(['nix-build', FLAKE_DIR, '-A', 'flet-client-flutter.src', '--no-out-link'], stdout=subprocess.PIPE).stdout.decode('utf-8').strip())
assert source.is_absolute()
source_pubspec_lock = source / "client" / "pubspec.lock"
output_pubspec = THIS_FOLDER / "pubspec.lock.json"
output_git_hashes = THIS_FOLDER / "git_hashes.json"
data = yaml.safe_load(source_pubspec_lock.open('r'))
output_pubspec.write_text(json.dumps(data, indent=2) + "\n")
output_data = {}
def hash_git(package):
print(package)
resolved_ref = package['resolved-ref']
url = package['url']
full_output = subprocess.run(['nix-prefetch-git', '--url', url, '--rev', resolved_ref], stdout=subprocess.PIPE).stdout.decode('utf-8')
json_output = json.loads(full_output)
return json_output['hash']
for name, package in data['packages'].items():
if package['source'] != 'git':
continue
hash = hash_git(package['description'])
output_data[name] = hash
output_git_hashes.write_text(json.dumps(output_data, indent=2) + "\n")