diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/adoptopenjdk-bin/generate-sources.py')
-rwxr-xr-x | nixpkgs/pkgs/development/compilers/adoptopenjdk-bin/generate-sources.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/adoptopenjdk-bin/generate-sources.py b/nixpkgs/pkgs/development/compilers/adoptopenjdk-bin/generate-sources.py new file mode 100755 index 000000000000..40b690048eba --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/adoptopenjdk-bin/generate-sources.py @@ -0,0 +1,63 @@ +#!/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"], { + "packageType": asset["binary_type"], + "vmType": asset["openjdk_impl"], + }) + + arch_map[arch_to_nixos[asset["architecture"]]] = { + "url": asset["binary_link"], + "sha256": get_sha256(asset["checksum_link"]), + "version": version, + "build": build, + } + + 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) |