You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
2.8 KiB

#!/bin/bash
set -euo pipefail
umask 077
release_id="${1:?Specify an existing checked release ID}"
[[ "$release_id" =~ ^[0-9]{8}-[0-9]{2}$ ]] || { echo 'Invalid release ID'; exit 1; }
release="/opt/mesa-abierta/releases/$release_id"
[[ "$(realpath "$release")" == "$release" && -f "$release/build/handler.js" ]] || { echo 'Release has not been built'; exit 1; }
cd "$release"
config_backup="/var/backups/mesa-abierta/config-$release_id"
install -d -m 0700 "$config_backup"
if [[ -f /etc/mesa-abierta/game.env ]]; then cp -a /etc/mesa-abierta/game.env "$config_backup/"; fi
for unit in mesa-game.service mesa-web.service mesa-backup.service mesa-backup.timer; do
if [[ -f "/etc/systemd/system/$unit" ]]; then cp -a "/etc/systemd/system/$unit" "$config_backup/"; fi
done
previous="$(readlink -f /opt/mesa-abierta/current || true)"
if [[ -n "$previous" && -d "$previous" ]]; then printf '%s\n' "$previous" > "$config_backup/previous-release"; fi
python3 deploy/configure-production.py
runuser -u mesa -- /usr/bin/node --env-file=/etc/mesa-abierta/backup.env --input-type=module -e "import {spawnSync} from 'node:child_process'; const result=spawnSync('/bin/sh',['deploy/backup.sh'],{stdio:'inherit',env:process.env}); process.exit(result.status ?? 1)"
runuser -u mesa -- /usr/bin/node --env-file=/etc/mesa-abierta/game.env scripts/migrate.mjs
for unit in mesa-game.service mesa-backup.service mesa-backup.timer; do
install -m 0644 "deploy/$unit" "/etc/systemd/system/$unit"
done
if systemctl cat mesa-web.service >/dev/null 2>&1; then systemctl disable --now mesa-web.service; fi
# Open tabs may still request chunks from the preceding client build.
# Their content hashes keep them separate from the new release's assets.
if [[ -n "$previous" && -d "$previous/build/client/_app/immutable" ]]; then
cp -an "$previous/build/client/_app/immutable/." "$release/build/client/_app/immutable/"
fi
ln -sfn "$release" /opt/mesa-abierta/current.next
mv -Tf /opt/mesa-abierta/current.next /opt/mesa-abierta/current
systemctl daemon-reload
systemctl enable mesa-game.service mesa-backup.timer
systemctl restart mesa-game.service
systemctl start mesa-backup.timer
for attempt in $(seq 1 20); do
if curl -4 --fail --silent --max-time 3 http://127.0.0.1:3000/api/health; then break; fi
sleep 1
done
curl -4 --fail --silent --max-time 10 http://127.0.0.1:3000/api/health
curl -4 --fail --silent --max-time 10 http://127.0.0.1:3000/ > /dev/null
curl -4 --fail --silent --max-time 10 http://127.0.0.1:3000/condiciones > /dev/null
# The existing network proxy connects directly to Node. No VM proxy is needed.
if systemctl cat nginx.service >/dev/null 2>&1; then systemctl disable --now nginx.service; fi
systemctl start mesa-backup.service
systemctl is-active mesa-game.service mesa-backup.timer postgresql
printf '\nRelease active: %s - web, API and WebSockets at 192.168.18.155:3000\n' "$release_id"

Powered by TurnKey Linux.