88 lines
2.2 KiB
Bash
Executable File
88 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
IMAGE="git.mchus.pro/reanimator/core"
|
|
TAG="${1:-latest}"
|
|
DEPLOY_DIR="${DEPLOY_DIR:-/appdata/reanimator}"
|
|
DEPLOY_PLATFORM="linux/amd64"
|
|
LOCAL_DEPLOY_DIR="$DEPLOY_DIR"
|
|
REPO_LOCAL_DEPLOY_DIR="$(cd "$(dirname "$0")" && pwd)/infra/reanimator"
|
|
|
|
echo "Deploy target:"
|
|
echo " 1) local"
|
|
echo " 2) remote (SSH)"
|
|
echo " 3) push only"
|
|
read -rp "Choice [1/2/3]: " choice
|
|
|
|
case "$choice" in
|
|
1)
|
|
TARGET="local"
|
|
;;
|
|
2)
|
|
read -rp "SSH target (login@hostname): " SSH_TARGET
|
|
TARGET="ssh"
|
|
;;
|
|
3)
|
|
TARGET="push-only"
|
|
;;
|
|
*)
|
|
echo "Invalid choice" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "==> Building and pushing $IMAGE:$TAG ($DEPLOY_PLATFORM)..."
|
|
docker buildx build --platform "$DEPLOY_PLATFORM" -t "$IMAGE:$TAG" --push .
|
|
|
|
if [ "$TARGET" = "push-only" ]; then
|
|
echo "==> Push complete. No deploy requested."
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$TARGET" = "local" ]; then
|
|
echo "==> Deploying locally..."
|
|
export DOCKER_DEFAULT_PLATFORM="$DEPLOY_PLATFORM"
|
|
export REANIMATOR_IMAGE="$IMAGE"
|
|
export REANIMATOR_TAG="$TAG"
|
|
docker pull --platform "$DEPLOY_PLATFORM" "$IMAGE:$TAG"
|
|
if [ ! -d "$LOCAL_DEPLOY_DIR" ] && [ -d "$REPO_LOCAL_DEPLOY_DIR" ]; then
|
|
LOCAL_DEPLOY_DIR="$REPO_LOCAL_DEPLOY_DIR"
|
|
fi
|
|
if [ ! -d "$LOCAL_DEPLOY_DIR" ]; then
|
|
echo "Local deploy directory not found: $LOCAL_DEPLOY_DIR" >&2
|
|
exit 1
|
|
fi
|
|
if [ ! -f "$LOCAL_DEPLOY_DIR/reanimator.env" ]; then
|
|
echo "Local env file not found: $LOCAL_DEPLOY_DIR/reanimator.env" >&2
|
|
if [ -f "$LOCAL_DEPLOY_DIR/reanimator.env.example" ]; then
|
|
echo "Create it from: $LOCAL_DEPLOY_DIR/reanimator.env.example" >&2
|
|
fi
|
|
exit 1
|
|
fi
|
|
echo "==> Using local deploy dir: $LOCAL_DEPLOY_DIR"
|
|
cd "$LOCAL_DEPLOY_DIR"
|
|
docker compose pull
|
|
docker compose up -d --remove-orphans
|
|
echo "-- Status:"
|
|
docker compose ps
|
|
echo "==> Done."
|
|
else
|
|
echo "==> Deploying on $SSH_TARGET..."
|
|
ssh "$SSH_TARGET" "
|
|
set -euo pipefail
|
|
export REANIMATOR_IMAGE=$IMAGE
|
|
export REANIMATOR_TAG=$TAG
|
|
echo '-- Pulling image...'
|
|
docker pull $IMAGE:$TAG
|
|
|
|
echo '-- Restarting container...'
|
|
cd $DEPLOY_DIR
|
|
docker compose pull
|
|
docker compose up -d --remove-orphans
|
|
|
|
echo '-- Status:'
|
|
docker compose ps
|
|
"
|
|
echo "==> Done."
|
|
fi
|