Add scripts/vps-update-server.sh for native VPS git pull and compile
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Executable
+181
@@ -0,0 +1,181 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Fractured / AzerothCore — native VPS rolling update (git + compile).
|
||||||
|
#
|
||||||
|
# Run from anywhere; resolves the repository root from this script's location.
|
||||||
|
# Typical production layout: sources in ~/src/Fractured, install prefix in ~/azeroth-server
|
||||||
|
# (see docs/DEPLOY_LINUX_VPS.md).
|
||||||
|
#
|
||||||
|
# What this does:
|
||||||
|
# 1. git pull on the current branch (optional; can skip)
|
||||||
|
# 2. ./acore.sh compiler build — or compiler all for a full clean rebuild
|
||||||
|
#
|
||||||
|
# Database migrations from data/sql/updates/ run when you next start worldserver/authserver
|
||||||
|
# (Updates.* / SourceDirectory in *.conf). This script does not start or stop daemons unless
|
||||||
|
# you pass --run-after or set FRACTURED_POST_UPDATE_CMD.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# bash scripts/vps-update-server.sh
|
||||||
|
# bash scripts/vps-update-server.sh --full
|
||||||
|
# bash scripts/vps-update-server.sh --no-pull
|
||||||
|
# bash scripts/vps-update-server.sh --dry-run
|
||||||
|
# FRACTURED_POST_UPDATE_CMD='sudo systemctl restart fractured-world' bash scripts/vps-update-server.sh --run-after
|
||||||
|
# bash scripts/vps-update-server.sh --run-after 'sudo systemctl restart fractured-world'
|
||||||
|
#
|
||||||
|
# Environment:
|
||||||
|
# FRACTURED_GIT_REMOTE — remote name (default: origin)
|
||||||
|
# FRACTURED_POST_UPDATE_CMD — shell command run after a successful compile (if --run-after is passed without an argument, this is used)
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||||
|
|
||||||
|
NO_PULL=0
|
||||||
|
FULL_BUILD=0
|
||||||
|
COMPILE_ONLY=0
|
||||||
|
DRY_RUN=0
|
||||||
|
DO_RUN_AFTER=0
|
||||||
|
POST_UPDATE_CMD="${FRACTURED_POST_UPDATE_CMD:-}"
|
||||||
|
GIT_REMOTE="${FRACTURED_GIT_REMOTE:-origin}"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
Fractured VPS update — git pull + compiler (see header in script for full notes).
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
bash scripts/vps-update-server.sh [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--no-pull Skip git pull (only compile current tree).
|
||||||
|
--full ./acore.sh compiler all (clean + configure + compile).
|
||||||
|
--compile-only ./acore.sh compiler compile (incremental).
|
||||||
|
--dry-run Print commands without running them.
|
||||||
|
--run-after [CMD] Run shell command after successful compile. If CMD is omitted,
|
||||||
|
uses FRACTURED_POST_UPDATE_CMD from the environment.
|
||||||
|
|
||||||
|
Environment:
|
||||||
|
FRACTURED_GIT_REMOTE Git remote (default: origin).
|
||||||
|
FRACTURED_POST_UPDATE_CMD Used with bare --run-after.
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
run() {
|
||||||
|
if [[ "$DRY_RUN" -eq 1 ]]; then
|
||||||
|
printf '[dry-run] '
|
||||||
|
printf '%q ' "$@"
|
||||||
|
printf '\n'
|
||||||
|
else
|
||||||
|
"$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-h | --help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--no-pull)
|
||||||
|
NO_PULL=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--full)
|
||||||
|
FULL_BUILD=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--compile-only)
|
||||||
|
COMPILE_ONLY=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--dry-run)
|
||||||
|
DRY_RUN=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--run-after)
|
||||||
|
DO_RUN_AFTER=1
|
||||||
|
shift
|
||||||
|
if [[ $# -gt 0 && "$1" != -* ]]; then
|
||||||
|
POST_UPDATE_CMD="$1"
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "error: unknown option: $1" >&2
|
||||||
|
echo "Try: bash scripts/vps-update-server.sh --help" >&2
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "$FULL_BUILD" -eq 1 && "$COMPILE_ONLY" -eq 1 ]]; then
|
||||||
|
echo "error: use only one of --full or --compile-only" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "$ROOT/.git" ]]; then
|
||||||
|
echo "error: not a git clone: $ROOT" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$ROOT/acore.sh" ]]; then
|
||||||
|
echo "error: acore.sh not found under $ROOT" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$ROOT/conf/config.sh" ]]; then
|
||||||
|
echo "error: missing $ROOT/conf/config.sh — copy conf/dist/config.sh and edit (see DEPLOY_LINUX_VPS.md)." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$ROOT"
|
||||||
|
|
||||||
|
if [[ "$DO_RUN_AFTER" -eq 1 && -z "${POST_UPDATE_CMD// }" ]]; then
|
||||||
|
echo "error: --run-after needs a command or FRACTURED_POST_UPDATE_CMD set in the environment." >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
current_branch() {
|
||||||
|
git symbolic-ref -q --short HEAD || git rev-parse --short HEAD
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "$NO_PULL" -eq 0 ]]; then
|
||||||
|
ref="$(current_branch)"
|
||||||
|
if [[ "$ref" == "HEAD" ]]; then
|
||||||
|
echo "error: detached HEAD; checkout a branch or use --no-pull." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "==> git pull $GIT_REMOTE $ref"
|
||||||
|
run git pull "$GIT_REMOTE" "$ref"
|
||||||
|
else
|
||||||
|
echo "==> skipping git pull (--no-pull)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> ensuring acore.sh and JSONPath are executable"
|
||||||
|
if [[ "$DRY_RUN" -eq 1 ]]; then
|
||||||
|
run chmod +x acore.sh deps/jsonpath/JSONPath.sh
|
||||||
|
else
|
||||||
|
chmod +x acore.sh deps/jsonpath/JSONPath.sh 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$FULL_BUILD" -eq 1 ]]; then
|
||||||
|
echo "==> ./acore.sh compiler all (clean, configure, compile)"
|
||||||
|
run ./acore.sh compiler all
|
||||||
|
elif [[ "$COMPILE_ONLY" -eq 1 ]]; then
|
||||||
|
echo "==> ./acore.sh compiler compile (incremental; build dir must exist)"
|
||||||
|
run ./acore.sh compiler compile
|
||||||
|
else
|
||||||
|
echo "==> ./acore.sh compiler build (configure + compile)"
|
||||||
|
run ./acore.sh compiler build
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$DO_RUN_AFTER" -eq 1 ]]; then
|
||||||
|
echo "==> post-update: $POST_UPDATE_CMD"
|
||||||
|
if [[ "$DRY_RUN" -eq 1 ]]; then
|
||||||
|
printf '[dry-run] eval %q\n' "$POST_UPDATE_CMD"
|
||||||
|
else
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
eval "$POST_UPDATE_CMD"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Done. Restart authserver/worldserver (or your service manager) when ready so new binaries and SQL updates apply."
|
||||||
Reference in New Issue
Block a user