Files
post_bot/bin/update.sh
Choi A.K. 2bcf07f6a9
Some checks failed
continuous-integration/drone/push Build is failing
script update
2025-09-06 13:38:55 +09:00

92 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -Eeuo pipefail
# === Настройки ===
SERVICE="bot" # имя сервиса в docker-compose.yml
APP_DIR="/app" # рабочая директория в контейнере
HOST_DB_DIR="./db" # каталог БД на хосте
HOST_DB_FILE="./db/bot.db" # файл БД на хосте
DEFAULT_DB_URL="sqlite+aiosqlite:////app/db/bot.db" # единый путь БД внутри контейнера
log() { echo -e "[update.sh] $*"; }
# === Работаем из директории скрипта ===
cd "$(dirname "${BASH_SOURCE[0]}")"
# === Приводим БД к каталогу ./db/bot.db ===
log "Проверка корректности БД (./db/bot.db)..."
mkdir -p "${HOST_DB_DIR}"
# если раньше был конфликтный объект ./bot.db
if [[ -d "./bot.db" ]]; then
log "Найдена ПАПКА ./bot.db → удаляю, чтобы не конфликтовала с файлом БД."
rm -rf ./bot.db
fi
if [[ -f "./bot.db" && ! -f "${HOST_DB_FILE}" ]]; then
log "Переношу старый файл ./bot.db в ${HOST_DB_FILE} ..."
mv ./bot.db "${HOST_DB_FILE}"
fi
if [[ ! -f "${HOST_DB_FILE}" ]]; then
log "Создаю пустой файл БД: ${HOST_DB_FILE}"
:> "${HOST_DB_FILE}"
fi
# === .env: страхуем DATABASE_URL ===
if [[ -f ".env" ]]; then
if ! grep -q '^DATABASE_URL=' .env; then
log "В .env не найден DATABASE_URL — дописываю с ${DEFAULT_DB_URL}"
echo "DATABASE_URL=${DEFAULT_DB_URL}" >> .env
fi
else
log "Файл .env не найден — создаю и прописываю DATABASE_URL=${DEFAULT_DB_URL}"
echo "DATABASE_URL=${DEFAULT_DB_URL}" > .env
fi
# === Git pull ===
log "Получение свежего кода (git pull --rebase --autostash)..."
git pull --rebase --autostash
# === Пересборка образа ===
log "Пересборка контейнера..."
docker compose build --no-cache
# === (Опционально) создаём ревизию Alembic с комментарием ===
MIG_MSG="${1-}"
if [[ -z "${MIG_MSG}" ]]; then
read -rp "[update.sh] Комментарий для новой миграции Alembic (Enter — пропустить создание ревизии): " MIG_MSG
fi
if [[ -n "${MIG_MSG}" ]]; then
log "Создание ревизии Alembic с комментарием: ${MIG_MSG}"
docker compose run --rm -T \
-e MIG_MSG="${MIG_MSG}" \
"${SERVICE}" sh -lc "cd '${APP_DIR}' && alembic revision --autogenerate -m \"\${MIG_MSG}\""
else
log "Создание ревизии пропущено."
fi
# === Применяем миграции ===
log "Применение миграций Alembic (upgrade head)..."
docker compose run --rm -T "${SERVICE}" sh -lc "cd '${APP_DIR}' && alembic upgrade head"
# === Запуск приложения ===
log "Запуск контейнера в фоне..."
docker compose up -d
# === Мини-проверка окружения и таблиц ===
log "Проверка DATABASE_URL внутри контейнера и списка таблиц..."
docker compose exec -T "${SERVICE}" sh -lc "
echo 'DATABASE_URL='\"\$DATABASE_URL\";
if [ -f /app/db/bot.db ]; then
echo '[DB] /app/db/bot.db найден. Таблицы:';
sqlite3 /app/db/bot.db '.tables' || true;
elif [ -f /db/bot.db ]; then
echo '[DB] /db/bot.db найден (проверь docker-compose volume!). Таблицы:';
sqlite3 /db/bot.db '.tables' || true;
else
echo 'Файл БД не найден в стандартных путях /app/db/bot.db или /db/bot.db';
fi
"
log "Готово!"