#!/bin/sh set -e cd "$(dirname "$0")" MODE="${1:-pre}" host_docker_check() { if command -v docker >/dev/null 2>&1; then if docker version >/dev/null 2>&1; then echo " ✓ docker: $(docker version --format '{{.Server.Version}}' 2>/dev/null || docker --version)" else echo " ! docker: установлен, но демон недоступен (запустите docker)" fi if docker compose version >/dev/null 2>&1; then echo " ✓ docker_compose: $(docker compose version --short 2>/dev/null || docker compose version)" else echo " ! docker_compose: не найден" fi else echo " ! docker: не найден на хосте" echo " ! docker_compose: не найден на хосте" fi } run_go_check() { if command -v go >/dev/null 2>&1; then CHECK_HOST_TOOLS=1 "$@" go run ./cmd/check else CHECK_HOST_TOOLS=0 "$@" docker run --rm -v "$(pwd):/app" -w /app golang:1.22-alpine go run ./cmd/check fi } load_env() { if [ -f .env ]; then set -a # shellcheck disable=SC1091 . ./.env set +a fi } post_start_check() { echo "=== Проверка после запуска ===" load_env host_docker_check echo "" if docker compose ps postgres 2>/dev/null | grep -qi running; then if docker compose exec -T postgres pg_isready -U "${POSTGRES_USER:-shop}" -d "${POSTGRES_DB:-shopdb}" >/dev/null 2>&1; then echo " ✓ postgresql: готова" else echo " ✗ postgresql: не отвечает" exit 1 fi else echo " ✗ postgres: контейнер не запущен — docker compose up -d" exit 1 fi if command -v curl >/dev/null 2>&1; then if curl -sf "http://127.0.0.1:${HTTP_PORT:-80}/health" >/dev/null 2>&1; then echo " ✓ /health: OK" else echo " ✗ /health: не отвечает — docker compose logs app caddy" exit 1 fi elif docker compose exec -T app wget -qO- http://127.0.0.1:8080/health >/dev/null 2>&1; then echo " ✓ app /health: OK" fi echo "" CHECK_SKIP_DB=1 CHECK_HOST_TOOLS=1 run_go_check } case "$MODE" in --after-start|post) post_start_check ;; *) echo "=== Проверка перед запуском (БД будет проверена после docker compose) ===" host_docker_check echo "" CHECK_SKIP_DB=1 run_go_check echo "" echo "Далее: docker compose up --build -d" echo "Затем: ./check.sh --after-start" ;; esac