#!/bin/bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" MANAGER_DIR="${ROOT_DIR}/manager-solution" APP_IMAGE_NAME="${APP_IMAGE_NAME:-fis}" MANAGER_IMAGE_NAME="${MANAGER_IMAGE_NAME:-fis-manager:local}" MANAGER_COMPOSE_FILE="${MANAGER_DIR}/docker-compose.yml" APP_IMAGE_ARCHIVE="${APP_IMAGE_ARCHIVE:-}" MANAGER_IMAGE_ARCHIVE="${MANAGER_IMAGE_ARCHIVE:-}" SKIP_BUILD="${SKIP_BUILD:-0}" SKIP_MANAGER_BUILD="${SKIP_MANAGER_BUILD:-0}" PULL_APP_IMAGE="${PULL_APP_IMAGE:-0}" PULL_MANAGER_IMAGE="${PULL_MANAGER_IMAGE:-0}" MIN_DOCKER_FREE_MB="${MIN_DOCKER_FREE_MB:-8192}" echo "Project root: ${ROOT_DIR}" echo "Manager dir: ${MANAGER_DIR}" if [[ ! -f "${MANAGER_DIR}/manager/config.json" ]]; then echo "Missing manager config: ${MANAGER_DIR}/manager/config.json" >&2 exit 1 fi echo "Validating manager config" python3 "${MANAGER_DIR}/manager/validate_config.py" "${MANAGER_DIR}/manager/config.json" >/dev/null ensure_image_exists() { local image_name="$1" if ! docker image inspect "${image_name}" >/dev/null 2>&1; then echo "Docker image not found locally: ${image_name}" >&2 exit 1 fi } check_docker_free_space() { local docker_root docker_root="$(docker info -f '{{.DockerRootDir}}' 2>/dev/null || true)" if [[ -z "${docker_root}" || ! -d "${docker_root}" ]]; then echo "Could not determine Docker root directory. Is Docker running?" >&2 exit 1 fi local available_kb available_mb available_kb="$(df -Pk "${docker_root}" | awk 'NR == 2 {print $4}')" available_mb=$((available_kb / 1024)) echo "Docker root: ${docker_root} (${available_mb} MB free)" if (( available_mb < MIN_DOCKER_FREE_MB )); then cat >&2 <