Skip to content

Commit 7a550bb

Browse files
feat: Add backup and restore functionality for scripts directories (#118)
- Enhanced backup_data() function to backup ct/, install/, tools/, and vm/ directories - Enhanced restore_backup_files() function to restore scripts directories after update - Updated exclude patterns to preserve scripts directories during file updates - Enhanced rollback() function to restore scripts directories on update failure - Added comprehensive logging for all backup/restore operations - Ensures custom scripts are preserved during updates and restored after successful updates
1 parent 99b639e commit 7a550bb

File tree

1 file changed

+76
-2
lines changed

1 file changed

+76
-2
lines changed

update.sh

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ get_latest_release() {
170170
echo "$tag_name|$download_url"
171171
}
172172

173-
# Backup data directory and .env file
173+
# Backup data directory, .env file, and scripts directories
174174
backup_data() {
175175
log "Creating backup directory at $BACKUP_DIR..."
176176

@@ -205,6 +205,23 @@ backup_data() {
205205
else
206206
log_warning ".env file not found, skipping backup"
207207
fi
208+
209+
# Backup scripts directories
210+
local scripts_dirs=("scripts/ct" "scripts/install" "scripts/tools" "scripts/vm")
211+
for scripts_dir in "${scripts_dirs[@]}"; do
212+
if [ -d "$scripts_dir" ]; then
213+
log "Backing up $scripts_dir directory..."
214+
local backup_name=$(basename "$scripts_dir")
215+
if ! cp -r "$scripts_dir" "$BACKUP_DIR/$backup_name"; then
216+
log_error "Failed to backup $scripts_dir directory"
217+
exit 1
218+
else
219+
log_success "$scripts_dir directory backed up successfully"
220+
fi
221+
else
222+
log_warning "$scripts_dir directory not found, skipping backup"
223+
fi
224+
done
208225
}
209226

210227
# Download and extract latest release
@@ -287,6 +304,7 @@ clear_original_directory() {
287304
"*.backup"
288305
"*.bak"
289306
".git"
307+
"scripts"
290308
)
291309

292310
# Remove all files except preserved ones
@@ -328,7 +346,7 @@ clear_original_directory() {
328346

329347
# Restore backup files before building
330348
restore_backup_files() {
331-
log "Restoring .env and data directory from backup..."
349+
log "Restoring .env, data directory, and scripts directories from backup..."
332350

333351
if [ -d "$BACKUP_DIR" ]; then
334352
# Restore .env file
@@ -360,6 +378,34 @@ restore_backup_files() {
360378
else
361379
log_warning "No data directory backup found"
362380
fi
381+
382+
# Restore scripts directories
383+
local scripts_dirs=("ct" "install" "tools" "vm")
384+
for backup_name in "${scripts_dirs[@]}"; do
385+
if [ -d "$BACKUP_DIR/$backup_name" ]; then
386+
local target_dir="scripts/$backup_name"
387+
log "Restoring $target_dir directory from backup..."
388+
389+
# Ensure scripts directory exists
390+
if [ ! -d "scripts" ]; then
391+
mkdir -p "scripts"
392+
fi
393+
394+
# Remove existing directory if it exists
395+
if [ -d "$target_dir" ]; then
396+
rm -rf "$target_dir"
397+
fi
398+
399+
if mv "$BACKUP_DIR/$backup_name" "$target_dir"; then
400+
log_success "$target_dir directory restored from backup"
401+
else
402+
log_error "Failed to restore $target_dir directory"
403+
return 1
404+
fi
405+
else
406+
log_warning "No $backup_name directory backup found"
407+
fi
408+
done
363409
else
364410
log_error "No backup directory found for restoration"
365411
return 1
@@ -448,6 +494,7 @@ update_files() {
448494
"update.log"
449495
"*.backup"
450496
"*.bak"
497+
"scripts"
451498
)
452499

453500
# Find the actual source directory (strip the top-level directory)
@@ -666,6 +713,33 @@ rollback() {
666713
log_warning "No .env file backup found"
667714
fi
668715

716+
# Restore scripts directories
717+
local scripts_dirs=("ct" "install" "tools" "vm")
718+
for backup_name in "${scripts_dirs[@]}"; do
719+
if [ -d "$BACKUP_DIR/$backup_name" ]; then
720+
local target_dir="scripts/$backup_name"
721+
log "Restoring $target_dir directory from backup..."
722+
723+
# Ensure scripts directory exists
724+
if [ ! -d "scripts" ]; then
725+
mkdir -p "scripts"
726+
fi
727+
728+
# Remove existing directory if it exists
729+
if [ -d "$target_dir" ]; then
730+
rm -rf "$target_dir"
731+
fi
732+
733+
if mv "$BACKUP_DIR/$backup_name" "$target_dir"; then
734+
log_success "$target_dir directory restored from backup"
735+
else
736+
log_error "Failed to restore $target_dir directory"
737+
fi
738+
else
739+
log_warning "No $backup_name directory backup found"
740+
fi
741+
done
742+
669743
# Clean up backup directory
670744
log "Cleaning up backup directory..."
671745
rm -rf "$BACKUP_DIR"

0 commit comments

Comments
 (0)