Files
project.linkedcorp.net/scripts/apply-update.sh
T
Milton Gonzalez ee72b52b13 fix: version 2.2.2 -- build de auto-update y tamanos de logo
El script de auto-actualizacion heredaba NODE_ENV=production del
backend, lo que hacia que npm saltara devDependencies (vite incluido)
al instalar el frontend -- el build fallaba en silencio y el sistema
quedaba en la version vieja. Se fuerza --include=dev en ese paso.

De paso: logo de la empresa que usa el sistema al doble de tamano,
logo de LinkedCorp (desarrollador) a la mitad.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 12:27:57 -05:00

63 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Ejecuta el update real: lo dispara el backend (POST /api/updater/apply) via un proceso
# separado y detached, nunca corre inline en el request HTTP (el propio backend se reinicia
# al final).
#
# IMPORTANTE: este script se ejecuta desde una copia FUERA de source/ (normalmente
# $APP_DIR/scripts/apply-update.sh) — nunca desde dentro de source/, porque el propio script
# hace `git reset --hard` sobre source/ mientras corre. Si se ejecutara desde ahi, se
# sobreescribiria a si mismo a mitad de ejecucion (comportamiento indefinido en bash).
#
# Variables requeridas en el entorno (via EnvironmentFile del backend, ya cargadas por el
# proceso Node que invoca este script):
# APP_DIR ej. /opt/apps/project.exilaser.net
# BACKEND_SERVICE ej. project-exilaser-backend
# FRONTEND_SERVICE ej. project-exilaser-frontend
# DB_HOST / DB_USER / DB_PASSWORD / DB_NAME (ya vienen del .env del backend)
set -euo pipefail
: "${APP_DIR:?falta APP_DIR}"
: "${BACKEND_SERVICE:?falta BACKEND_SERVICE}"
: "${FRONTEND_SERVICE:?falta FRONTEND_SERVICE}"
LOG="$APP_DIR/logs/update.log"
mkdir -p "$APP_DIR/logs" "$APP_DIR/backups"
exec >>"$LOG" 2>&1
echo ""
echo "=== update start $(date -Iseconds) ==="
echo "-- backup de base de datos --"
mysqldump --single-transaction -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" \
> "$APP_DIR/backups/pre_update_$(date +%Y%m%d_%H%M%S).sql"
echo "-- git fetch + reset --"
cd "$APP_DIR/source"
git fetch origin main
git reset --hard origin/main
NEW_VERSION="$(cat VERSION)"
echo "version objetivo: $NEW_VERSION"
echo "-- backend: npm install + migraciones --"
cd "$APP_DIR/source/backend"
npm install --omit=dev
node src/scripts/migrate-db.js
echo "-- frontend: npm install + build --"
cd "$APP_DIR/source/frontend"
# --include=dev es necesario a la fuerza: este script hereda NODE_ENV=production del backend
# (via EnvironmentFile), y con eso npm salta devDependencies por defecto -- incluido vite, que
# es la unica forma de hacer el build. Sin esto, "npm install" queda "up to date" sin instalar
# nada realmente y el build falla con "vite: not found".
npm install --include=dev
npm run build
echo "-- publicando build de frontend --"
rm -rf "$APP_DIR/frontend/dist"
cp -r dist "$APP_DIR/frontend/dist"
echo "-- reiniciando servicios --"
sudo systemctl restart "$BACKEND_SERVICE" "$FRONTEND_SERVICE"
echo "=== update done $(date -Iseconds) -- v$NEW_VERSION ==="