build: create JSON files containing image info
The JSON info files contain details about the created firmware images
per device and are stored next to the created images.
The JSON files are stored as "$(IMAGE_PREFIX).json" and contain some
device/image meta data as well as a list of created firmware images.
An example of openwrt-ramips-rt305x-aztech_hw550-3g.json
{
"id": "aztech_hw550-3g",
"image_prefix": "openwrt-ramips-rt305x-aztech_hw550-3g",
"images": [
{
"name": "openwrt-ramips-rt305x-aztech_hw550-3g-squashfs-sysupgrade.bin",
"sha256": "db2b34b0ec4a83d9bf612cf66fab0dc3722b191cb9bedf111e5627a4298baf20",
"type": "sysupgrade"
}
],
"metadata_version": 1,
"supported_devices": [
"aztech,hw550-3g",
"hw550-3g"
],
"target": "ramips/rt305x",
"titles": [
{
"model": "HW550-3G",
"vendor": "Aztech"
},
{
"model": "ALL0239-3G",
"vendor": "Allnet"
}
],
"version_commit": "r10920+123-0cc87b3bac",
"version_number": "SNAPSHOT"
}
Signed-off-by: Paul Spooren <mail@aparcar.org>
This commit is contained in:
committed by
Daniel Golle
parent
eba0db95b5
commit
881ed09ee6
55
scripts/json_add_image_info.py
Executable file
55
scripts/json_add_image_info.py
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import json
|
||||
import os
|
||||
import hashlib
|
||||
|
||||
|
||||
def e(variable, default=None):
|
||||
return os.environ.get(variable, default)
|
||||
|
||||
|
||||
json_path = "{}{}{}.json".format(e("BIN_DIR"), os.sep, e("IMAGE_PREFIX"))
|
||||
|
||||
with open(os.path.join(e("BIN_DIR"), e("IMAGE_NAME")), "rb") as image_file:
|
||||
image_hash = hashlib.sha256(image_file.read()).hexdigest()
|
||||
|
||||
|
||||
def get_titles():
|
||||
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 title:
|
||||
titles.append(title)
|
||||
|
||||
if not titles:
|
||||
titles.append({"title": e("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=" ")
|
||||
Reference in New Issue
Block a user