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
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
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
|
||||
Reference in New Issue
Block a user