fix: backup and restore data/ dir on update and rollback
The data/ directory (services.json, config.json, credentials, TOTP config, notifications) was never included in the update backup. Every update wiped user data — services, licenses, credentials — requiring manual restore. Now the host-side updater: - Backs up data/ alongside code files before any update - Restores data/ on rollback (build failure, restart failure, or health-check failure)
This commit is contained in:
@@ -115,7 +115,7 @@ main() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. Backup current API files
|
||||
# 3. Backup current API files AND data directory
|
||||
local backup_dir="${BACKUPS_DIR}/${from_version}"
|
||||
mkdir -p "$backup_dir"
|
||||
log "Backing up current API files to ${backup_dir}"
|
||||
@@ -126,9 +126,14 @@ main() {
|
||||
done
|
||||
[[ -d "$api_source_dir/routes" ]] && cp -rf "$api_source_dir/routes" "$backup_dir/"
|
||||
[[ -d "$api_source_dir/src" ]] && cp -rf "$api_source_dir/src" "$backup_dir/"
|
||||
# VERSION (commit hash) was copied from api_source_dir above; preserve as-is
|
||||
# so a rollback restores the original commit marker. The version *string* is
|
||||
# already encoded in the backup dir name (${from_version}).
|
||||
|
||||
# Backup data directory (services.json, config.json, credentials, TOTP, etc.)
|
||||
# This is the critical gap — without this, user data is lost on every update.
|
||||
if [[ -d "$api_source_dir/data" ]]; then
|
||||
log "Backing up data directory: ${api_source_dir}/data/"
|
||||
rm -rf "$backup_dir/data"
|
||||
cp -rf "$api_source_dir/data" "$backup_dir/data"
|
||||
fi
|
||||
|
||||
cleanup_old_backups
|
||||
|
||||
@@ -212,6 +217,12 @@ main() {
|
||||
rm -rf "$api_source_dir/src"
|
||||
cp -rf "$backup_dir/src" "$api_source_dir/src"
|
||||
fi
|
||||
# Restore data directory (services.json, config.json, credentials, TOTP, etc.)
|
||||
if [[ -d "$backup_dir/data" ]]; then
|
||||
log "Restoring data directory from backup"
|
||||
rm -rf "$api_source_dir/data"
|
||||
cp -rf "$backup_dir/data" "$api_source_dir/data"
|
||||
fi
|
||||
|
||||
write_result "false" "$version" "$(( $(date +%s) - start_time ))" "Docker build failed"
|
||||
rm -f "${TRIGGER_FILE}.processing"
|
||||
@@ -237,6 +248,12 @@ main() {
|
||||
rm -rf "$api_source_dir/src"
|
||||
cp -rf "$backup_dir/src" "$api_source_dir/src"
|
||||
fi
|
||||
# Restore data directory
|
||||
if [[ -d "$backup_dir/data" ]]; then
|
||||
log "Restoring data directory from backup"
|
||||
rm -rf "$api_source_dir/data"
|
||||
cp -rf "$backup_dir/data" "$api_source_dir/data"
|
||||
fi
|
||||
|
||||
docker compose build --quiet 2>&1 || docker-compose build --quiet 2>&1 || true
|
||||
docker compose up -d 2>&1 || docker-compose up -d 2>&1 || true
|
||||
@@ -267,6 +284,12 @@ main() {
|
||||
rm -rf "$api_source_dir/src"
|
||||
cp -rf "$backup_dir/src" "$api_source_dir/src"
|
||||
fi
|
||||
# Restore data directory
|
||||
if [[ -d "$backup_dir/data" ]]; then
|
||||
log "Restoring data directory from backup"
|
||||
rm -rf "$api_source_dir/data"
|
||||
cp -rf "$backup_dir/data" "$api_source_dir/data"
|
||||
fi
|
||||
|
||||
docker compose build --quiet 2>&1 || docker-compose build --quiet 2>&1 || true
|
||||
docker compose up -d 2>&1 || docker-compose up -d 2>&1 || true
|
||||
|
||||
Reference in New Issue
Block a user