major-domo-v2/.scripts/deploy.sh
Cal Corum 7e7aa46a73 fix: update deploy script for tag-triggered releases
- Use SSH alias (ssh akamai) instead of manual ssh -i command
- Change image tag from :latest to :production
- Fix rollback command to use SSH alias

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 13:24:29 -05:00

84 lines
2.3 KiB
Bash
Executable File

#!/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."