mirror of
https://github.com/xddxdd/nix-cachyos-kernel.git
synced 2026-07-03 19:18:07 +02:00
119 lines
3.4 KiB
Python
Executable File
119 lines
3.4 KiB
Python
Executable File
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i python3 -p python3 -p python3Packages.requests -p nix-prefetch-git
|
|
|
|
import json
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
from typing import Dict, Any, Optional
|
|
|
|
import requests
|
|
|
|
|
|
def get_latest_zfs_cachyos_branch() -> Optional[str]:
|
|
api_url = "https://api.github.com/repos/CachyOS/zfs/branches"
|
|
all_branches = []
|
|
page = 1
|
|
per_page = 100 # Maximum allowed
|
|
|
|
# Setup headers for GitHub API authentication if token is available
|
|
headers = {}
|
|
github_token = os.environ.get("GITHUB_TOKEN")
|
|
if github_token:
|
|
headers["Authorization"] = f"token {github_token}"
|
|
|
|
while True:
|
|
params = {"per_page": per_page, "page": page}
|
|
response = requests.get(api_url, params=params, headers=headers, timeout=30)
|
|
response.raise_for_status()
|
|
|
|
branches = response.json()
|
|
if not branches:
|
|
break
|
|
|
|
all_branches.extend(branches)
|
|
page += 1
|
|
|
|
# If we got less than per_page results, we're on the last page
|
|
if len(branches) < per_page:
|
|
break
|
|
|
|
cachyos_branches = []
|
|
|
|
branch_pattern = re.compile(r"^zfs-\d+\.\d+\.\d+-cachyos$")
|
|
|
|
for branch in all_branches:
|
|
branch_name = branch.get("name", "")
|
|
if branch_pattern.match(branch_name):
|
|
cachyos_branches.append(branch_name)
|
|
|
|
if not cachyos_branches:
|
|
print("No branch found matching zfs-x.y.z-cachyos or x.y.z-cachyos pattern")
|
|
return None
|
|
|
|
cachyos_branches.sort(reverse=True)
|
|
latest_branch = cachyos_branches[0]
|
|
print(f"Found latest branch: {latest_branch}")
|
|
return latest_branch
|
|
|
|
|
|
def run_nix_prefetch_git(branch: str) -> Optional[Dict[str, Any]]:
|
|
cmd = ["nix-prefetch-git", "https://github.com/CachyOS/zfs.git", "--rev", f"refs/heads/{branch}"]
|
|
|
|
print(f"Running command: {' '.join(cmd)}")
|
|
result = subprocess.run(cmd, capture_output=True, text=True, timeout=300)
|
|
|
|
if result.returncode != 0:
|
|
print(f"nix-prefetch-git command failed with return code: {result.returncode}")
|
|
print(f"Error output: {result.stderr}")
|
|
return None
|
|
|
|
output = result.stdout.strip()
|
|
if not output:
|
|
print("nix-prefetch-git output is empty")
|
|
return None
|
|
|
|
parsed_output = json.loads(output)
|
|
return parsed_output
|
|
|
|
|
|
def save_version_info(branch: str, prefetch_data: Dict[str, Any], output_file: Path):
|
|
with open(output_file, "w", encoding="utf-8") as f:
|
|
json.dump({"zfs_branch": branch, **prefetch_data}, f, indent=2)
|
|
|
|
print(f"Version info saved to: {output_file}")
|
|
|
|
|
|
def main() -> int:
|
|
print("Starting ZFS CachyOS version update...")
|
|
|
|
latest_branch = get_latest_zfs_cachyos_branch()
|
|
if not latest_branch:
|
|
print("Failed to get latest branch, exiting")
|
|
return 1
|
|
|
|
prefetch_data = run_nix_prefetch_git(latest_branch)
|
|
if not prefetch_data:
|
|
print("nix-prefetch-git execution failed, exiting")
|
|
return 1
|
|
|
|
current = Path.cwd()
|
|
while not (current / "flake.lock").exists():
|
|
if current == current.parent:
|
|
print("Could not find flake.lock in any parent directory, exiting")
|
|
return 1
|
|
current = current.parent
|
|
|
|
output_file = current / "zfs-cachyos" / "version.json"
|
|
|
|
save_version_info(latest_branch, prefetch_data, output_file)
|
|
|
|
print("ZFS CachyOS version info update completed!")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|