96 lines
2.0 KiB
Bash
Executable File
96 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
OUT_DIR="$ROOT_DIR/docs/backups"
|
|
RETENTION="${DOCS_BACKUP_RETENTION:-20}"
|
|
DRY_RUN=1
|
|
APPLY=0
|
|
|
|
usage() {
|
|
cat <<'USAGE'
|
|
Usage:
|
|
bash scripts/docs/docs_backup.sh [--dry-run] [--apply] [--retention N]
|
|
|
|
Behavior:
|
|
- default mode is --dry-run
|
|
- --apply creates docs backup archive and rotates old backups
|
|
USAGE
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--dry-run)
|
|
DRY_RUN=1
|
|
APPLY=0
|
|
shift
|
|
;;
|
|
--apply)
|
|
APPLY=1
|
|
DRY_RUN=0
|
|
shift
|
|
;;
|
|
--retention)
|
|
RETENTION="$2"
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown arg: $1" >&2
|
|
usage
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
STAMP="$(date +%Y%m%d-%H%M%S)"
|
|
ARCHIVE="$OUT_DIR/docs_backup_${STAMP}.tar.gz"
|
|
LATEST_REF="$OUT_DIR/LATEST.txt"
|
|
|
|
backup_targets=(
|
|
PROJECT-MASTER-INDEX.md
|
|
NODA1-SAFE-DEPLOY.md
|
|
docs/SESSION_STARTER.md
|
|
docs/runbooks
|
|
docs/standards
|
|
docs/consolidation/README.md
|
|
docs/consolidation/SOURCES.md
|
|
docs/consolidation/docs_registry_curated.csv
|
|
docs/consolidation/INTEGRATIONS_STATUS_LATEST.md
|
|
docs/consolidation/jupyter/JUPYTER_SYNC_LATEST.md
|
|
docs/consolidation/jupyter/notebooks_index_latest.csv
|
|
docs/consolidation/pieces/PIECES_SYNC_LATEST.md
|
|
docs/consolidation/pieces/pieces_index_latest.csv
|
|
)
|
|
|
|
existing=()
|
|
for t in "${backup_targets[@]}"; do
|
|
[[ -e "$ROOT_DIR/$t" ]] && existing+=("$t")
|
|
done
|
|
|
|
if [[ "$DRY_RUN" -eq 1 ]]; then
|
|
echo "[dry-run] backup archive: $ARCHIVE"
|
|
echo "[dry-run] retention: $RETENTION"
|
|
echo "[dry-run] targets:"
|
|
printf ' - %s\n' "${existing[@]}"
|
|
exit 0
|
|
fi
|
|
|
|
mkdir -p "$OUT_DIR"
|
|
|
|
tar -czf "$ARCHIVE" -C "$ROOT_DIR" "${existing[@]}"
|
|
printf '%s\n' "$ARCHIVE" > "$LATEST_REF"
|
|
|
|
mapfile -t backups < <(ls -1t "$OUT_DIR"/docs_backup_*.tar.gz 2>/dev/null || true)
|
|
if [[ "${#backups[@]}" -gt "$RETENTION" ]]; then
|
|
for old in "${backups[@]:$RETENTION}"; do
|
|
rm -f "$old"
|
|
done
|
|
fi
|
|
|
|
echo "Wrote: $ARCHIVE"
|
|
echo "Updated: $LATEST_REF"
|