mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-29 15:44:04 +00:00
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> (backported from commit 881ed09ee6e23f6c224184bb7493253c4624fb9f) Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
parent
8293c8ed46
commit
8a0362c699
@ -7,6 +7,13 @@
|
||||
|
||||
menu "Global build settings"
|
||||
|
||||
config JSON_ADD_IMAGE_INFO
|
||||
bool "Create JSON info files per build image"
|
||||
default BUILDBOT
|
||||
help
|
||||
The JSON info files contain information about the device and
|
||||
build images, stored next to the firmware images.
|
||||
|
||||
config ALL_NONSHARED
|
||||
bool "Select all target specific packages by default"
|
||||
select ALL_KMODS
|
||||
|
@ -524,7 +524,20 @@ define Device/Build/image
|
||||
|
||||
$(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)): $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2))
|
||||
cp $$^ $$@
|
||||
|
||||
$(if $(CONFIG_JSON_ADD_IMAGE_INFO), \
|
||||
DEVICE_ID="$(DEVICE_NAME)" \
|
||||
BIN_DIR="$(BIN_DIR)" \
|
||||
IMAGE_NAME="$(IMAGE_NAME)" \
|
||||
IMAGE_TYPE=$(word 1,$(subst ., ,$(2))) \
|
||||
IMAGE_PREFIX="$(IMAGE_PREFIX)" \
|
||||
DEVICE_TITLE="$(DEVICE_TITLE)" \
|
||||
TARGET="$(BOARD)" \
|
||||
SUBTARGET="$(SUBTARGET)" \
|
||||
VERSION_NUMBER="$(VERSION_NUMBER)" \
|
||||
VERSION_CODE="$(VERSION_CODE)" \
|
||||
SUPPORTED_DEVICES="$(SUPPORTED_DEVICES)" \
|
||||
$(TOPDIR)/scripts/json_add_image_info.py \
|
||||
)
|
||||
endef
|
||||
|
||||
define Device/Build/artifact
|
||||
@ -542,6 +555,8 @@ define Device/Build/artifact
|
||||
endef
|
||||
|
||||
define Device/Build
|
||||
$(shell rm -f $(BIN_DIR)/$(IMG_PREFIX)-$(1).json)
|
||||
|
||||
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(call Device/Build/initramfs,$(1)))
|
||||
$(call Device/Build/kernel,$(1))
|
||||
|
||||
|
42
scripts/json_add_image_info.py
Executable file
42
scripts/json_add_image_info.py
Executable file
@ -0,0 +1,42 @@
|
||||
#!/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():
|
||||
return [{"title": e("DEVICE_TITLE")}]
|
||||
|
||||
|
||||
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=" ")
|
Loading…
x
Reference in New Issue
Block a user