Skip to content

Automated DB Backups #115

Automated DB Backups

Automated DB Backups #115

name: Automated DB Backups
on:
schedule:
- cron: '* */12 * * *'
workflow_dispatch:
jobs:
backup-database:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Copy backup script to server
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: "automated_db_backups/backup.sh"
target: "/tmp"
strip_components: 1
- name: Run backup on server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
# Define script locations
TEMP_SCRIPT="/tmp/backup.sh"
PERMANENT_SCRIPT="/usr/local/bin/mongodb-backup.sh"
# Check if script needs updating
if [ -f "${PERMANENT_SCRIPT}" ]; then
if ! cmp -s "${TEMP_SCRIPT}" "${PERMANENT_SCRIPT}"; then
echo "Script has changes, updating..."
sudo cp "${TEMP_SCRIPT}" "${PERMANENT_SCRIPT}"
sudo chmod +x "${PERMANENT_SCRIPT}"
echo "✓ Script updated"
else
echo "✓ Script is up to date"
fi
else
echo "Installing script for first time..."
sudo cp "${TEMP_SCRIPT}" "${PERMANENT_SCRIPT}"
sudo chmod +x "${PERMANENT_SCRIPT}"
echo "✓ Script installed"
fi
# Run the backup script
echo "Running backup script..."
sudo "${PERMANENT_SCRIPT}"
# Check exit code
if [ $? -eq 0 ]; then
echo "✓ Backup completed successfully"
else
echo "✗ Backup failed"
exit 1
fi
# - name: Notify on failure
# if: failure()
# uses: appleboy/ssh-action@v1.0.3
# with:
# host: ${{ secrets.SERVER_HOST }}
# username: ${{ secrets.SERVER_USER }}
# key: ${{ secrets.SSH_PRIVATE_KEY }}
# script: |
# echo "Backup failed at $(date)" >> /var/log/mongodb-backup-failures.log