Ctrl K
ComunidadGuías…

scripts/restore.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env bash
# Restore a gramsrv backup bundle produced by ./scripts/backup.sh.
#
# The bundle carries the database, the media and key tree, and the configuration,
# so a restore is: put the repository in place, replay the bundle, then start the
# services. Read this script before running it against a live instance; it will
# refuse to overwrite files unless --force is given.
set -euo pipefail

usage() {
  cat <<'EOF'
Usage: ./scripts/restore.sh --from DIR [gramsrv-backup flags]

Runs gramsrv-backup restore with defaults for a monolith deployment:

  --from             bundle directory (required)
  --repo-dir         deployment root receiving .env and data/ (default: repo root)
  --component        server, grammystore or all (default: every component present)
  --dsn              target PostgreSQL DSN (default: read from the restored .env)
  --pg-tools         local or docker (default: docker when docker is available)
  --dry-run          print the plan without writing anything
  --force            overwrite existing files in the data tree

Examples:
  # Inspect what a bundle would do.
  ./scripts/restore.sh --from /srv/backups/20261004 --dry-run

  # Restore the database and the media tree onto this host.
  ./scripts/restore.sh --from /srv/backups/20261004 --force

  # Restore only the store bot database.
  ./scripts/restore.sh --from /srv/backups/20261004 --component grammystore

Run './scripts/restore.sh --help' for the full flag list.
EOF
}

script_dir=$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
repo_root=$(CDPATH='' cd -- "$script_dir/.." && pwd)
binary="$repo_root/bin/gramsrv-backup"

has_flag() {
  local name=$1
  shift
  local arg
  for arg in "$@"; do
    [[ $arg == "$name" || $arg == "$name="* ]] && return 0
  done
  return 1
}

build_binary() {
  command -v go >/dev/null 2>&1 || {
    printf 'restore.sh: go is required to build %s\n' "$binary" >&2
    return 1
  }
  printf 'restore.sh: building %s\n' "$binary" >&2
  (cd "$repo_root" && GOFLAGS=-p=1 go build -o "$binary" ./cmd/gramsrv-backup)
}

docker_available() {
  command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1
}

if has_flag --help "$@"; then
  usage
  exit 0
fi

[[ -x $binary ]] || build_binary

args=()
if ! has_flag --repo-dir "$@"; then
  args+=(--repo-dir "$repo_root")
fi
if ! has_flag --pg-tools "$@" && docker_available; then
  args+=(--pg-tools docker)
fi

cd "$repo_root"
exec "$binary" restore "${args[@]}" "$@"