mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-26 17:03:01 +00:00
88 lines
2.0 KiB
Python
Executable File
88 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i python -p python3 python3Packages.looseversion common-updater-scripts nurl
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import re
|
|
from looseversion import LooseVersion
|
|
from subprocess import run
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--lts", action="store_true")
|
|
parser.add_argument("--regex")
|
|
args = parser.parse_args()
|
|
|
|
nixpkgs_path = os.environ["PWD"]
|
|
|
|
attr = "incus"
|
|
file = f"pkgs/by-name/in/incus/package.nix"
|
|
if args.lts:
|
|
attr = "incus-lts"
|
|
file = f"pkgs/by-name/in/incus/lts.nix"
|
|
|
|
tags = (
|
|
run(["list-git-tags", "--url=https://github.com/lxc/incus"], capture_output=True)
|
|
.stdout.decode("utf-8")
|
|
.splitlines()
|
|
)
|
|
tags = [t.lstrip("v") for t in tags]
|
|
|
|
latest_version = "0"
|
|
for tag in tags:
|
|
if args.regex != None and not re.match(args.regex, tag):
|
|
continue
|
|
|
|
if LooseVersion(tag) > LooseVersion(latest_version):
|
|
latest_version = tag
|
|
|
|
current_version = (
|
|
run(
|
|
["nix", "eval", "--raw", "-f", "default.nix", f"{attr}.version"],
|
|
capture_output=True,
|
|
)
|
|
.stdout.decode("utf-8")
|
|
.strip()
|
|
)
|
|
|
|
if LooseVersion(latest_version) <= LooseVersion(current_version):
|
|
print("No update available")
|
|
exit(0)
|
|
|
|
print(f"Found new version {latest_version} > {current_version}")
|
|
|
|
run(["update-source-version", attr, latest_version, f"--file={file}"])
|
|
|
|
current_vendor_hash = (
|
|
run(
|
|
[
|
|
"nix-instantiate",
|
|
".",
|
|
"--eval",
|
|
"--strict",
|
|
"-A",
|
|
f"{attr}.goModules.drvAttrs.outputHash",
|
|
"--json",
|
|
],
|
|
capture_output=True,
|
|
)
|
|
.stdout.decode("utf-8")
|
|
.strip()
|
|
.strip('"')
|
|
)
|
|
|
|
latest_vendor_hash = (
|
|
run(
|
|
["nurl", "--expr", f"(import {nixpkgs_path} {{}}).{attr}.goModules"],
|
|
capture_output=True,
|
|
)
|
|
.stdout.decode("utf-8")
|
|
.strip()
|
|
)
|
|
|
|
with open(file, "r+") as f:
|
|
file_content = f.read()
|
|
file_content = re.sub(current_vendor_hash, latest_vendor_hash, file_content)
|
|
f.seek(0)
|
|
f.write(file_content)
|