CI: сборка прошивок на Gitea Actions (workflow, скрипт, раннер)
Firmware build / build (push) Canceled after 0s
Firmware build / release (push) Canceled after 0s

This commit is contained in:
2026-10-08 22:28:42 +03:00
parent 157b9761c7
commit b6e6e1b2ec
6 changed files with 495 additions and 0 deletions
+100
View File
@@ -0,0 +1,100 @@
#!/usr/bin/env bash
#
# Сборка выбранных прошивок через build.sh — тот же путь, что и при локальной сборке,
# поэтому CI не дублирует логику (версия, merge-bin, uf2, каталог out/).
# Скрипт годится и для запуска руками на VPS или локально.
#
# Переменные окружения:
# TARGETS список env через запятую (перебивает набор по умолчанию)
# MATCH подстрока имени env — собрать все подходящие (регистронезависимо)
# FIRMWARE_VERSION версия прошивки (по умолчанию ci)
# OUT_DIR каталог артефактов (по умолчанию out, его использует build.sh)
#
# Примеры:
# bash ci/build-firmwares.sh
# TARGETS="Heltec_t096_companion_radio_ble,ProMicro_companion_radio_ble" bash ci/build-firmwares.sh
# MATCH=heltec_t096 FIRMWARE_VERSION=v1.2.3 bash ci/build-firmwares.sh
#
# Один упавший env не отменяет остальные: в конце печатается список несобравшихся,
# и скрипт возвращает ненулевой код, чтобы CI пометил сборку красной.
set -uo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.."
# Набор по умолчанию — устройства этого форка.
DEFAULT_TARGETS=(
# companion
Heltec_t096_companion_radio_ble
ProMicro_companion_radio_ble
ProMicro_SH1106_companion_radio_ble
Heltec_v3_companion_radio_ble
heltec_v4_tft_companion_radio_ble
heltec_tracker_v2_companion_radio_ble
LilyGo_TDeck_companion_radio_ble
LilyGo_T-Echo_Card_companion_radio_ble
Heltec_t114_companion_radio_ble
Heltec_T190_companion_radio_ble_
ThinkNode_M9_companion_radio_ble_
Meshadventurer_sx1262_companion_radio_ble
Meshadventurer_sx1262_e22p_868m30s_companion_radio_ble
Meshadventurer_e22p_433m30s_companion_radio_ble
# repeater / room server / sensor
Heltec_t096_repeater
Heltec_t096_room_server
Heltec_t096_sensor
ProMicro_repeater
ProMicro_room_server
)
export FIRMWARE_VERSION="${FIRMWARE_VERSION:-ci}"
OUT_DIR="${OUT_DIR:-out}"
mkdir -p "$OUT_DIR"
targets=()
if [[ -n "${MATCH:-}" ]]; then
# список env берём тем же способом, что и build.sh list
while IFS= read -r env; do
[[ -n "$env" ]] && targets+=("$env")
done < <(bash build.sh list | grep -i -- "$MATCH" || true)
elif [[ -n "${TARGETS:-}" ]]; then
IFS=',' read -r -a parts <<< "$TARGETS"
for part in "${parts[@]}"; do
part="$(printf '%s' "$part" | xargs)"
[[ -n "$part" ]] && targets+=("$part")
done
else
targets=("${DEFAULT_TARGETS[@]}")
fi
if [[ ${#targets[@]} -eq 0 ]]; then
echo "Нечего собирать: проверьте TARGETS/MATCH" >&2
exit 1
fi
echo "Версия прошивки: $FIRMWARE_VERSION"
echo "К сборке: ${#targets[@]}"
printf ' %s\n' "${targets[@]}"
failed=()
for env in "${targets[@]}"; do
echo
echo "===== $env ====="
if bash build.sh build-firmware "$env"; then
echo "----- $env: OK"
else
echo "----- $env: ОШИБКА"
failed+=("$env")
fi
done
echo
echo "===== итог ====="
echo "собрано ${#targets[@]} - ${#failed[@]} ошибок"
if [[ ${#failed[@]} -gt 0 ]]; then
printf 'не собрались: %s\n' "${failed[@]}"
fi
echo "артефакты в $OUT_DIR:"
ls -1 "$OUT_DIR" 2>/dev/null || echo " (пусто)"
[[ ${#failed[@]} -eq 0 ]]