source-gamepanel/scripts/panelctl.sh

82 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT="/root/codex/source-gamepanel"
PNPM="/root/.nvm/versions/node/v24.13.1/bin/pnpm"
SERVICES=(
"source-gamepanel-api.service"
"source-gamepanel-web.service"
"source-gamepanel-daemon.service"
)
usage() {
cat <<'EOF'
Usage: panelctl <command>
Commands:
start Start all services
stop Stop all services
restart Restart all services
status Show status of all services
logs Tail logs of all services
rebuild Rebuild API/Web/Daemon binaries
update Pull latest code, rebuild, migrate DB, restart services
deploy Rebuild current code, migrate DB, restart services
EOF
}
rebuild_all() {
cd "$ROOT"
"$PNPM" install --frozen-lockfile
"$PNPM" --filter @source/api build
"$PNPM" --filter @source/web build
source "$HOME/.cargo/env"
cd "$ROOT/apps/daemon"
cargo build --release
}
migrate_db() {
cd "$ROOT"
"$PNPM" db:migrate
}
cmd="${1:-}"
case "$cmd" in
start)
systemctl start "${SERVICES[@]}"
;;
stop)
systemctl stop "${SERVICES[@]}"
;;
restart)
systemctl restart "${SERVICES[@]}"
;;
status)
systemctl --no-pager --full status "${SERVICES[@]}"
;;
logs)
journalctl -u "${SERVICES[0]}" -u "${SERVICES[1]}" -u "${SERVICES[2]}" -f
;;
rebuild)
rebuild_all
;;
update)
cd "$ROOT"
git pull --ff-only
rebuild_all
migrate_db
systemctl restart "${SERVICES[@]}"
systemctl --no-pager --full status "${SERVICES[@]}"
;;
deploy)
rebuild_all
migrate_db
systemctl restart "${SERVICES[@]}"
systemctl --no-pager --full status "${SERVICES[@]}"
;;
*)
usage
exit 1
;;
esac