Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.
91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
#! /usr/bin/env nix-shell
|
|||
#! nix-shell -p python3 -i python3
|
|||
import os
|
|||
import urllib.request as ureq
|
|||
import json
|
|||
|
|||
if not all(
|
|||
f"UPDATE_NIX_{v}" in os.environ
|
|||
for v in ["NAME", "PNAME", "OLD_VERSION", "ATTR_PATH"]
|
|||
) or not os.environ['UPDATE_NIX_ATTR_PATH'].startswith("nerd-fonts."):
|
|||
raise Exception(
|
|||
"Please don't run this script manually, only with:\n"
|
|||
"nix-shell maintainers/scripts/update.nix --argstr path nerd-fonts "
|
|||
"--argstr commit true"
|
|||
)
|
|||
|
|||
RELEASE_INFO_URL = "https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest"
|
|||
FONTS_INFO_URL_TEMPLATE = "https://raw.githubusercontent.com/ryanoasis/nerd-fonts/refs/tags/{}/bin/scripts/lib/fonts.json"
|
|||
SHA256_URL_TEMPLATE = "https://github.com/ryanoasis/nerd-fonts/releases/download/{}/SHA-256.txt"
|
|||
|
|||
RELEASE_INFO_FILENAME = "release.json"
|
|||
FONTS_INFO_FILENAME = "fonts.json"
|
|||
CHECKSUMS_FILENAME = "checksums.json"
|
|||
|
|||
def fetchjson(url):
|
|||
with ureq.urlopen(url) as r:
|
|||
return json.loads(r.read())
|
|||
|
|||
def storejson(path, obj):
|
|||
with open(path, "w", encoding="utf-8") as f:
|
|||
json.dump(obj, f, indent=2)
|
|||
# Needed to satisfy EditorConfig's rules
|
|||
f.write('\n')
|
|||
|
|||
def slicedict(d, ks):
|
|||
return {k: d[k] for k in ks}
|
|||
|
|||
os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), "manifests"))
|
|||
|
|||
release_info = slicedict(
|
|||
fetchjson(RELEASE_INFO_URL),
|
|||
["tag_name", "published_at"]
|
|||
)
|
|||
|
|||
tag_name = release_info["tag_name"]
|
|||
with open(RELEASE_INFO_FILENAME, "r", encoding="utf-8") as f:
|
|||
former_tag_name = json.load(f)["tag_name"]
|
|||
if tag_name == former_tag_name:
|
|||
raise Exception("no newer version available")
|
|||
# See: https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#supported-features
|
|||
print(json.dumps(
|
|||
[
|
|||
{
|
|||
"attrPath": "nerd-fonts",
|
|||
"oldVersion": former_tag_name.removeprefix("v"),
|
|||
"newVersion": tag_name.removeprefix("v"),
|
|||
},
|
|||
],
|
|||
indent=2
|
|||
))
|
|||
|
|||
storejson(RELEASE_INFO_FILENAME, release_info)
|
|||
|
|||
storejson(
|
|||
FONTS_INFO_FILENAME,
|
|||
[
|
|||
slicedict(
|
|||
item,
|
|||
[
|
|||
"caskName",
|
|||
"description",
|
|||
"folderName",
|
|||
"licenseId",
|
|||
"patchedName",
|
|||
"version",
|
|||
]
|
|||
)
|
|||
for item in fetchjson(FONTS_INFO_URL_TEMPLATE.format(tag_name))["fonts"]
|
|||
],
|
|||
)
|
|||
|
|||
storejson(
|
|||
CHECKSUMS_FILENAME,
|
|||
{
|
|||
filename: sha256
|
|||
for row in ureq.urlopen(SHA256_URL_TEMPLATE.format(tag_name))
|
|||
for sha256, filename in [row.decode('utf-8').split()]
|
|||
if filename.endswith(".tar.xz")
|
|||
},
|
|||
)
|