#!/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"