#!/bin/bash # Начальные переменные CHECK_MARK="\033[0;32m\xE2\x9C\x94\033[0m" rundir=$(dirname $(readlink -f $0)) DOCKER_IMAGE=${DOCKER_IMAGE:="blakadder/docker-tasmota"} USE_STABLE=0 # По умолчанию development TASMOTA_BRANCH="development" # По умолчанию ветка разработки USE_VOLUME=${USE_VOLUME:="`pwd`/Tasmota"} # Функция завершения, вызываемая при прерывании cleanup() { echo -e "\nСкрипт был прерван пользователем. Завершение..." exit 1 } # Перехват сигнала SIGINT для обработки прерывания trap cleanup SIGINT # Парсинг аргументов командной строки for arg in "$@" do case $arg in -stable=*) USE_STABLE="${arg#*=}" shift ;; -tasmota=*) TASMOTA_BRANCH="${arg#*=}" shift ;; -bins=*) BIN_FILES="${arg#*=}" shift ;; *) echo "Неизвестный параметр: $arg" exit 1 ;; esac done ## Проверка наличия каталога Tasmota и обновление if test -d "`pwd`/Tasmota"; then cd Tasmota git fetch https://github.com/arendst/Tasmota.git development git fetch --all --tags # Проверка на стабильную версию или ветку разработки if [ "$USE_STABLE" = "1" ]; then if [ -z "${TASMOTA_BRANCH}" ]; then echo -e "Проверка последней стабильной версии на GitHub" TASMOTA_BRANCH=$(wget -qO - https://api.github.com/repos/arendst/Tasmota/releases/latest | grep -oP 'tag_name"\s*:\s*"\K[^"]+') else echo -e "Используется версия \"${TASMOTA_BRANCH}\"" fi git checkout --force $TASMOTA_BRANCH >/dev/null 2>&1 else echo -e "Используется версия разработки" TASMOTA_BRANCH="development" git reset --hard origin/$TASMOTA_BRANCH > /dev/null 2>&1 git pull origin $TASMOTA_BRANCH > /dev/null 2>&1 fi if [ -z "$TASMOTA_BRANCH" ]; then echo -e "Ошибка при получении ветки Tasmota. Проверьте подключение к интернету и повторите попытку." exit 1 fi cd $rundir echo -e "\nЗапуск Docker Tasmota на версии $TASMOTA_BRANCH\n" # Проверка наличия Docker if [[ "$(type -t docker)" == "file" ]] ; then ## Проверка и копирование platformio_override.ini if test -e "platformio_override.ini"; then echo -e "Используется platformio_override.ini для определения сборок." cp platformio_override.ini Tasmota/platformio_override.ini fi ## Проверка и копирование user_config_override.h if test -e "user_config_override.h"; then echo -e "Используется пользовательская конфигурация user_config_override.h." cp user_config_override.h Tasmota/tasmota/user_config_override.h fi ## Компиляция указанных сборок if [ -n "$BIN_FILES" ]; then IFS=',' read -r -a builds <<< "$BIN_FILES" echo -e "Компиляция следующих сборок:" for build in "${builds[@]}" do echo -e "$build" sleep 1 done echo -e "\n" else # Если сборки не указаны, по умолчанию компилируем все echo -e "\e[31mКомпиляция ВСЕХ СБОРОК!!!!\n\n\e[7mДля выхода используйте ctrl+C\e[0m" sleep 4 fi ## Запуск контейнера Docker с компиляцией echo -n "Компиляция..." test -t 1 && DOCKER_TTY="-it" if [ -n "$BIN_FILES" ]; then if [[ "${builds[0]}" == "tasmota"* ]]; then if [ "${USE_TEE}" = "1" ]; then docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE $(printf ' -e %s' "${builds[@]}") 2>&1 | tee ${TEE_PARAMETER} docker-tasmota.log else docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE $(printf ' -e %s' "${builds[@]}") 2>&1 > docker-tasmota.log fi echo -e "\\r${CHECK_MARK} Готово! Лог компиляции записан в docker-tasmota.log\n" else echo -e "\\r\e[31mНедействительная сборочная среда." exit 1 fi else if [ "${USE_TEE}" = "1" ]; then docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE 2>&1 | tee ${TEE_PARAMETER} docker-tasmota.log else docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE 2>&1 > docker-tasmota.log fi echo -e "\\r${CHECK_MARK} Готово! Лог компиляции записан в docker-tasmota.log\n" echo -e "Сборки находятся в $rundir/Tasmota/build_output/firmware\n" fi ## Копирование прошивки после завершения Docker for build in "${builds[@]}" do cp "$rundir"/Tasmota/build_output/firmware/"$build"* "$rundir"/ if test -e "$build".bin; then echo -e "Завершено! Прошивка доступна в $rundir/$build.bin\n" else echo -e "\e[31m\e[5mПРЕДУПРЕЖДЕНИЕ:\e[0m" echo -e "Произошла ошибка при компиляции $build. Проверьте лог компиляции\n" fi done else echo -e "\nDocker не найден. Установите его с помощью:\n\n\tcurl -fsSL https://get.docker.com -o get-docker.sh\n\tsh get-docker.sh\n" fi else # Клонирование репозитория Tasmota, если каталог отсутствует if [[ "$(type -t git)" == "file" ]] ; then echo -e "\nРепозиторий Tasmota не найден в текущем каталоге.\nКлонировать его с GitHub в текущий каталог?" read -p "Нажмите Enter для выхода или \"yes\" для продолжения: " answer case ${answer:0:1} in y|Y ) git clone https://github.com/arendst/Tasmota.git --branch development bash $(basename $0) && exit ;; * ) exit 1 ;; esac else echo -e "\nУстановите \"git\" для продолжения:\n\n\tDebian/Ubuntu/Mint:\tsudo apt-get install git\n\tFedora:\t\t\tsu -c 'yum install git'\n\topenSUSE:\t\tsudo zypper in git\n" exit 1 fi fi