CI: сборка прошивок на Gitea Actions (workflow, скрипт, раннер)
This commit is contained in:
@@ -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 ]]
|
||||
Reference in New Issue
Block a user