- 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>
84 lines
2.3 KiB
Bash
Executable File
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."
|