#!/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