Files
fiscality-maschera/install.sh
2026-07-06 13:24:12 +02:00

104 lines
3.3 KiB
Bash
Executable File

#!/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 <<EOF
Not enough free space in Docker storage to build reliably.
Need at least ${MIN_DOCKER_FREE_MB} MB free; found ${available_mb} MB.
Run:
docker builder prune -f
docker image prune -f
docker container prune -f
Then check:
docker system df
df -h ${docker_root}
EOF
exit 1
fi
}
if [[ -n "${APP_IMAGE_ARCHIVE}" ]]; then
echo "Loading prebuilt app image from ${APP_IMAGE_ARCHIVE}"
docker load -i "${APP_IMAGE_ARCHIVE}"
elif [[ "${PULL_APP_IMAGE}" == "1" ]]; then
echo "Pulling app image ${APP_IMAGE_NAME}"
docker pull "${APP_IMAGE_NAME}"
elif [[ "${SKIP_BUILD}" != "1" ]]; then
check_docker_free_space
echo "Building app image ${APP_IMAGE_NAME}"
docker build -t "${APP_IMAGE_NAME}" "${ROOT_DIR}"
else
echo "Skipping build. Expecting image ${APP_IMAGE_NAME} to already exist locally."
fi
ensure_image_exists "${APP_IMAGE_NAME}"
if [[ -n "${MANAGER_IMAGE_ARCHIVE}" ]]; then
echo "Loading prebuilt manager image from ${MANAGER_IMAGE_ARCHIVE}"
docker load -i "${MANAGER_IMAGE_ARCHIVE}"
elif [[ "${PULL_MANAGER_IMAGE}" == "1" ]]; then
echo "Pulling manager image ${MANAGER_IMAGE_NAME}"
docker pull "${MANAGER_IMAGE_NAME}"
fi
if [[ "${SKIP_MANAGER_BUILD}" == "1" ]]; then
echo "Skipping manager image build. Expecting image ${MANAGER_IMAGE_NAME} to already exist locally."
ensure_image_exists "${MANAGER_IMAGE_NAME}"
fi
cd "${MANAGER_DIR}"
export FIS_APP_IMAGE="${APP_IMAGE_NAME}"
export FIS_MANAGER_IMAGE="${MANAGER_IMAGE_NAME}"
if [[ "${SKIP_MANAGER_BUILD}" == "1" ]]; then
docker compose -f "${MANAGER_COMPOSE_FILE}" up -d
else
docker compose -f "${MANAGER_COMPOSE_FILE}" up -d --build
fi
docker compose -f "${MANAGER_COMPOSE_FILE}" logs -f