61 lines
1.8 KiB
Bash
61 lines
1.8 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Required env vars:
|
|
# FLYNN_DATA_DIR (default: ~/.local/share/flynn)
|
|
# FLYNN_BACKUP_DIR (default: ~/.local/share/flynn/backups)
|
|
# MINIO_ENDPOINT
|
|
# MINIO_ACCESS_KEY
|
|
# MINIO_SECRET_KEY
|
|
# MINIO_BUCKET
|
|
#
|
|
# Optional:
|
|
# MINIO_PREFIX (default: flynn)
|
|
# MINIO_SECURE (default: true)
|
|
|
|
DATA_DIR="${FLYNN_DATA_DIR:-$HOME/.local/share/flynn}"
|
|
BACKUP_DIR="${FLYNN_BACKUP_DIR:-$HOME/.local/share/flynn/backups}"
|
|
MINIO_PREFIX="${MINIO_PREFIX:-flynn}"
|
|
MINIO_SECURE="${MINIO_SECURE:-true}"
|
|
|
|
if [[ -z "${MINIO_ENDPOINT:-}" || -z "${MINIO_ACCESS_KEY:-}" || -z "${MINIO_SECRET_KEY:-}" || -z "${MINIO_BUCKET:-}" ]]; then
|
|
echo "Missing MinIO config. Set MINIO_ENDPOINT, MINIO_ACCESS_KEY, MINIO_SECRET_KEY, MINIO_BUCKET." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v mc >/dev/null 2>&1; then
|
|
echo "MinIO client (mc) not found in PATH." >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "${BACKUP_DIR}"
|
|
|
|
STAMP="$(date -u +%Y%m%d_%H%M%S)"
|
|
ARCHIVE="flynn_${STAMP}.tar.gz"
|
|
ARCHIVE_PATH="${BACKUP_DIR}/${ARCHIVE}"
|
|
|
|
ENTRIES=()
|
|
[[ -f "${DATA_DIR}/sessions.db" ]] && ENTRIES+=("sessions.db")
|
|
[[ -f "${DATA_DIR}/vectors.db" ]] && ENTRIES+=("vectors.db")
|
|
[[ -d "${DATA_DIR}/memory" ]] && ENTRIES+=("memory")
|
|
|
|
if [[ ${#ENTRIES[@]} -eq 0 ]]; then
|
|
echo "No backup inputs found under ${DATA_DIR}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
tar -czf "${ARCHIVE_PATH}" -C "${DATA_DIR}" "${ENTRIES[@]}"
|
|
|
|
if [[ "${MINIO_SECURE}" == "true" ]]; then
|
|
PROTO="https"
|
|
else
|
|
PROTO="http"
|
|
fi
|
|
|
|
export MC_HOST_flynnbackup="${PROTO}://${MINIO_ACCESS_KEY}:${MINIO_SECRET_KEY}@${MINIO_ENDPOINT}"
|
|
mc mb --ignore-existing "flynnbackup/${MINIO_BUCKET}" >/dev/null
|
|
mc cp "${ARCHIVE_PATH}" "flynnbackup/${MINIO_BUCKET}/${MINIO_PREFIX}/${ARCHIVE}" >/dev/null
|
|
|
|
echo "Backup created: ${ARCHIVE_PATH}"
|
|
echo "Uploaded to: flynnbackup/${MINIO_BUCKET}/${MINIO_PREFIX}/${ARCHIVE}"
|