| #!/usr/bin/env python3 |
| |
| from os import getenv, environ |
| from pathlib import Path |
| from subprocess import run, PIPE |
| from sys import argv |
| import json |
| |
| if len(argv) != 2: |
| print("JSON info files script requires output file as argument") |
| exit(1) |
| |
| output_path = Path(argv[1]) |
| |
| assert getenv("WORK_DIR"), "$WORK_DIR required" |
| |
| work_dir = Path(getenv("WORK_DIR")) |
| |
| output = {} |
| |
| |
| def get_initial_output(image_info): |
| # preserve existing profiles.json |
| if output_path.is_file(): |
| profiles = json.loads(output_path.read_text()) |
| if profiles["version_code"] == image_info["version_code"]: |
| return profiles |
| return image_info |
| |
| |
| for json_file in work_dir.glob("*.json"): |
| image_info = json.loads(json_file.read_text()) |
| |
| if not output: |
| output = get_initial_output(image_info) |
| |
| # get first and only profile in json file |
| device_id, profile = next(iter(image_info["profiles"].items())) |
| if device_id not in output["profiles"]: |
| output["profiles"][device_id] = profile |
| else: |
| output["profiles"][device_id]["images"].extend(profile["images"]) |
| |
| # make image lists unique by name, keep last/latest |
| for device_id, profile in output.get("profiles", {}).items(): |
| profile["images"] = list({e["name"]: e for e in profile["images"]}.values()) |
| |
| |
| if output: |
| ( |
| default_packages, |
| output["arch_packages"], |
| linux_version, |
| linux_release, |
| linux_vermagic, |
| ) = run( |
| [ |
| "make", |
| "--no-print-directory", |
| "-C", |
| "target/linux/", |
| "val.DEFAULT_PACKAGES", |
| "val.ARCH_PACKAGES", |
| "val.LINUX_VERSION", |
| "val.LINUX_RELEASE", |
| "val.LINUX_VERMAGIC", |
| "V=s", |
| ], |
| stdout=PIPE, |
| check=True, |
| env=environ.copy().update({"TOPDIR": Path().cwd()}), |
| universal_newlines=True, |
| ).stdout.splitlines() |
| |
| output["default_packages"] = sorted(default_packages.split()) |
| output["linux_kernel"] = { |
| "version": linux_version, |
| "release": linux_release, |
| "vermagic": linux_vermagic, |
| } |
| output_path.write_text(json.dumps(output, sort_keys=True, separators=(",", ":"))) |
| else: |
| print("JSON info file script could not find any JSON files for target") |