Skip to content

Commit

Permalink
scripts: add a backup and restore script
Browse files Browse the repository at this point in the history
  • Loading branch information
ahayzen committed Apr 16, 2024
1 parent d91b0f7 commit 2876416
Show file tree
Hide file tree
Showing 3 changed files with 136 additions and 1 deletion.
12 changes: 11 additions & 1 deletion .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,19 @@ jobs:
- name: git diff
run: git diff --exit-code

shellcheck:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
# Shellcheck should already be installed on github runners
- name: install shellcheck
run: sudo apt install --yes shellcheck
- name: shellcheck
run: shellcheck scripts/*.sh

nix-flake-check:
# Run after pre checks
needs: [license-check, flake-checker, nix-fmt]
needs: [license-check, flake-checker, nix-fmt, shellcheck]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
Expand Down
63 changes: 63 additions & 0 deletions scripts/backup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/usr/bin/env bash
#
# SPDX-FileCopyrightText: Andrew Hayzen <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0

set -e

#
# backup <machine-name> <backup-dest>
#

# Check that rsync exists
if [ ! -x "$(command -v rsync)" ]; then
echo "rsync command not found, cannot backup"
exit 1
fi
RSYNC_ARGS="-avhP"

HEADLESS_SYSTEM=false
USER_HOST=""

# Check that the machine name is known
case $1 in
vps)
HEADLESS_SYSTEM=true
USER_HOST="[email protected]"
;;
*)
echo "Unknown machine name"
exit 1
;;
esac

# Check that the target folder exists
USER_DEST=$2
if [ ! -d "$USER_DEST" ]; then
echo "Failed to find backup target"
exit 1
fi

# Generate a folder for the backup and check it doesn't already exist
BACKUP_DEST="$USER_DEST/$(date --iso-8601)"
if [ -d "$BACKUP_DEST" ]; then
echo "Backup already exists at $BACKUP_DEST, won't overwrite"
exit 1
fi
mkdir -p "$BACKUP_DEST"

# This is a normal headless system
if [ $HEADLESS_SYSTEM ]; then
export DOCKER_COMPOSE_RUNNER_DEST="$BACKUP_DEST/docker-compose-runner"
mkdir -p "$DOCKER_COMPOSE_RUNNER_DEST"

# Backup all of the docker data
"$(command -v rsync)" $RSYNC_ARGS "$USER_HOST:/var/lib/docker-compose-runner/" "$DOCKER_COMPOSE_RUNNER_DEST"
fi

# Ensure the filesystem is synced
sync

echo "Backup complete!"
date
62 changes: 62 additions & 0 deletions scripts/restore.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/usr/bin/env bash
#
# SPDX-FileCopyrightText: Andrew Hayzen <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0

set -e

#
# restore <machine-name> <restore-source>
#

# Check that rsync exists
if [ ! -x "$(command -v rsync)" ]; then
echo "rsync command not found, cannot restore"
exit 1
fi
RSYNC_ARGS="-avhP"

HEADLESS_SYSTEM=false
USER_HOST=""

# Check that the machine name is known
case $1 in
vps)
HEADLESS_SYSTEM=true
USER_HOST="[email protected]"
;;
*)
echo "Unknown machine name"
exit 1
;;
esac

# Check that the source folder exists
USER_SRC=$2
if [ ! -d "$USER_SRC" ]; then
echo "Failed to find restore source"
exit 1
fi
RESTORE_SRC="$USER_SRC"

# This is a normal headless system
if [ $HEADLESS_SYSTEM ]; then
export DOCKER_COMPOSE_RUNNER_SRC="$RESTORE_SRC/docker-compose-runner"
if [ ! -d "$DOCKER_COMPOSE_RUNNER_SRC" ]; then
echo "Failed to find docker-compose-runner data to restore"
exit 1
fi

# Stop services as we are about to mutate data
ssh "$USER_HOST" sudo systemctl stop docker-compose-runner.service

# Restore all of the docker data
"$(command -v rsync)" $RSYNC_ARGS "$DOCKER_COMPOSE_RUNNER_SRC" "$USER_HOST:/var/lib/docker-compose-runner/"

# Restart services
ssh $USER_HOST sudo systemctl start docker-compose-runner.service
fi

echo "Restore complete!"
date

0 comments on commit 2876416

Please sign in to comment.