#!/usr/bin/env bash # Deploy Discord Bot v2 to production (akamai) # Pulls latest Docker image and restarts the container. # # Usage: .scripts/deploy.sh [-y] # -y Skip confirmation prompt set -euo pipefail SSH_CMD="ssh akamai" REMOTE_DIR="/root/container-data/major-domo" SERVICE="discord-app" CONTAINER="major-domo-discord-app-1" IMAGE="manticorum67/major-domo-discordapp:production" SKIP_CONFIRM=false [[ "${1:-}" == "-y" ]] && SKIP_CONFIRM=true # --- Pre-deploy checks --- if [[ -n "$(git status --porcelain 2>/dev/null)" ]]; then echo "WARNING: You have uncommitted changes." git status --short echo "" fi BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown") COMMIT=$(git log -1 --format='%h %s' 2>/dev/null || echo "unknown") echo "Branch: ${BRANCH}" echo "Latest: ${COMMIT}" echo "Target: akamai (${IMAGE})" echo "" if [[ "$SKIP_CONFIRM" != true ]]; then read -rp "Deploy to production? [y/N] " answer [[ "$answer" =~ ^[Yy]$ ]] || { echo "Aborted." exit 0 } echo "" fi # --- Save previous image for rollback --- PREV_DIGEST=$($SSH_CMD "docker inspect --format='{{index .RepoDigests 0}}' ${IMAGE} 2>/dev/null" || echo "unknown") # --- Deploy --- echo "==> Pulling latest image for ${SERVICE}..." $SSH_CMD "cd ${REMOTE_DIR} && docker compose pull ${SERVICE}" echo "==> Restarting ${SERVICE}..." $SSH_CMD "cd ${REMOTE_DIR} && docker compose up -d ${SERVICE}" echo "==> Waiting 5s for container to start..." sleep 5 echo "==> Container status:" $SSH_CMD "docker ps --filter name=${CONTAINER} --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}'" echo "" echo "==> Last 10 log lines:" $SSH_CMD "docker logs --tail 10 ${CONTAINER}" NEW_DIGEST=$($SSH_CMD "docker inspect --format='{{index .RepoDigests 0}}' ${IMAGE} 2>/dev/null || docker inspect --format='{{.Image}}' ${CONTAINER}") echo "" echo "==> Image digest: ${NEW_DIGEST}" if [[ "$PREV_DIGEST" == "$NEW_DIGEST" ]]; then echo " (unchanged from previous deploy)" fi # --- Rollback command --- if [[ "$PREV_DIGEST" != "unknown" && "$PREV_DIGEST" != "$NEW_DIGEST" ]]; then echo "" echo "==> To rollback:" echo " ssh akamai \\" echo " \"cd ${REMOTE_DIR} && docker pull ${PREV_DIGEST} && docker tag ${PREV_DIGEST} ${IMAGE} && docker compose up -d ${SERVICE}\"" fi echo "" echo "Deploy complete."