Some checks are pending
Tasmota Docker test / build (ubuntu-20.04, 3.10) (push) Waiting to run
Tasmota Docker test / build (ubuntu-20.04, 3.11) (push) Waiting to run
Tasmota Docker test / build (ubuntu-22.04, 3.10) (push) Waiting to run
Tasmota Docker test / build (ubuntu-22.04, 3.11) (push) Waiting to run
Publish Docker / build (push) Waiting to run
140 lines
6.3 KiB
Bash
Executable File
140 lines
6.3 KiB
Bash
Executable File
#!/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"}
|
||
|
||
# Парсинг аргументов командной строки
|
||
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
|
||
## Компиляция указанных сборок
|
||
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
|