sebys-hosting-scripts/update-panel.sh

127 lines
2.9 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
########################################
# Seby's Calagopus Wings Updater
########################################
########################################
# Styling
########################################
BOLD="\033[1m"
GREEN="\033[32m"
YELLOW="\033[33m"
RED="\033[31m"
BLUE="\033[34m"
RESET="\033[0m"
section() { printf "\n${BLUE}${BOLD}==> %s${RESET}\n" "$*"; }
say() { printf "${GREEN}✔ %s${RESET}\n" "$*"; }
warn() { printf "${YELLOW}⚠ %s${RESET}\n" "$*"; }
err() { printf "${RED}✖ %s${RESET}\n" "$*"; }
have() { command -v "$1" >/dev/null 2>&1; }
########################################
# Prompt helper (curl | bash safe)
########################################
TTY="/dev/tty"
prompt() {
local msg="$1"
local out
printf "${BOLD}%s${RESET}" "$msg" >"$TTY"
IFS= read -r out <"$TTY"
printf "%s" "$out"
}
confirm_default_no() {
local msg="$1"
local ans
ans="$(prompt "$msg [y/N]: ")"
[[ "${ans,,}" == "y" || "${ans,,}" == "yes" ]]
}
########################################
# Config
########################################
APP_DIR="calagopus"
########################################
# Header
########################################
clear
cat << "EOF"
____ _
/ ___|__ _| | __ _ __ _ ___ _ __ _ _ ___
| | / _` | |/ _` |/ _` |/ _ \| '_ \| | | / __|
| |__| (_| | | (_| | (_| | (_) | |_) | |_| \__ \
\____\__,_|_|\__,_|\__, |\___/| .__/ \__,_|___/
|___/ |_|
Calagopus Wings Updater | v1.0
EOF
########################################
# Checks
########################################
section "Pre-flight Checks"
if ! have docker; then
err "Docker is not installed. Aborting."
exit 1
fi
say "Docker detected: $(docker --version)"
if ! docker compose version >/dev/null 2>&1; then
err "Docker Compose plugin not found. Aborting."
exit 1
fi
say "Docker Compose detected: $(docker compose version --short 2>/dev/null || docker compose version)"
if [[ ! -d "$APP_DIR" ]]; then
err "Directory '${APP_DIR}' not found in $(pwd). Aborting."
exit 1
fi
say "Found ${APP_DIR}/"
cd "$APP_DIR"
if [[ ! -f "docker-compose.yml" && ! -f "compose.yaml" && ! -f "compose.yml" ]]; then
err "No docker-compose file found in ${APP_DIR}/. Aborting."
exit 1
fi
########################################
# Update
########################################
section "Stopping Wings"
docker compose down
say "Stopped"
section "Pulling Latest Images"
docker compose pull
say "Images updated"
section "Starting Wings"
docker compose up -d
say "Wings is back up"
########################################
# Cleanup
########################################
section "Cleanup"
if confirm_default_no "Remove old/unused Docker images, containers, and cache?"; then
docker image prune -af
docker container prune -f
docker builder prune -af
say "Old Docker cache cleared"
else
warn "Skipping cleanup"
fi
section "Done"
say "Calagopus Wings update complete."