#!/usr/bin/env bash set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" DEPLOY_HOST="${DEPLOY_HOST:-root@192.168.2.55}" DEPLOY_PATH="${DEPLOY_PATH:-/opt/workdock}" HEALTH_URL="${HEALTH_URL:-http://192.168.2.55:8088/healthz/}" REMOTE_ENV_FILE="${REMOTE_ENV_FILE:-.env.test}" COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.prod.yml}" RUN_DJANGO_CHECK="${RUN_DJANGO_CHECK:-0}" SSH_CMD="${SSH_CMD:-ssh -4}" RSYNC_SSH="${RSYNC_SSH:-ssh -4}" EXPECTED_BRANCH="${EXPECTED_BRANCH:-}" RESET_CONFIRM="${RESET_CONFIRM:-}" cd "$REPO_ROOT" current_branch="$(git branch --show-current)" if [[ -n "$EXPECTED_BRANCH" && "$current_branch" != "$EXPECTED_BRANCH" ]]; then echo "Expected branch '$EXPECTED_BRANCH' for this reset, got '$current_branch'." >&2 exit 1 fi if [[ "$RESET_CONFIRM" != "RESET" ]]; then cat >&2 <&2 echo "Create or restore the server env file before resetting." >&2 exit 1 } echo "Syncing repository to ${DEPLOY_HOST}:${DEPLOY_PATH} ..." rsync -az --delete \ --filter 'P .env.test' \ --filter 'P .env.prod' \ --exclude '.git' \ --exclude '.github' \ --exclude '.venv' \ --exclude '__pycache__' \ --exclude 'node_modules' \ --exclude 'backend/media' \ --exclude 'backend/staticfiles' \ -e "$RSYNC_SSH" \ "$REPO_ROOT"/ \ "${DEPLOY_HOST}:${DEPLOY_PATH}/" echo "Resetting remote stack state..." $SSH_CMD "$DEPLOY_HOST" "cd '$DEPLOY_PATH' && export APP_ENV_FILE='$REMOTE_ENV_FILE' && docker compose --env-file '$REMOTE_ENV_FILE' -f '$COMPOSE_FILE' down -v" echo "Rebuilding and bootstrapping fresh stack..." $SSH_CMD "$DEPLOY_HOST" \ "cd '$DEPLOY_PATH' && RUN_DJANGO_CHECK='$RUN_DJANGO_CHECK' DEPLOY_HEALTH_URL='$HEALTH_URL' ./scripts/deploy_stack.sh '$REMOTE_ENV_FILE' '$COMPOSE_FILE'" echo "Verifying health endpoint..." curl --fail --silent --show-error --max-time 10 "$HEALTH_URL" >/dev/null commit_sha="$(git rev-parse --short HEAD)" echo "Reset deployment healthy: $HEALTH_URL" echo "Deployed commit: $commit_sha" echo "Branch: $current_branch"