diff --git a/.gitea/workflows/backup-volumes.yml b/.gitea/workflows/backup-volumes.yml index 0fa73d7..a87fa61 100644 --- a/.gitea/workflows/backup-volumes.yml +++ b/.gitea/workflows/backup-volumes.yml @@ -23,27 +23,28 @@ jobs: - name: Create backup on remote server run: | BACKUP_DATE=$(date +%Y%m%d_%H%M%S) + echo "BACKUP_DATE=$BACKUP_DATE" >> $GITHUB_ENV - ssh ${{ secrets.BACKUP_USER }}@${{ secrets.BACKUP_HOST }} << 'ENDSSH' + ssh ${{ secrets.BACKUP_USER }}@${{ secrets.BACKUP_HOST }} << ENDSSH set -e BACKUP_DATE="$BACKUP_DATE" - BACKUP_BASE_DIR="$HOME/backups" - BACKUP_DIR="$BACKUP_BASE_DIR/$BACKUP_DATE" + BACKUP_BASE_DIR="\$HOME/backups" + BACKUP_DIR="\$BACKUP_BASE_DIR/\$BACKUP_DATE" - echo "Creating backup directory: $BACKUP_DIR" - mkdir -p "$BACKUP_DIR" + echo "Creating backup directory: \$BACKUP_DIR" + mkdir -p "\$BACKUP_DIR" echo "Listing available volumes:" docker volume ls # Backup Gitea Data echo "Backing up gitea-data..." - VOLUME_NAME=$(docker volume ls --format '{{.Name}}' | grep 'gitea-data$' | head -n1) - if [ -n "$VOLUME_NAME" ]; then + VOLUME_NAME=\$(docker volume ls --format '{{.Name}}' | grep 'gitea-data\$' | head -n1) + if [ -n "\$VOLUME_NAME" ]; then docker run --rm \ - -v "$VOLUME_NAME":/source:ro \ - -v "$BACKUP_DIR":/backup \ + -v "\$VOLUME_NAME":/source:ro \ + -v "\$BACKUP_DIR":/backup \ alpine tar czf /backup/gitea-data.tar.gz -C /source . echo "✓ gitea-data backed up" else @@ -52,11 +53,11 @@ jobs: # Backup Gitea Database echo "Backing up gitea-database..." - VOLUME_NAME=$(docker volume ls --format '{{.Name}}' | grep 'gitea-database$' | head -n1) - if [ -n "$VOLUME_NAME" ]; then + VOLUME_NAME=\$(docker volume ls --format '{{.Name}}' | grep 'gitea-database\$' | head -n1) + if [ -n "\$VOLUME_NAME" ]; then docker run --rm \ - -v "$VOLUME_NAME":/source:ro \ - -v "$BACKUP_DIR":/backup \ + -v "\$VOLUME_NAME":/source:ro \ + -v "\$BACKUP_DIR":/backup \ alpine tar czf /backup/gitea-database.tar.gz -C /source . echo "✓ gitea-database backed up" else @@ -65,11 +66,11 @@ jobs: # Backup MinIO Data echo "Backing up minio-data..." - VOLUME_NAME=$(docker volume ls --format '{{.Name}}' | grep 'minio-data$' | head -n1) - if [ -n "$VOLUME_NAME" ]; then + VOLUME_NAME=\$(docker volume ls --format '{{.Name}}' | grep 'minio-data\$' | head -n1) + if [ -n "\$VOLUME_NAME" ]; then docker run --rm \ - -v "$VOLUME_NAME":/source:ro \ - -v "$BACKUP_DIR":/backup \ + -v "\$VOLUME_NAME":/source:ro \ + -v "\$BACKUP_DIR":/backup \ alpine tar czf /backup/minio-data.tar.gz -C /source . echo "✓ minio-data backed up" else @@ -78,11 +79,11 @@ jobs: # Backup Gitea Runner Data echo "Backing up gitea-runner-data..." - VOLUME_NAME=$(docker volume ls --format '{{.Name}}' | grep 'gitea-runner-data$' | head -n1) - if [ -n "$VOLUME_NAME" ]; then + VOLUME_NAME=\$(docker volume ls --format '{{.Name}}' | grep 'gitea-runner-data\$' | head -n1) + if [ -n "\$VOLUME_NAME" ]; then docker run --rm \ - -v "$VOLUME_NAME":/source:ro \ - -v "$BACKUP_DIR":/backup \ + -v "\$VOLUME_NAME":/source:ro \ + -v "\$BACKUP_DIR":/backup \ alpine tar czf /backup/gitea-runner-data.tar.gz -C /source . echo "✓ gitea-runner-data backed up" else @@ -90,34 +91,33 @@ jobs: fi # Create manifest - cd "$BACKUP_DIR" - cat > manifest.txt << EOF - Backup created: $(date) - Hostname: $(hostname) + cd "\$BACKUP_DIR" + cat > manifest.txt << 'MANIFEST_EOF' + Backup created: \$(date) + Hostname: \$(hostname) Files: - $(ls -lh *.tar.gz 2>/dev/null || echo "No backup files created") + \$(ls -lh *.tar.gz 2>/dev/null || echo "No backup files created") Checksums (SHA256): - $(sha256sum *.tar.gz 2>/dev/null || echo "No files to checksum") - EOF + \$(sha256sum *.tar.gz 2>/dev/null || echo "No files to checksum") +MANIFEST_EOF echo "Backup manifest:" cat manifest.txt - echo "Total backup size: $(du -sh $BACKUP_DIR)" + echo "Total backup size: \$(du -sh \$BACKUP_DIR)" ENDSSH - name: Download backups from remote server run: | - BACKUP_DATE=$(date +%Y%m%d_%H%M%S) mkdir -p backups echo "Downloading backups from remote server..." - scp -r ${{ secrets.BACKUP_USER }}@${{ secrets.BACKUP_HOST }}:~/backups/$BACKUP_DATE backups/ + scp -r ${{ secrets.BACKUP_USER }}@${{ secrets.BACKUP_HOST }}:~/backups/${{ env.BACKUP_DATE }} backups/ echo "Downloaded files:" - ls -lh backups/$BACKUP_DATE/ + ls -lh backups/${{ env.BACKUP_DATE }}/ - name: Upload backup artifacts uses: actions/upload-artifact@v4 @@ -129,10 +129,10 @@ jobs: - name: Cleanup old remote backups (keep last 7 days) if: always() run: | - ssh ${{ secrets.BACKUP_USER }}@${{ secrets.BACKUP_HOST }} << 'ENDSSH' + ssh ${{ secrets.BACKUP_USER }}@${{ secrets.BACKUP_HOST }} << 'CLEANUP_EOF' # Lösche Backups älter als 7 Tage find ~/backups -maxdepth 1 -type d -name "????????_??????" -mtime +7 -exec rm -rf {} \; 2>/dev/null || true echo "Old backups cleaned up (kept last 7 days)" echo "Current backups:" ls -lh ~/backups/ 2>/dev/null || echo "No backups found" - ENDSSH +CLEANUP_EOF