#!/usr/bin/env bash set -euo pipefail REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" COMPOSE_FILE="$REPO_ROOT/docker-compose.prod.yml" SERVICE_UNIT="/etc/systemd/system/avanzacast-stack.service" LOCAL_UNIT_FILE="$REPO_ROOT/deploy/avanzacast-stack.service" usage() { cat </dev/null 2>&1; then echo "docker not found; please install Docker on this host" >&2 exit 1 fi } build_images() { echo "[deploy] Building images with docker compose..." docker compose -f "$COMPOSE_FILE" build --pull } compose_up() { echo "[deploy] Bringing up compose stack..." docker compose -f "$COMPOSE_FILE" up -d --build } compose_down() { echo "[deploy] Bringing down compose stack..." docker compose -f "$COMPOSE_FILE" down } install_unit() { if [ ! -f "$LOCAL_UNIT_FILE" ]; then echo "unit file $LOCAL_UNIT_FILE not found" >&2 exit 1 fi echo "[deploy] Installing systemd unit to $SERVICE_UNIT (requires sudo)" sudo cp "$LOCAL_UNIT_FILE" "$SERVICE_UNIT" sudo systemctl daemon-reload } enable_start_unit() { echo "[deploy] Enabling and starting avanzacast-stack.service" sudo systemctl enable --now avancacast-stack.service } remove_unit() { echo "[deploy] Stopping and removing avanzacast-stack.service" sudo systemctl stop avancacast-stack.service || true sudo systemctl disable avancacast-stack.service || true sudo rm -f "$SERVICE_UNIT" sudo systemctl daemon-reload } while [ "$#" -gt 0 ]; do case "$1" in --build-only) ensure_docker; build_images; shift ;; --up) ensure_docker; compose_up; shift ;; --down) ensure_docker; compose_down; shift ;; --install-unit) install_unit; shift ;; --enable-start) enable_start_unit; shift ;; --remove-unit) remove_unit; shift ;; --help) usage; exit 0 ;; *) echo "Unknown option: $1" >&2; usage; exit 1 ;; esac done