#!/usr/bin/env python3 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) json_path = Path(argv[1]) file_path = Path(getenv("FILE_DIR")) / getenv("FILE_NAME") if not file_path.is_file(): print("Skip JSON creation for non existing file", file_path) exit(0) def get_titles(): titles = [] for prefix in ["", "ALT0_", "ALT1_", "ALT2_", "ALT3_", "ALT4_", "ALT5_"]: title = {} for var in ["vendor", "model", "variant"]: 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": getenv("DEVICE_TITLE")}) return titles device_id = getenv("DEVICE_ID") sha256_hash = hashlib.sha256() with open(str(file_path),"rb") as f: # Read and update hash string value in blocks of 4K for byte_block in iter(lambda: f.read(4096),b""): sha256_hash.update(byte_block) hash_file = sha256_hash.hexdigest() if file_path.with_suffix(file_path.suffix + ".sha256sum").exists(): hash_unsigned = ( file_path.with_suffix(file_path.suffix + ".sha256sum").read_text().strip() ) else: hash_unsigned = hash_file file_info = { "metadata_version": 1, "target": "{}/{}".format(getenv("TARGET"), getenv("SUBTARGET")), "version_code": getenv("VERSION_CODE"), "version_number": getenv("VERSION_NUMBER"), "source_date_epoch": int(getenv("SOURCE_DATE_EPOCH")), "profiles": { device_id: { "image_prefix": getenv("DEVICE_IMG_PREFIX"), "images": [ { "type": getenv("FILE_TYPE"), "name": getenv("FILE_NAME"), "sha256": hash_file, "sha256_unsigned": hash_unsigned, } ], "device_packages": getenv("DEVICE_PACKAGES").split(), "supported_devices": getenv("SUPPORTED_DEVICES").split(), "titles": get_titles(), } }, } if getenv("FILE_FILESYSTEM"): file_info["profiles"][device_id]["images"][0]["filesystem"] = getenv( "FILE_FILESYSTEM" ) json_path.write_text(json.dumps(file_info, separators=(",", ":")))