#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" usage() { cat <<'EOF' Usage: rollback.sh --release-root PATH --backup-dir PATH --project-name NAME --confirm-project NAME [options] Load the explicitly selected prior offline release, then restore its matching pre-upgrade backup into a new recovery project. Database downgrade commands are never used. Options: --release-root PATH Extracted prior offline release. --backup-dir PATH Pre-upgrade WP13 backup. --project-name NAME New recovery project. --confirm-project NAME Must exactly match --project-name. --env-file PATH Optional recovery environment file. --start Start and health-check the recovery project. --help Show this help. EOF } RELEASE_ROOT="" BACKUP_DIR="" PROJECT_NAME="" CONFIRM_PROJECT="" ENV_FILE="" START_FLAG="" while [[ $# -gt 0 ]]; do case "$1" in --release-root) RELEASE_ROOT="$2"; shift 2 ;; --backup-dir) BACKUP_DIR="$2"; shift 2 ;; --project-name) PROJECT_NAME="$2"; shift 2 ;; --confirm-project) CONFIRM_PROJECT="$2"; shift 2 ;; --env-file) ENV_FILE="$2"; shift 2 ;; --start) START_FLAG="--start"; shift ;; --help|-h) usage; exit 0 ;; *) printf 'ERROR: unknown argument: %s\n' "$1" >&2; exit 1 ;; esac done [[ -n "${RELEASE_ROOT}" && -d "${RELEASE_ROOT}" ]] \ || { printf 'ERROR: --release-root is required\n' >&2; exit 1; } [[ -n "${BACKUP_DIR}" ]] \ || { printf 'ERROR: --backup-dir is required\n' >&2; exit 1; } [[ -n "${PROJECT_NAME}" && "${PROJECT_NAME}" == "${CONFIRM_PROJECT}" ]] \ || { printf 'ERROR: project confirmation mismatch\n' >&2; exit 1; } bash "${RELEASE_ROOT}/operations/install_offline.sh" --help >/dev/null if [[ -f "${RELEASE_ROOT}/images/dataops-images.tar" ]]; then docker load -i "${RELEASE_ROOT}/images/dataops-images.tar" >/dev/null fi args=( --backup-dir "${BACKUP_DIR}" --compose-file "${RELEASE_ROOT}/deploy/docker/docker-compose.yml" --project-name "${PROJECT_NAME}" --confirm-project "${CONFIRM_PROJECT}" ) [[ -z "${ENV_FILE}" ]] || args+=(--env-file "${ENV_FILE}") [[ -z "${START_FLAG}" ]] || args+=("${START_FLAG}") bash "${RELEASE_ROOT}/operations/restore.sh" "${args[@]}"