#!/usr/bin/env bash set -euo pipefail # WetGIT Forgejo backup — managed by Ansible # Uses Forgejo's built-in dump command (no downtime). BACKUP_DIR="{{ app_dir }}/backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) RETENTION_DAYS=14 LOG_PREFIX="[$(date '+%Y-%m-%d %H:%M:%S')]" echo "$LOG_PREFIX Starting WetGit backup..." # Forgejo dump (runs inside container, no service stop needed) docker exec wetgit-forgejo forgejo dump \ --type tar.gz \ --file /data/backup-${TIMESTAMP}.tar.gz \ 2>&1 || { echo "$LOG_PREFIX ERROR: Forgejo dump failed" exit 1 } # Move dump from container volume to backup dir mv "{{ forgejo_data_dir }}/backup-${TIMESTAMP}.tar.gz" \ "$BACKUP_DIR/wetgit-forgejo-${TIMESTAMP}.tar.gz" # Also backup Redis AOF docker exec wetgit-redis redis-cli BGSAVE 2>/dev/null || true sleep 2 cp "{{ data_dir }}/redis/dump.rdb" \ "$BACKUP_DIR/wetgit-redis-${TIMESTAMP}.rdb" 2>/dev/null || true # Clean old backups find "$BACKUP_DIR" -name "wetgit-forgejo-*.tar.gz" -mtime +${RETENTION_DAYS} -delete find "$BACKUP_DIR" -name "wetgit-redis-*.rdb" -mtime +${RETENTION_DAYS} -delete echo "$LOG_PREFIX Backup complete: wetgit-forgejo-${TIMESTAMP}.tar.gz"