23859991e9
Co-Authored-By: bennofs <benno.fuenfstueck@gmail.com>
70 lines
2.3 KiB
Python
Executable File
70 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env nix-shell
|
|
#!nix-shell --pure -i python3 -p "python3.withPackages (ps: with ps; [ requests ])"
|
|
|
|
import json
|
|
import re
|
|
import requests
|
|
import sys
|
|
|
|
releases = ["openjdk11"]
|
|
oses = ["mac", "linux"]
|
|
types = ["jre", "jdk"]
|
|
impls = ["hotspot", "openj9"]
|
|
|
|
arch_to_nixos = {
|
|
"x64": "x86_64",
|
|
"aarch64": "aarch64",
|
|
}
|
|
|
|
def get_sha256(url):
|
|
resp = requests.get(url)
|
|
if resp.status_code != 200:
|
|
print("error: could not fetch checksum from url {}: code {}".format(url, resp.code), file=sys.stderr)
|
|
sys.exit(1)
|
|
return resp.text.strip().split(" ")[0]
|
|
|
|
RE_RELEASE_NAME = re.compile(r'[^-]+-([0-9.]+)\+([0-9]+)') # example release name: jdk-11.0.1+13
|
|
def generate_sources(release, assets):
|
|
out = {}
|
|
for asset in assets:
|
|
if asset["os"] not in oses: continue
|
|
if asset["binary_type"] not in types: continue
|
|
if asset["openjdk_impl"] not in impls: continue
|
|
if asset["heap_size"] != "normal": continue
|
|
if asset["architecture"] not in arch_to_nixos: continue
|
|
|
|
version, build = RE_RELEASE_NAME.match(asset["release_name"]).groups()
|
|
|
|
type_map = out.setdefault(asset["os"], {})
|
|
impl_map = type_map.setdefault(asset["binary_type"], {})
|
|
arch_map = impl_map.setdefault(asset["openjdk_impl"], {
|
|
"version": version,
|
|
"build": build,
|
|
"packageType": asset["binary_type"],
|
|
"vmType": asset["openjdk_impl"],
|
|
})
|
|
|
|
if arch_map["version"] != version or arch_map["build"] != build:
|
|
print("error: architectures have different latest versions ({}+{} vs {}+{})".format(
|
|
arch_map["version"], arch_map["build"], version, build
|
|
), file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
arch_map[arch_to_nixos[asset["architecture"]]] = {
|
|
"url": asset["binary_link"],
|
|
"sha256": get_sha256(asset["checksum_link"]),
|
|
}
|
|
|
|
return out
|
|
|
|
out = {}
|
|
for release in releases:
|
|
resp = requests.get("https://api.adoptopenjdk.net/v2/latestAssets/releases/" + release)
|
|
if resp.status_code != 200:
|
|
print("error: could not fetch data for release {} (code {})".format(release, resp.code), file=sys.stderr)
|
|
sys.exit(1)
|
|
out[release] = generate_sources(release, resp.json())
|
|
|
|
with open("sources.json", "w") as f:
|
|
json.dump(out, f, indent=2, sort_keys=True)
|