Compare commits

...

2 commits

Author SHA1 Message Date
dlawler489
0844c9f86a Merge backup settings fix
All checks were successful
build-and-push / docker (push) Successful in 16s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 16:49:33 +10:00
dlawler489
217671a5ef Read .env settings tolerantly, and check the files folder first
The backup script missed DATA_DIR when the line carried an export prefix,
quotes, padding or a CR, and silently fell back to ./data — dumping first
and only then discovering there was nothing to mirror. It now strips all
that, prints the paths it's using, and stops before writing anything if
the files folder isn't there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 16:49:33 +10:00

View file

@ -14,12 +14,17 @@ set -euo pipefail
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
# A setting from the environment, else from .env, else the fallback. Tolerates
# "export NAME=", quotes, spaces and Windows line endings.
setting() { # name, fallback setting() { # name, fallback
local from_env="${!1:-}" local from_env="${!1:-}"
if [ -n "$from_env" ]; then echo "$from_env"; return; fi if [ -n "$from_env" ]; then echo "$from_env"; return; fi
if [ -f .env ]; then if [ -f .env ]; then
local line local line
line="$(grep -E "^$1=" .env | tail -1 | cut -d= -f2-)" line="$(sed -e 's/\r$//' .env \
| grep -E "^[[:space:]]*(export[[:space:]]+)?$1[[:space:]]*=" \
| tail -1 | cut -d= -f2- \
| sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e 's/^"\(.*\)"$/\1/' -e "s/^'\(.*\)'$/\1/")"
if [ -n "$line" ]; then echo "$line"; return; fi if [ -n "$line" ]; then echo "$line"; return; fi
fi fi
echo "$2" echo "$2"
@ -30,6 +35,15 @@ DATA_DIR="$(setting DATA_DIR ./data)"
KEEP_DAYS="$(setting KEEP_DAYS 14)" KEEP_DAYS="$(setting KEEP_DAYS 14)"
stamp="$(date +%Y-%m-%d)" stamp="$(date +%Y-%m-%d)"
echo "$(date '+%F %T') data: $DATA_DIR → backups: $BACKUP_DIR"
# Checked before anything is written: on an external disk that isn't mounted,
# the folder is simply missing, and a backup of nothing is worse than none.
if [ ! -d "$DATA_DIR/uploads" ]; then
echo "$(date '+%F %T') FAILED: no $DATA_DIR/uploads — is the disk mounted, and is DATA_DIR set in .env?" >&2
exit 1
fi
mkdir -p "$BACKUP_DIR/db" mkdir -p "$BACKUP_DIR/db"
# --- the database ----------------------------------------------------------- # --- the database -----------------------------------------------------------
@ -62,9 +76,5 @@ find "$BACKUP_DIR/db" -name 'printhive-*.dump' -type f -mtime "+$KEEP_DAYS" -del
# --- the model files -------------------------------------------------------- # --- the model files --------------------------------------------------------
# A mirror, not a history: it matches what's there now, deletions included. # A mirror, not a history: it matches what's there now, deletions included.
# Thumbnails, previews and extracted archives are left out — they rebuild. # Thumbnails, previews and extracted archives are left out — they rebuild.
if [ ! -d "$DATA_DIR/uploads" ]; then
echo "$(date '+%F %T') FAILED: no $DATA_DIR/uploads — is the disk mounted?" >&2
exit 1
fi
rsync -a --delete "$DATA_DIR/uploads/" "$BACKUP_DIR/uploads/" rsync -a --delete "$DATA_DIR/uploads/" "$BACKUP_DIR/uploads/"
echo "$(date '+%F %T') files → $BACKUP_DIR/uploads ($(du -sh "$BACKUP_DIR/uploads" | cut -f1))" echo "$(date '+%F %T') files → $BACKUP_DIR/uploads ($(du -sh "$BACKUP_DIR/uploads" | cut -f1))"