From d508ccbabcc357331cdb95a220255571563876b1 Mon Sep 17 00:00:00 2001 From: mivorasu Date: Sun, 27 Jul 2025 08:57:01 +0800 Subject: [PATCH] saber: refactor --- pkgs/by-name/sa/saber/gitHashes.json | 4 ++ pkgs/by-name/sa/saber/package.nix | 9 ++-- pkgs/by-name/sa/saber/update-gitHashes.py | 51 +++++++++++++++++++++++ 3 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 pkgs/by-name/sa/saber/gitHashes.json create mode 100755 pkgs/by-name/sa/saber/update-gitHashes.py diff --git a/pkgs/by-name/sa/saber/gitHashes.json b/pkgs/by-name/sa/saber/gitHashes.json new file mode 100644 index 000000000000..3ee14f88f491 --- /dev/null +++ b/pkgs/by-name/sa/saber/gitHashes.json @@ -0,0 +1,4 @@ +{ + "flutter_secure_storage_linux": "sha256-cFNHW7dAaX8BV7arwbn68GgkkBeiAgPfhMOAFSJWlyY=", + "receive_sharing_intent": "sha256-8D5ZENARPZ7FGrdIErxOoV3Ao35/XoQ2tleegI42ZUY=" +} diff --git a/pkgs/by-name/sa/saber/package.nix b/pkgs/by-name/sa/saber/package.nix index 0790d0de3076..08cf4f15b430 100644 --- a/pkgs/by-name/sa/saber/package.nix +++ b/pkgs/by-name/sa/saber/package.nix @@ -26,10 +26,7 @@ flutter332.buildFlutterApplication rec { hash = "sha256-5N4HojdDysLgCPq614ZzJXx/dx3s4F++W35fjYdevRk="; }; - gitHashes = { - receive_sharing_intent = "sha256-8D5ZENARPZ7FGrdIErxOoV3Ao35/XoQ2tleegI42ZUY="; - flutter_secure_storage_linux = "sha256-cFNHW7dAaX8BV7arwbn68GgkkBeiAgPfhMOAFSJWlyY="; - }; + gitHashes = lib.importJSON ./gitHashes.json; pubspecLock = lib.importJSON ./pubspec.lock.json; @@ -75,6 +72,10 @@ flutter332.buildFlutterApplication rec { updateScript = _experimental-update-script-combinators.sequence [ (gitUpdater { rev-prefix = "v"; }) (_experimental-update-script-combinators.copyAttrOutputToFile "saber.pubspecSource" ./pubspec.lock.json) + { + command = [ ./update-gitHashes.py ]; + supportedFeatures = [ "silent" ]; + } ]; }; diff --git a/pkgs/by-name/sa/saber/update-gitHashes.py b/pkgs/by-name/sa/saber/update-gitHashes.py new file mode 100755 index 000000000000..ffa6feb66653 --- /dev/null +++ b/pkgs/by-name/sa/saber/update-gitHashes.py @@ -0,0 +1,51 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i python3 -p python3 nix-prefetch-git + +import json +import subprocess +import sys +from pathlib import Path + +THIS_FOLDER = Path(__file__).parent.resolve() +PUBSPEC_LOCK = THIS_FOLDER / "pubspec.lock.json" +GIT_HASHES = THIS_FOLDER / "gitHashes.json" + + +def fetch_git_hash(url: str, rev: str) -> str: + result = subprocess.run( + ["nix-prefetch-git", "--url", url, "--rev", rev], + capture_output=True, + text=True, + check=True, + ) + return json.loads(result.stdout)["hash"] + + +def main() -> None: + if not PUBSPEC_LOCK.exists(): + sys.exit(1) + try: + data = json.loads(PUBSPEC_LOCK.read_text()) + except json.JSONDecodeError: + sys.exit(1) + output: dict[str, str] = {} + for name, info in data.get("packages", {}).items(): + if info.get("source") != "git": + continue + desc = info.get("description") + if not isinstance(desc, dict): + continue + url = desc.get("url") + rev = desc.get("resolved-ref") + if not (isinstance(url, str) and isinstance(rev, str)): + continue + try: + package_hash = fetch_git_hash(url, rev) + except subprocess.CalledProcessError: + continue + output[name] = package_hash + GIT_HASHES.write_text(json.dumps(output, indent=2) + "\n") + + +if __name__ == "__main__": + main()