Sfoglia il codice sorgente

[FL-1989] CI: bootloader & firmware JSON manifests (#786)

* [FL-1989] CI: bootloader & firmware JSON manifests
* CI: reorder steps

Co-authored-by: あく <alleteam@gmail.com>
Anna Prosvetova 4 anni fa
parent
commit
f8542af653
4 ha cambiato i file con 68 aggiunte e 14 eliminazioni
  1. 30 13
      .github/workflows/build.yml
  2. 1 0
      docker/Dockerfile
  3. 5 1
      make/rules.mk
  4. 32 0
      scripts/meta.py

+ 30 - 13
.github/workflows/build.yml

@@ -103,6 +103,32 @@ jobs:
                 -o firmware/.obj/${TARGET}/full.hex -Intel
                 -o firmware/.obj/${TARGET}/full.hex -Intel
             done
             done
 
 
+      - name: 'Generate full dfu file'
+        if: ${{ !github.event.pull_request.head.repo.fork }}
+        uses: ./.github/actions/docker
+        with:
+          run: |
+            for TARGET in ${TARGETS}
+            do
+              hex2dfu \
+                -i firmware/.obj/${TARGET}/full.hex \
+                -o artifacts/flipper-z-${TARGET}-full-${{steps.names.outputs.suffix}}.dfu \
+                -l "Flipper Zero $(echo $TARGET | tr a-z A-Z)"
+            done
+
+      - name: 'Generate full json file'
+        if: ${{ !github.event.pull_request.head.repo.fork }}
+        uses: ./.github/actions/docker
+        with:
+          run: |
+            for TARGET in ${TARGETS}
+            do
+              jq -s '.[0] * .[1]' \
+                bootloader/.obj/${TARGET}/bootloader.json \
+                firmware/.obj/${TARGET}/firmware.json  \
+                > artifacts/flipper-z-${TARGET}-full-${{steps.names.outputs.suffix}}.json
+            done
+
       - name: 'Move upload files'
       - name: 'Move upload files'
         if: ${{ !github.event.pull_request.head.repo.fork }}
         if: ${{ !github.event.pull_request.head.repo.fork }}
         uses: ./.github/actions/docker
         uses: ./.github/actions/docker
@@ -116,25 +142,16 @@ jobs:
                 artifacts/flipper-z-${TARGET}-bootloader-${{steps.names.outputs.suffix}}.bin
                 artifacts/flipper-z-${TARGET}-bootloader-${{steps.names.outputs.suffix}}.bin
               mv bootloader/.obj/${TARGET}/bootloader.elf \
               mv bootloader/.obj/${TARGET}/bootloader.elf \
                 artifacts/flipper-z-${TARGET}-bootloader-${{steps.names.outputs.suffix}}.elf
                 artifacts/flipper-z-${TARGET}-bootloader-${{steps.names.outputs.suffix}}.elf
+              mv bootloader/.obj/${TARGET}/bootloader.json \
+                artifacts/flipper-z-${TARGET}-bootloader-${{steps.names.outputs.suffix}}.json
               mv firmware/.obj/${TARGET}/firmware.dfu \
               mv firmware/.obj/${TARGET}/firmware.dfu \
                 artifacts/flipper-z-${TARGET}-firmware-${{steps.names.outputs.suffix}}.dfu
                 artifacts/flipper-z-${TARGET}-firmware-${{steps.names.outputs.suffix}}.dfu
               mv firmware/.obj/${TARGET}/firmware.bin \
               mv firmware/.obj/${TARGET}/firmware.bin \
                 artifacts/flipper-z-${TARGET}-firmware-${{steps.names.outputs.suffix}}.bin
                 artifacts/flipper-z-${TARGET}-firmware-${{steps.names.outputs.suffix}}.bin
               mv firmware/.obj/${TARGET}/firmware.elf \
               mv firmware/.obj/${TARGET}/firmware.elf \
                 artifacts/flipper-z-${TARGET}-firmware-${{steps.names.outputs.suffix}}.elf
                 artifacts/flipper-z-${TARGET}-firmware-${{steps.names.outputs.suffix}}.elf
-            done
-
-      - name: 'Generate full dfu file'
-        if: ${{ !github.event.pull_request.head.repo.fork }}
-        uses: ./.github/actions/docker
-        with:
-          run: |
-            for TARGET in ${TARGETS}
-            do
-              hex2dfu \
-                -i firmware/.obj/${TARGET}/full.hex \
-                -o artifacts/flipper-z-${TARGET}-full-${{steps.names.outputs.suffix}}.dfu \
-                -l "Flipper Zero $(echo $TARGET | tr a-z A-Z)"
+              mv firmware/.obj/${TARGET}/firmware.json \
+                artifacts/flipper-z-${TARGET}-firmware-${{steps.names.outputs.suffix}}.json
             done
             done
 
 
       - name: 'Full flash asssembly: bootloader as base'
       - name: 'Full flash asssembly: bootloader as base'

+ 1 - 0
docker/Dockerfile

@@ -15,6 +15,7 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --no-instal
         libxml2-dev \
         libxml2-dev \
         libxslt1-dev \
         libxslt1-dev \
         zlib1g-dev \
         zlib1g-dev \
+        jq \
         wget && \
         wget && \
     apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
     apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
 
 

+ 5 - 1
make/rules.mk

@@ -32,7 +32,7 @@ CHECK_AND_REINIT_SUBMODULES_SHELL=\
 	fi
 	fi
 $(info $(shell $(CHECK_AND_REINIT_SUBMODULES_SHELL)))
 $(info $(shell $(CHECK_AND_REINIT_SUBMODULES_SHELL)))
 
 
-all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin $(OBJ_DIR)/$(PROJECT).dfu
+all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin $(OBJ_DIR)/$(PROJECT).dfu $(OBJ_DIR)/$(PROJECT).json
 
 
 $(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS)
 $(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS)
 	@echo "\tLD\t" $@
 	@echo "\tLD\t" $@
@@ -54,6 +54,10 @@ $(OBJ_DIR)/$(PROJECT).dfu: $(OBJ_DIR)/$(PROJECT).hex
 		-o $(OBJ_DIR)/$(PROJECT).dfu \
 		-o $(OBJ_DIR)/$(PROJECT).dfu \
 		-l "Flipper Zero $(shell echo $(TARGET) | tr a-z A-Z)" > /dev/null
 		-l "Flipper Zero $(shell echo $(TARGET) | tr a-z A-Z)" > /dev/null
 
 
+$(OBJ_DIR)/$(PROJECT).json: $(OBJ_DIR)/$(PROJECT).dfu
+	@echo "\tJSON\t" $@
+	@python3 ../scripts/meta.py -p $(PROJECT) $(CFLAGS) > $(OBJ_DIR)/$(PROJECT).json
+
 $(OBJ_DIR)/%.o: %.c $(OBJ_DIR)/BUILD_FLAGS
 $(OBJ_DIR)/%.o: %.c $(OBJ_DIR)/BUILD_FLAGS
 	@echo "\tCC\t" $< "->" $@
 	@echo "\tCC\t" $< "->" $@
 	@$(CC) $(CFLAGS) -c $< -o $@
 	@$(CC) $(CFLAGS) -c $< -o $@

+ 32 - 0
scripts/meta.py

@@ -0,0 +1,32 @@
+#!/usr/bin/env python3
+
+import argparse
+import json
+
+
+class Main:
+    def __init__(self):
+        # parse CFLAGS
+        self.parser = argparse.ArgumentParser(allow_abbrev=False)
+        self.parser.add_argument("-p", dest="project", required=True)
+        self.parser.add_argument("-DBUILD_DATE", dest="build_date", required=True)
+        self.parser.add_argument("-DGIT_COMMIT", dest="commit", required=True)
+        self.parser.add_argument("-DGIT_BRANCH", dest="branch", required=True)
+        self.parser.add_argument("-DTARGET", dest="target", type=int, required=True)
+
+    def __call__(self):
+        self.args, _ = self.parser.parse_known_args()
+
+        meta = {}
+        for k, v in vars(self.args).items():
+            if k == "project":
+                continue
+            if isinstance(v, str):
+                v = v.strip('"')
+            meta[self.args.project + "_" + k] = v
+
+        print(json.dumps(meta, indent=4))
+
+
+if __name__ == "__main__":
+    Main()()