浏览代码

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 <[email protected]>
Paul Spooren 4 年之前
父节点
当前提交
5ef4608c02
共有 2 个文件被更改,包括 52 次插入17 次删除
  1. 38 7
      include/image.mk
  2. 14 10
      scripts/json_add_image_info.py

+ 38 - 7
include/image.mk

@@ -494,9 +494,9 @@ define Device/Build/initramfs
 	DEVICE_ID="$(1)" \
 	DEVICE_ID="$(1)" \
 	BIN_DIR="$(BIN_DIR)" \
 	BIN_DIR="$(BIN_DIR)" \
 	SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \
 	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_IMG_PREFIX="$$(DEVICE_IMG_PREFIX)" \
 	DEVICE_VENDOR="$$(DEVICE_VENDOR)" \
 	DEVICE_VENDOR="$$(DEVICE_VENDOR)" \
 	DEVICE_MODEL="$$(DEVICE_MODEL)" \
 	DEVICE_MODEL="$$(DEVICE_MODEL)" \
@@ -601,9 +601,9 @@ define Device/Build/image
 	DEVICE_ID="$(DEVICE_NAME)" \
 	DEVICE_ID="$(DEVICE_NAME)" \
 	BIN_DIR="$(BIN_DIR)" \
 	BIN_DIR="$(BIN_DIR)" \
 	SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \
 	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_IMG_PREFIX="$(DEVICE_IMG_PREFIX)" \
 	DEVICE_VENDOR="$(DEVICE_VENDOR)" \
 	DEVICE_VENDOR="$(DEVICE_VENDOR)" \
 	DEVICE_MODEL="$(DEVICE_MODEL)" \
 	DEVICE_MODEL="$(DEVICE_MODEL)" \
@@ -629,7 +629,9 @@ define Device/Build/image
 endef
 endef
 
 
 define Device/Build/artifact
 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)))
   $(eval $(call Device/Export,$(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1)))
   $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1): $$(KDIR_KERNEL_IMAGE) $(2)-images
   $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1): $$(KDIR_KERNEL_IMAGE) $(2)-images
 	@rm -f $$@
 	@rm -f $$@
@@ -640,6 +642,35 @@ define Device/Build/artifact
   $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1): $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1)
   $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1): $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1)
 	cp $$^ $$@
 	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
 endef
 
 
 define Device/Build
 define Device/Build

+ 14 - 10
scripts/json_add_image_info.py

@@ -12,10 +12,10 @@ if len(argv) != 2:
 
 
 json_path = Path(argv[1])
 json_path = Path(argv[1])
 bin_dir = Path(getenv("BIN_DIR"))
 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)
     exit(0)
 
 
 
 
@@ -37,9 +37,9 @@ def get_titles():
 
 
 
 
 device_id = getenv("DEVICE_ID")
 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,
     "metadata_version": 1,
     "target": "{}/{}".format(getenv("TARGET"), getenv("SUBTARGET")),
     "target": "{}/{}".format(getenv("TARGET"), getenv("SUBTARGET")),
     "version_code": getenv("VERSION_CODE"),
     "version_code": getenv("VERSION_CODE"),
@@ -50,10 +50,9 @@ image_info = {
             "image_prefix": getenv("DEVICE_IMG_PREFIX"),
             "image_prefix": getenv("DEVICE_IMG_PREFIX"),
             "images": [
             "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(),
             "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=(",", ":")))