diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/json_add_image_info.py | 74 | ||||
-rwxr-xr-x | scripts/json_overview_image_info.py | 39 |
2 files changed, 80 insertions, 33 deletions
diff --git a/scripts/json_add_image_info.py b/scripts/json_add_image_info.py index 44b4031f85..b6628113ac 100755 --- a/scripts/json_add_image_info.py +++ b/scripts/json_add_image_info.py @@ -1,18 +1,22 @@ #!/usr/bin/env python3 -import json -import os +from os import getenv +from pathlib import Path +from sys import argv import hashlib +import json +if len(argv) != 2: + print("ERROR: JSON info script requires output arg") + exit(1) -def e(variable, default=None): - return os.environ.get(variable, default) - - -json_path = "{}{}{}.json".format(e("BIN_DIR"), os.sep, e("IMAGE_PREFIX")) +json_path = Path(argv[1]) +bin_dir = Path(getenv("BIN_DIR")) +image_file = bin_dir / getenv("IMAGE_NAME") -with open(os.path.join(e("BIN_DIR"), e("IMAGE_NAME")), "rb") as image_file: - image_hash = hashlib.sha256(image_file.read()).hexdigest() +if not image_file.is_file(): + print("Skip JSON creation for non existing image ", image_file) + exit(0) def get_titles(): @@ -20,36 +24,40 @@ def get_titles(): for prefix in ["", "ALT0_", "ALT1_", "ALT2_"]: title = {} for var in ["vendor", "model", "variant"]: - if e("DEVICE_{}{}".format(prefix, var.upper())): - title[var] = e("DEVICE_{}{}".format(prefix, var.upper())) + if getenv("DEVICE_{}{}".format(prefix, var.upper())): + title[var] = getenv("DEVICE_{}{}".format(prefix, var.upper())) if title: titles.append(title) if not titles: - titles.append({"title": e("DEVICE_TITLE")}) + titles.append({"title": getenv("DEVICE_TITLE")}) return titles -if not os.path.exists(json_path): - device_info = { - "id": e("DEVICE_ID"), - "image_prefix": e("IMAGE_PREFIX"), - "images": [], - "metadata_version": 1, - "supported_devices": e("SUPPORTED_DEVICES").split(), - "target": "{}/{}".format(e("TARGET"), e("SUBTARGET", "generic")), - "titles": get_titles(), - "version_commit": e("VERSION_CODE"), - "version_number": e("VERSION_NUMBER"), - } -else: - with open(json_path, "r") as json_file: - device_info = json.load(json_file) - -image_info = {"type": e("IMAGE_TYPE"), "name": e("IMAGE_NAME"), "sha256": image_hash} -device_info["images"].append(image_info) - -with open(json_path, "w") as json_file: - json.dump(device_info, json_file, sort_keys=True, indent=" ") +device_id = getenv("DEVICE_ID") +image_hash = hashlib.sha256(image_file.read_bytes()).hexdigest() + +image_info = { + "metadata_version": 1, + "target": "{}/{}".format(getenv("TARGET"), getenv("SUBTARGET")), + "version_code": getenv("VERSION_CODE"), + "version_number": getenv("VERSION_NUMBER"), + "profiles": { + device_id: { + "image_prefix": getenv("IMAGE_PREFIX"), + "images": [ + { + "type": getenv("IMAGE_TYPE"), + "name": getenv("IMAGE_NAME"), + "sha256": image_hash, + } + ], + "supported_devices": getenv("SUPPORTED_DEVICES").split(), + "titles": get_titles(), + } + }, +} + +json_path.write_text(json.dumps(image_info, separators=(",", ":"))) diff --git a/scripts/json_overview_image_info.py b/scripts/json_overview_image_info.py new file mode 100755 index 0000000000..5ed829249b --- /dev/null +++ b/scripts/json_overview_image_info.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +import json +from pathlib import Path +from os import getenv +from sys import argv + +if len(argv) != 2: + print("JSON info files script requires ouput file as argument") + exit(1) + +output_path = Path(argv[1]) + +assert getenv("WORK_DIR"), "$WORK_DIR required" + +work_dir = Path(getenv("WORK_DIR")) + +assert work_dir.is_dir(), "$WORK_DIR not a directory" + +output = {} + +for json_file in work_dir.glob("*.json"): + image_info = json.loads(json_file.read_text()) + if not output: + output.update(image_info) + else: + # get first (and only) profile in json file + device_id = next(iter(image_info["profiles"].keys())) + if device_id not in output["profiles"]: + output["profiles"].update(image_info["profiles"]) + else: + output["profiles"][device_id]["images"].append( + image_info["profiles"][device_id]["images"][0] + ) + +if output: + 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") |