DispelEvilBot/scripts/check_contour.sh

53 lines
1.5 KiB
Bash

#!/usr/bin/env bash
# Проверка контура: сервисы запущены, образ бота — ожидаемый, миграции применены.
# Использование: ./scripts/check_contour.sh [test|prod]
set -euo pipefail
E="${1:-test}"
FILE="env/${E}.env"
if [ ! -f "$FILE" ]; then
echo "Нет файла окружения: $FILE" >&2
exit 1
fi
COMPOSE="docker compose -p ${E} --env-file ${FILE} -f docker-compose.prod.yml"
echo "== контур: ${E} =="
$COMPOSE ps
echo
echo "== образы =="
$COMPOSE images
echo
echo "== проверки =="
running="$($COMPOSE ps --services --status running || true)"
fail=0
for svc in postgres bot; do
if echo "$running" | grep -qx "$svc"; then
echo "OK ${svc}: running"
else
echo "FAIL ${svc}: не запущен" >&2
fail=1
fi
done
# миграции: сервис migrate должен завершиться успешно (Exited (0))
if $COMPOSE ps -a --format '{{.Service}} {{.Status}}' | grep -q '^migrate Exited (0)'; then
echo "OK migrate: завершён успешно"
else
echo "WARN migrate: нет подтверждённого успешного завершения (см. 'logs migrate')" >&2
fi
# БД отвечает
if $COMPOSE exec -T postgres sh -lc 'pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"' >/dev/null 2>&1; then
echo "OK postgres: принимает соединения"
else
echo "FAIL postgres: не отвечает" >&2
fail=1
fi
exit $fail