From 9185a8835682bf4a917831f2adfc6b419c268014 Mon Sep 17 00:00:00 2001 From: JoshLafleur Date: Tue, 11 Feb 2025 10:49:19 -0500 Subject: [PATCH] Support '--package' option and tar all flashable, debug, and dbc outputs as well as store as artifacts on PR's. --- .github/workflows/standard_checks.yml | 15 ++++++ SConstruct | 32 +++++++++++- components/bootloaders/STM/stm32f1/SConscript | 32 ++++++------ site_scons/site_tools/package.py | 50 ------------------- 4 files changed, 61 insertions(+), 68 deletions(-) delete mode 100644 site_scons/site_tools/package.py diff --git a/.github/workflows/standard_checks.yml b/.github/workflows/standard_checks.yml index 10b9b4cd..9a9f0c20 100644 --- a/.github/workflows/standard_checks.yml +++ b/.github/workflows/standard_checks.yml @@ -21,6 +21,11 @@ jobs: - name: Execute build for CFR24 run: | scons --platform=cfr24 -j32 --flashable-bootloader + - name: Archive Artifacts + uses: actions/upload-artifact@v4 + with: + name: artifacts-cfr24 + path: platform-artifacts/ cfr25: runs-on: self-hosted container: @@ -37,6 +42,11 @@ jobs: - name: Execute build for CFR25 run: | scons --platform=cfr25 -j32 --flashable-bootloader + - name: Archive Artifacts + uses: actions/upload-artifact@v4 + with: + name: artifacts-cfr25 + path: platform-artifacts/ updaters: runs-on: self-hosted container: @@ -53,3 +63,8 @@ jobs: - name: Execute build for all bootloader updaters run: | scons --targets=bl:1000,1001,1002,1003,1004,1005,1010,1011 -j32 + - name: Archive Artifacts + uses: actions/upload-artifact@v4 + with: + name: artifacts-bootloader_updater + path: platform-artifacts/ diff --git a/SConstruct b/SConstruct index c5ecb8f8..16fee3e4 100644 --- a/SConstruct +++ b/SConstruct @@ -3,6 +3,7 @@ from os import environ from re import compile, findall, search +from SCons.Node import NodeList from SCons.Script import ( AddOption, Default, @@ -11,11 +12,12 @@ from SCons.Script import ( Exit, GetOption, SConscript, + File ) from oyaml import safe_load # create a global environment which all targets can start from -GlobalEnv = Environment(REPO_ROOT_DIR=Dir("#"), tools=[]) +GlobalEnv = Environment(REPO_ROOT_DIR=Dir("#"), tools=[ "tar" ]) try: GlobalEnv["ENV"]["TERM"] = environ["TERM"] except Exception: @@ -169,3 +171,31 @@ if PlatformEnv["ARTIFACTS"]: openocd_gdb = debug_env.openocd_gdb(artifact, *args) Default(openocd_gdb) + +PlatformEnv.Append( + TARFLAGS = '-c -z', +) + +def flatten(sequence: list) -> list: + new_list = [] + for item in sequence: + if type(item) != list and type(item) != NodeList: + new_list.append(item) + else: + new_list.extend(flatten(item)) + return new_list + +AddOption("--package", dest="package", action="store_true") + +artifacts = [] +for key, value in PlatformEnv["ARTIFACTS"].items(): + if type(value) is dict: + for name, val in value.items(): + if "ARTIFACT" in name: + artifacts.append(val["artifact"]) +plat_name = GetOption("platform") or "artifacts" +package = PlatformEnv.Tar(f"platform-artifacts/{plat_name}.tgz", [ file.abspath for file in flatten(artifacts) ]) +Depends(package, artifacts) + +if GetOption("package"): + Default(package) diff --git a/components/bootloaders/STM/stm32f1/SConscript b/components/bootloaders/STM/stm32f1/SConscript index 986205f2..8004af69 100644 --- a/components/bootloaders/STM/stm32f1/SConscript +++ b/components/bootloaders/STM/stm32f1/SConscript @@ -274,22 +274,20 @@ Alias("asms", asms) # Return artifacts to the caller artifacts = {} -if len(binaries) == 1: - artifacts["FLASHABLE_ARTIFACT"] = { - "artifact": binaries[0], - "addr": APP_START_ADDR, - "tools": ["st-flash"], - } - -if len(elfs) == 1: - artifacts["DEBUG_ARTIFACT"] = { - "artifact": elfs[0], - "args": [], - "tools": ["gcc-arm-none-eabi", "openocd"], - "env": { - "OPENOCD_INTERFACE": "stlink", - "OPENOCD_MCU": "stm32f103c8", - }, - } +artifacts["FLASHABLE_ARTIFACT"] = { + "artifact": binaries_crced, + "addr": APP_START_ADDR, + "tools": ["st-flash"], +} + +artifacts["DEBUG_ARTIFACT"] = { + "artifact": elfs, + "args": [], + "tools": ["gcc-arm-none-eabi", "openocd"], + "env": { + "OPENOCD_INTERFACE": "stlink", + "OPENOCD_MCU": "stm32f103c8", + }, +} Return("artifacts") diff --git a/site_scons/site_tools/package.py b/site_scons/site_tools/package.py deleted file mode 100644 index 49e22d20..00000000 --- a/site_scons/site_tools/package.py +++ /dev/null @@ -1,50 +0,0 @@ -from os import walk -from SCons.Script import Action, Builder, File, Dir, Flatten, Glob - -globs = ["*.hex", "*.bin", "*.elf", "*.dbc"] - -def recursive_glob(dir, glob): - ret = [] - for root, dirnames, _ in walk(dir.abspath): - ret.extend([Glob(f"{dir}/{glob}") for dir in [root] + dirnames]) - return Flatten(ret) - - -def package(env, output_tar: File): - files = [] - for glob in globs: - for file in recursive_glob(env["PLATFORM_ARTIFACTS"], glob): - files.append(file) - - env._package(output_tar=output_tar, file=files) - return env["PLATFORM_ARTIFACTS"].File(f"{env['PLATFORM_ID']}-package.tgz") - - -def emit(target, source, env): - for glob in globs: - for file in recursive_glob(env["PLATFORM_ARTIFACTS"], glob): - source.append(file) - - target.append(env["PLATFORM_ARTIFACTS"].File(f"{env['PLATFORM_ID']}-package.tgz")) - return (target, source) - - -def generate(env): - env.Replace( - PACKAGECOM="tar -cvzf $output_tar $file", - PACKAGECOMSTR=f"Packaging {env['PLATFORM_ID']} into $output_tar", - ) - - env["BUILDERS"]["_package"] = Builder( - action=Action( - "$PACKAGECOM", - cmdstr="$PACKAGECOMSTR", - ), - emitter=emit, - ) - - env.AddMethod(package, "Package") - - -def exists(): - return True