#!/usr/bin/env bash # ============================================================================= # Pterodactyl Advanced Admin Addons — Updater # Author : Ball Studios # Usage : bash <(curl -fsSL https://git.balls.studio/BallStudios/pterodactyl_addon/raw/branch/main/update.sh) # ============================================================================= set -euo pipefail RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m' info() { echo -e "${CYAN}[INFO]${NC} $*"; } success() { echo -e "${GREEN}[OK]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } error() { echo -e "${RED}[ERROR]${NC} $*" >&2; exit 1; } step() { echo -e "\n${BOLD}▶ $*${NC}"; } PANEL_DIR="${1:-/var/www/pterodactyl}" REPO_URL="https://git.balls.studio/BallStudios/pterodactyl_addon" TMP_DIR="$(mktemp -d)" BACKUP_DIR="${PANEL_DIR}/.addon_update_backup_$(date +%Y%m%d_%H%M%S)" PHP_BIN="$(command -v php)" cleanup() { rm -rf "$TMP_DIR"; } trap cleanup EXIT echo -e "\n${BOLD}${CYAN}Pterodactyl Advanced Admin Addons — Updater${NC}\n" [[ $EUID -eq 0 ]] || error "Must be run as root." [[ -f "${PANEL_DIR}/artisan" ]] || error "Panel not found at ${PANEL_DIR}." step "Backing up current addon files..." mkdir -p "$BACKUP_DIR" cp -r "${PANEL_DIR}/app/Addons/AdvancedAdmin" "$BACKUP_DIR/" 2>/dev/null || true cp -r "${PANEL_DIR}/resources/scripts/addons/advanced-admin" "$BACKUP_DIR/" 2>/dev/null || true success "Backup → ${BACKUP_DIR}" step "Rolling back old patches..." cd "$PANEL_DIR" $PHP_BIN artisan addon:patch rollback 2>/dev/null || warn "Patch rollback command not available — skipping." step "Pulling latest addon..." git clone --depth=1 "$REPO_URL" "$TMP_DIR/addon" cd "$TMP_DIR/addon" cp -r app/Addons "${PANEL_DIR}/app/" cp config/advanced-admin.php "${PANEL_DIR}/config/" cp -r config/addon-commands "${PANEL_DIR}/config/" cp -r database/migrations/addon/. "${PANEL_DIR}/database/migrations/addon/" cp routes/addon-client.php "${PANEL_DIR}/routes/" cp routes/addon-application.php "${PANEL_DIR}/routes/" cp -r resources/scripts/addons/advanced-admin "${PANEL_DIR}/resources/scripts/addons/" success "Files updated." step "Applying patches..." bash "${PANEL_DIR}/app/Addons/AdvancedAdmin/../../../install.sh" --patches-only 2>/dev/null || \ warn "Re-run install.sh manually if patches need reapplying." step "Running new migrations..." cd "$PANEL_DIR" $PHP_BIN artisan migrate --path=database/migrations/addon --force success "Migrations done." step "Rebuilding frontend..." export NODE_OPTIONS="${NODE_OPTIONS:---openssl-legacy-provider}" yarn install --frozen-lockfile && yarn build:production success "Frontend rebuilt." step "Clearing caches..." $PHP_BIN artisan optimize:clear && $PHP_BIN artisan optimize $PHP_BIN artisan queue:restart success "Update complete!"