From: Paul Spooren Date: Mon, 13 Sep 2021 09:44:04 +0000 (-1000) Subject: build: store artifacts in JSON X-Git-Tag: mikrotik~1295 X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=5ef4608c02ef6db9698c8d10011b9c14a8ca073b;p=openwrt%2Fstaging%2Fchunkeey.git 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 --- 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=(",", ":")))