Files
SOMA-PRO/.github/workflows/backup.yml
T
Pablo a054c73139 Agrego .github, que contiene los action yaml
No van a funcionar porque son de github actions, pero los subo porque no dejan de ser código fuente que puede reutilizarse, adaptándolo a otro entorno
2026-08-22 19:11:33 -03:00

70 lines
3.0 KiB
YAML

name: Backup semanal de la base de datos
# Dump cifrado de los esquemas public + internal (sin auth) a Google Drive,
# con rotación automática. Implementa Documentation/Backlog/Backups.md — ver
# ese doc para el diseño completo (invariantes, esquema de retención, y por
# qué la subida se hace con rclone autenticado como el dueño del Drive en
# vez de un Service Account).
#
# Falla ruidoso a propósito (invariante 3 del backlog): si el dump, el
# cifrado, la subida o la rotación fallan, este job queda en rojo y GitHub
# le manda un mail al dueño del repo. Ningún paso sensible usa
# continue-on-error.
#
# El remote de rclone dentro de RCLONE_CONFIG tiene que llamarse "gdrive"
# (ver database/backup/dump.sh y rotate.sh, que asumen ese nombre).
on:
schedule:
- cron: "0 5 * * 1" # lunes 05:00 UTC (~02:00 hora Argentina)
workflow_dispatch: {} # para probar a mano desde la pestaña Actions
jobs:
backup:
runs-on: ubuntu-latest
env:
RCLONE_REMOTE_NAME: gdrive
steps:
- uses: actions/checkout@v4
- name: Instalar postgresql-client 17 y rclone
# El postgresql-client generico de Ubuntu puede venir en una version
# mas vieja que el servidor (Postgres 17 en Supabase), y pg_dump con
# un cliente mas viejo que el servidor puede fallar o dumpear
# incompleto. Se instala la 17 explicita desde el repo oficial PGDG.
run: |
sudo apt-get update
sudo apt-get install -y curl ca-certificates gnupg
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \
-o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc
echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \
| sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt-get update
sudo apt-get install -y postgresql-client-17
curl -fsSL https://rclone.org/install.sh | sudo bash
# El runner ya trae un pg_dump mas viejo preinstalado que gana en
# el PATH aunque se instale la 17 al lado. Se antepone la carpeta
# de la 17 explicitamente para que no haya ambiguedad.
echo "/usr/lib/postgresql/17/bin" >> "$GITHUB_PATH"
- name: Configurar rclone
env:
RCLONE_CONFIG_CONTENT: ${{ secrets.RCLONE_CONFIG }}
run: |
mkdir -p ~/.config/rclone
printf '%s' "$RCLONE_CONFIG_CONTENT" > ~/.config/rclone/rclone.conf
chmod 600 ~/.config/rclone/rclone.conf
- name: Dump + comprimir + cifrar + subir
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
BACKUP_PASSPHRASE: ${{ secrets.BACKUP_PASSPHRASE }}
GDRIVE_FOLDER_ID: ${{ secrets.GDRIVE_FOLDER_ID }}
run: bash database/backup/dump.sh
- name: Rotar backups viejos
env:
GDRIVE_FOLDER_ID: ${{ secrets.GDRIVE_FOLDER_ID }}
run: bash database/backup/rotate.sh