55 lines
1.4 KiB
Bash
Executable File
55 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
CREDS_FILE="${CREDS_FILE:-$HOME/.openclaw/credentials/minio-zap.env}"
|
|
WORKSPACE="${WORKSPACE:-$HOME/.openclaw/workspace}"
|
|
STAMP="$(date -u +%Y%m%dT%H%M%SZ)"
|
|
PREFIX="${PREFIX:-workspace-backups/$STAMP}"
|
|
|
|
if [[ ! -f "$CREDS_FILE" ]]; then
|
|
echo "Missing creds file: $CREDS_FILE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# shellcheck disable=SC1090
|
|
source "$CREDS_FILE"
|
|
|
|
if [[ -z "${MINIO_ENDPOINT:-}" || -z "${MINIO_ACCESS_KEY:-}" || -z "${MINIO_SECRET_KEY:-}" || -z "${MINIO_BUCKET:-}" ]]; then
|
|
echo "Missing required MinIO env vars in $CREDS_FILE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Backup only durable assistant context files
|
|
INCLUDE=(
|
|
"MEMORY.md"
|
|
"USER.md"
|
|
"TOOLS.md"
|
|
"HEARTBEAT.md"
|
|
"memory"
|
|
)
|
|
|
|
TMPDIR="$(mktemp -d)"
|
|
trap 'rm -rf "$TMPDIR"' EXIT
|
|
|
|
for p in "${INCLUDE[@]}"; do
|
|
if [[ -e "$WORKSPACE/$p" ]]; then
|
|
cp -a "$WORKSPACE/$p" "$TMPDIR/"
|
|
fi
|
|
done
|
|
|
|
MC_BIN="${MC_BIN:-$WORKSPACE/bin/mc}"
|
|
if [[ ! -x "$MC_BIN" ]]; then
|
|
MC_BIN="$(command -v mc || true)"
|
|
fi
|
|
if [[ -z "$MC_BIN" || ! -x "$MC_BIN" ]]; then
|
|
echo "MinIO client not found. Set MC_BIN or install mc." >&2
|
|
exit 1
|
|
fi
|
|
|
|
"$MC_BIN" alias set minio "$MINIO_ENDPOINT" "$MINIO_ACCESS_KEY" "$MINIO_SECRET_KEY" >/dev/null
|
|
"$MC_BIN" mb --ignore-existing "minio/$MINIO_BUCKET" >/dev/null
|
|
"$MC_BIN" mirror --overwrite "$TMPDIR" "minio/$MINIO_BUCKET/$PREFIX" >/dev/null
|
|
"$MC_BIN" ls --recursive "minio/$MINIO_BUCKET/$PREFIX"
|
|
|
|
echo "Backup complete: s3://$MINIO_BUCKET/$PREFIX"
|