From f38dcea1f1188eaa513074b217944f1658024f27 Mon Sep 17 00:00:00 2001 From: cjkas Date: Tue, 24 Mar 2026 20:08:17 +0100 Subject: [PATCH] add archive for last 10 builds --- .gitignore | 3 ++- archive_elf.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ platformio.ini | 22 ++++++++++++++-------- 3 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 archive_elf.py diff --git a/.gitignore b/.gitignore index 5609aab..d384d46 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ data/ build/ coredump_report.txt coredump.bin -logs/ \ No newline at end of file +logs/ +elf_archive/ \ No newline at end of file diff --git a/archive_elf.py b/archive_elf.py new file mode 100644 index 0000000..0e5416e --- /dev/null +++ b/archive_elf.py @@ -0,0 +1,45 @@ +""" +PlatformIO post-build script: archive firmware.elf files. + +Copies firmware.elf to elf_archive/ with a timestamp after each build. +Keeps only the last 10 files to avoid filling up disk space. + +Usage in platformio.ini +----------------------- + extra_scripts = post:archive_elf.py +""" + +Import("env") + +import os +import shutil +from datetime import datetime + +MAX_ARCHIVES = 10 +ARCHIVE_DIR = os.path.join(env.subst("$PROJECT_DIR"), "elf_archive") + + +def archive_elf(source, target, env): + elf_path = os.path.join(env.subst("$BUILD_DIR"), "firmware.elf") + if not os.path.isfile(elf_path): + print("[archive_elf] firmware.elf not found, skipping.") + return + + os.makedirs(ARCHIVE_DIR, exist_ok=True) + + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + dest = os.path.join(ARCHIVE_DIR, f"firmware_{timestamp}.elf") + shutil.copy2(elf_path, dest) + print(f"[archive_elf] Saved {dest}") + + # Keep only the last MAX_ARCHIVES files + files = sorted( + [f for f in os.listdir(ARCHIVE_DIR) if f.endswith(".elf")], + ) + while len(files) > MAX_ARCHIVES: + old = os.path.join(ARCHIVE_DIR, files.pop(0)) + os.remove(old) + print(f"[archive_elf] Removed old archive {old}") + + +env.AddPostAction("$BUILD_DIR/firmware.elf", archive_elf) diff --git a/platformio.ini b/platformio.ini index 2141691..78f2179 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,30 +1,38 @@ ; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html [platformio] -default_envs = esp32dev +default_envs = esp32devdbg -; Shared settings for all environments [env] platform = espressif32 framework = arduino -lib_deps = +lib_deps = bblanchon/ArduinoJson@^7.2.2 lsatan/SmartRC-CC1101-Driver-Lib@^2.5.7 knolleary/PubSubClient@^2.8 esp32async/ESPAsyncWebServer@^3.10.3 esp32async/AsyncTCP@^3.4.10 -extra_scripts = pre:minify.py +extra_scripts = + pre:minify.py + post:archive_elf.py board_build.partitions = huge_app.csv board_build.filesystem = littlefs -build_flags = +build_flags = -DCONFIG_ESP_COREDUMP_ENABLE_TO_FLASH=1 -DCONFIG_ESP_COREDUMP_DATA_FORMAT_ELF=1 -DCONFIG_ESP_COREDUMP_CHECKSUM_CRC32=1 -DCONFIG_ESP_TASK_WDT_PANIC=1 -DCONFIG_ESP_COREDUMP_DECODE_INFO=1 monitor_speed = 115200 -monitor_filters = +monitor_filters = time esp32_exception_decoder log2file @@ -35,5 +43,3 @@ board = esp32dev [env:esp32devdbg] board = esp32dev build_type = debug - -