-
Notifications
You must be signed in to change notification settings - Fork 4
build
build.sh — companion build suffixes, uf2conv fix, auto build date / build.sh — суффиксы companion-сборок, uf2conv fix, auto build date
Files: build.sh, bin/uf2conv/uf2conv.py, git_version.py
# before:
build_all_firmwares_by_suffix "_companion_radio_usb"
build_all_firmwares_by_suffix "_companion_radio_ble"
# after:
build_all_firmwares_by_suffix "_companion_radio_usb"
build_all_firmwares_by_suffix "_companion_radio_ble"
build_all_firmwares_by_suffix "_companion_usb" # + new
build_all_firmwares_by_suffix "_companion_ble" # + newAdded suffixes _companion_usb and _companion_ble for variants that don't include _radio in their suffix.
Symptom: nRF52 builds produced a .zip (Nordic DFU) but not a .uf2. Affected all nRF52 boards when building on Linux (GitHub Actions).
Cause: bin/uf2conv/uf2conv.py, function convert_from_hex_to_uf2 — accessing line[0] on an empty string:
# before (crashed with IndexError on the empty line at end of .hex file):
for line in buf.split('\n'):
if line[0] != ":":
continue
# after:
for line in buf.split('\n'):
if not line or line[0] != ":":
continueIntel HEX files on Linux always end with \n, which after split('\n') yields an empty string at the end. ""[0] → IndexError. Python exited with code 1, build.sh without set -e silently continued, and the .uf2 was never produced.
Additionally: added an error message in build.sh so failures like this are visible in CI logs:
python3 bin/uf2conv/uf2conv.py ... || echo "WARNING: uf2conv failed for $1 — .uf2 will not be produced"Before: FIRMWARE_BUILD_DATE was set manually in build.sh using date and passed as a build flag. When running pio run directly (without build.sh), a hardcoded value from MyMesh.h was used.
After: git_version.py injects FIRMWARE_BUILD_DATE as a C define on every build:
date_str = datetime.now().strftime("%d %b %Y")
env.Append(CPPDEFINES=[("FIRMWARE_BUILD_DATE", '\\"' + date_str + '\\"')])Works both with direct pio run and with GHA builds via build.sh. The hardcoded value in MyMesh.h remains only as an emergency fallback.
Файлы: build.sh, bin/uf2conv/uf2conv.py, git_version.py
# было:
build_all_firmwares_by_suffix "_companion_radio_usb"
build_all_firmwares_by_suffix "_companion_radio_ble"
# стало:
build_all_firmwares_by_suffix "_companion_radio_usb"
build_all_firmwares_by_suffix "_companion_radio_ble"
build_all_firmwares_by_suffix "_companion_usb" # + новый
build_all_firmwares_by_suffix "_companion_ble" # + новыйДобавлены суффиксы _companion_usb и _companion_ble для вариантов без _radio в суффиксе.
Симптом: сборка nRF52 производила .zip (Nordic DFU), но не .uf2. Проблема была у всех nRF52-плат при сборке на Linux (GitHub Actions).
Причина: bin/uf2conv/uf2conv.py, функция convert_from_hex_to_uf2 — обращение к line[0] на пустой строке:
# было (падало с IndexError на пустой строке в конце .hex файла):
for line in buf.split('\n'):
if line[0] != ":":
continue
# стало:
for line in buf.split('\n'):
if not line or line[0] != ":":
continueIntel HEX файлы на Linux всегда заканчиваются \n, что при split('\n') даёт пустую строку в конце. ""[0] → IndexError. Python завершался с кодом 1, build.sh без set -e молча продолжал, .uf2 не создавался.
Дополнительно: добавлен вывод ошибки в build.sh чтобы подобные сбои были видны в CI-логах:
python3 bin/uf2conv/uf2conv.py ... || echo "WARNING: uf2conv failed for $1 — .uf2 will not be produced"Было: FIRMWARE_BUILD_DATE задавалась вручную в build.sh через date и передавалась как build flag. При прямом pio run (без build.sh) использовался хардкод из MyMesh.h.
Стало: git_version.py инжектирует FIRMWARE_BUILD_DATE как C define при каждой сборке:
date_str = datetime.now().strftime("%d %b %Y")
env.Append(CPPDEFINES=[("FIRMWARE_BUILD_DATE", '\\"' + date_str + '\\"')])Работает и при pio run напрямую, и при GHA-сборке через build.sh. Хардкод в MyMesh.h остаётся только как аварийный фолбэк.