| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #!/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[@]}"
|