[openwrt/openwrt] build: store artifacts in JSON

LEDE Commits lede-commits at lists.infradead.org
Tue Sep 14 13:44:35 PDT 2021


aparcar pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/5ef4608c02ef6db9698c8d10011b9c14a8ca073b

commit 5ef4608c02ef6db9698c8d10011b9c14a8ca073b
Author: Paul Spooren <mail at aparcar.org>
AuthorDate: Sun Sep 12 23:44:04 2021 -1000

    build: store artifacts in JSON
    
    Multiple profiles create artifacts, these should be stored in the JSON
    file as well, allowing downstream tooling to show those files, too.
    
    Artifacts don't have specific filesystems so only the fields `name`,
    `type` and `sha256` are available.
    
    Rename env variable names from IMAGE_ to FILE_ prefixes to reflect that
    images, kernels and artifacts are added with the same command.
    
    Signed-off-by: Paul Spooren <mail at aparcar.org>
---
 include/image.mk               | 45 +++++++++++++++++++++++++++++++++++-------
 scripts/json_add_image_info.py | 24 ++++++++++++----------
 2 files changed, 52 insertions(+), 17 deletions(-)

diff --git a/include/image.mk b/include/image.mk
index 6298e3085e..1150f84ce5 100644
--- a/include/image.mk
+++ b/include/image.mk
@@ -494,9 +494,9 @@ define Device/Build/initramfs
 	DEVICE_ID="$(1)" \
 	BIN_DIR="$(BIN_DIR)" \
 	SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \
-	DEVICE_IMG_NAME="$$(notdir $$^)" \
-	IMAGE_TYPE="kernel" \
-	IMAGE_FILESYSTEM="initramfs" \
+	FILE_NAME="$$(notdir $$^)" \
+	FILE_TYPE="kernel" \
+	FILE_FILESYSTEM="initramfs" \
 	DEVICE_IMG_PREFIX="$$(DEVICE_IMG_PREFIX)" \
 	DEVICE_VENDOR="$$(DEVICE_VENDOR)" \
 	DEVICE_MODEL="$$(DEVICE_MODEL)" \
@@ -601,9 +601,9 @@ define Device/Build/image
 	DEVICE_ID="$(DEVICE_NAME)" \
 	BIN_DIR="$(BIN_DIR)" \
 	SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \
-	DEVICE_IMG_NAME="$(DEVICE_IMG_NAME)" \
-	IMAGE_TYPE=$(word 1,$(subst ., ,$(2))) \
-	IMAGE_FILESYSTEM="$(1)" \
+	FILE_NAME="$(DEVICE_IMG_NAME)" \
+	FILE_TYPE=$(word 1,$(subst ., ,$(2))) \
+	FILE_FILESYSTEM="$(1)" \
 	DEVICE_IMG_PREFIX="$(DEVICE_IMG_PREFIX)" \
 	DEVICE_VENDOR="$(DEVICE_VENDOR)" \
 	DEVICE_MODEL="$(DEVICE_MODEL)" \
@@ -629,7 +629,9 @@ define Device/Build/image
 endef
 
 define Device/Build/artifact
-  $$(_TARGET): $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1)
+  $$(_TARGET): $(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \
+	  $(BUILD_DIR)/json_info_files/$(DEVICE_IMG_PREFIX)-$(1).json, \
+	  $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1))
   $(eval $(call Device/Export,$(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1)))
   $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1): $$(KDIR_KERNEL_IMAGE) $(2)-images
 	@rm -f $$@
@@ -640,6 +642,35 @@ define Device/Build/artifact
   $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1): $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1)
 	cp $$^ $$@
 
+  $(BUILD_DIR)/json_info_files/$(DEVICE_IMG_PREFIX)-$(1).json: $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1)
+	@mkdir -p $$(shell dirname $$@)
+	DEVICE_ID="$(DEVICE_NAME)" \
+	BIN_DIR="$(BIN_DIR)" \
+	SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \
+	FILE_NAME="$(DEVICE_IMG_PREFIX)-$(1)" \
+	FILE_TYPE="$(1)" \
+	DEVICE_IMG_PREFIX="$(DEVICE_IMG_PREFIX)" \
+	DEVICE_VENDOR="$(DEVICE_VENDOR)" \
+	DEVICE_MODEL="$(DEVICE_MODEL)" \
+	DEVICE_VARIANT="$(DEVICE_VARIANT)" \
+	DEVICE_ALT0_VENDOR="$(DEVICE_ALT0_VENDOR)" \
+	DEVICE_ALT0_MODEL="$(DEVICE_ALT0_MODEL)" \
+	DEVICE_ALT0_VARIANT="$(DEVICE_ALT0_VARIANT)" \
+	DEVICE_ALT1_VENDOR="$(DEVICE_ALT1_VENDOR)" \
+	DEVICE_ALT1_MODEL="$(DEVICE_ALT1_MODEL)" \
+	DEVICE_ALT1_VARIANT="$(DEVICE_ALT1_VARIANT)" \
+	DEVICE_ALT2_VENDOR="$(DEVICE_ALT2_VENDOR)" \
+	DEVICE_ALT2_MODEL="$(DEVICE_ALT2_MODEL)" \
+	DEVICE_ALT2_VARIANT="$(DEVICE_ALT2_VARIANT)" \
+	DEVICE_TITLE="$(DEVICE_TITLE)" \
+	DEVICE_PACKAGES="$(DEVICE_PACKAGES)" \
+	TARGET="$(BOARD)" \
+	SUBTARGET="$(if $(SUBTARGET),$(SUBTARGET),generic)" \
+	VERSION_NUMBER="$(VERSION_NUMBER)" \
+	VERSION_CODE="$(VERSION_CODE)" \
+	SUPPORTED_DEVICES="$(SUPPORTED_DEVICES)" \
+	$(TOPDIR)/scripts/json_add_image_info.py $$@
+
 endef
 
 define Device/Build
diff --git a/scripts/json_add_image_info.py b/scripts/json_add_image_info.py
index 38cd3c487d..23033f9fc4 100755
--- a/scripts/json_add_image_info.py
+++ b/scripts/json_add_image_info.py
@@ -12,10 +12,10 @@ if len(argv) != 2:
 
 json_path = Path(argv[1])
 bin_dir = Path(getenv("BIN_DIR"))
-image_file = bin_dir / getenv("DEVICE_IMG_NAME")
+file_path = bin_dir / getenv("FILE_NAME")
 
-if not image_file.is_file():
-    print("Skip JSON creation for non existing image ", image_file)
+if not file_path.is_file():
+    print("Skip JSON creation for non existing file", file_path)
     exit(0)
 
 
@@ -37,9 +37,9 @@ def get_titles():
 
 
 device_id = getenv("DEVICE_ID")
-image_hash = hashlib.sha256(image_file.read_bytes()).hexdigest()
+file_hash = hashlib.sha256(file_path.read_bytes()).hexdigest()
 
-image_info = {
+file_info = {
     "metadata_version": 1,
     "target": "{}/{}".format(getenv("TARGET"), getenv("SUBTARGET")),
     "version_code": getenv("VERSION_CODE"),
@@ -50,10 +50,9 @@ image_info = {
             "image_prefix": getenv("DEVICE_IMG_PREFIX"),
             "images": [
                 {
-                    "type": getenv("IMAGE_TYPE"),
-                    "filesystem": getenv("IMAGE_FILESYSTEM"),
-                    "name": getenv("DEVICE_IMG_NAME"),
-                    "sha256": image_hash,
+                    "type": getenv("FILE_TYPE"),
+                    "name": getenv("FILE_NAME"),
+                    "sha256": file_hash,
                 }
             ],
             "device_packages": getenv("DEVICE_PACKAGES").split(),
@@ -63,4 +62,9 @@ image_info = {
     },
 }
 
-json_path.write_text(json.dumps(image_info, separators=(",", ":")))
+if getenv("FILE_FILESYSTEM"):
+    file_info["profiles"][device_id]["images"][0]["filesystem"] = getenv(
+        "FILE_FILESYSTEM"
+    )
+
+json_path.write_text(json.dumps(file_info, separators=(",", ":")))



More information about the lede-commits mailing list