41 lines
1.1 KiB
Bash
Executable File
41 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Daily snapshot of Hermes SQLite databases + git push to Gitea
|
|
set -e
|
|
|
|
HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"
|
|
BACKUP_DIR="$HERMES_HOME/backups"
|
|
RETENTION_DAYS=30
|
|
|
|
mkdir -p "$BACKUP_DIR"
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
|
|
# 1. Snapshot SQLite databases
|
|
for db in memory_store.db state.db; do
|
|
SRC="$HERMES_HOME/$db"
|
|
if [ -f "$SRC" ]; then
|
|
cp "$SRC" "$BACKUP_DIR/${db%.db}_${DATE}.db"
|
|
echo "backed up $db"
|
|
else
|
|
echo "skipping $db (not found)"
|
|
fi
|
|
done
|
|
|
|
# Prune backups older than RETENTION_DAYS
|
|
find "$BACKUP_DIR" -name '*.db' -type f -mtime +$RETENTION_DAYS -delete 2>/dev/null
|
|
|
|
echo "snapshot complete: $(date)"
|
|
|
|
# 2. Git commit & push config changes to Gitea
|
|
if cd "$HERMES_HOME"; then
|
|
# Stage everything except what .gitignore excludes
|
|
git add -A 2>/dev/null || true
|
|
|
|
# Only commit if there's something to commit
|
|
if ! git diff --cached --quiet; then
|
|
git commit -m "auto-backup: $(date +'%Y-%m-%d %H:%M')" 2>&1 | head -5
|
|
git push origin main 2>&1 | head -5
|
|
echo "git: config pushed to gitea"
|
|
else
|
|
echo "git: no config changes to commit"
|
|
fi
|
|
fi |