import json import os import shutil import subprocess def check_dependency(dependency): if shutil.which(dependency): return True print(f"{dependency} not installed.") return False script_dir = os.path.dirname(os.path.realpath(__file__)) # loading versions information from json version_info_path = os.path.join(script_dir, "version_info.json") with open(version_info_path, "r") as f: version_info = json.load(f) # Arch def generate_arch(): pkgbuild_template = os.path.join(script_dir, "../templates/PKGBUILD") pkgbuild_path = os.path.join(script_dir, "../PKGBUILD") with open(pkgbuild_template, "r") as f: pkgbuild = f.read() pkgbuild = pkgbuild.replace("%version%", version_info["ym"]["version"]) pkgbuild = pkgbuild.replace("%release%", "1") pkgbuild = pkgbuild.replace("%exe_name%", version_info["ym"]["exe_name"]) pkgbuild = pkgbuild.replace("%exe_link%", version_info["ym"]["exe_link"]) pkgbuild = pkgbuild.replace("%exe_sha256%", version_info["ym"]["exe_sha256"]) with open(pkgbuild_path, "w") as f: f.write(pkgbuild) # Nix def is_nix_version_2_19(): version = subprocess.run(["nix", "--version"], capture_output=True, text=True).stdout.split()[2] print(f"Nix version: {version}") major, minor, _ = map(int, version.split(".")) if major > 2 or (minor >= 19 and major == 2): return True return False def generate_nix(): nixcmd = "nix --extra-experimental-features nix-command --extra-experimental-features flakes" flake_path = os.path.join(script_dir, "../flake.nix") # Update url in flake.nix with open(flake_path, "r") as f: flake = f.read() _start_index = flake.find("ymExe.url = ") _end_index = flake.find(";", _start_index) flake = flake.replace(flake[_start_index:_end_index + 1], f'ymExe.url = "{version_info["ym"]["exe_link"]}";') with open(flake_path, "w") as f: f.write(flake) if not check_dependency("nix"): print("flake.nix was updated, but nix is not installed to update flake.lock") return if is_nix_version_2_19(): subprocess.run(f"{nixcmd} flake update ymExe", shell=True) else: subprocess.run(f"{nixcmd} flake lock --update-input ymExe", shell=True) if subprocess.run("git status --porcelain -- flake.lock", shell=True).stdout: subprocess.run(f"{nixcmd} flake update", shell=True) generate_arch() generate_nix()