From 177560aefcdcafe4d5dfeddfc73d4f9b101770f3 Mon Sep 17 00:00:00 2001 From: vddcore <573729-vddcore@users.noreply.gitlab.com> Date: Wed, 8 Jun 2022 14:47:17 +0000 Subject: [PATCH] Rewritten and much improved bash build script Rewritten and much improved bash run script Rewritten .gitignore --- .gitignore | 52 ++++---------- build | 140 ++++++++++++++++++++++++++++++++++++ build-ms-jar.sh | 5 -- build-server-jar.sh | 5 -- run | 171 ++++++++++++++++++++++++++++++++++++++++++++ run-ms.sh | 5 -- run-server-tests.sh | 3 - run-server.sh | 10 --- 8 files changed, 326 insertions(+), 65 deletions(-) create mode 100755 build delete mode 100755 build-ms-jar.sh delete mode 100755 build-server-jar.sh create mode 100755 run delete mode 100755 run-ms.sh delete mode 100755 run-server-tests.sh delete mode 100755 run-server.sh diff --git a/.gitignore b/.gitignore index b90b2bf37..f99bd4ca5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,49 +1,27 @@ -/Management-Server/build/ -/Management-Server/build/classes/ -/Management-Server/build/tmp/ -/Management-Server/build/kotlin/ -/Management-Server/build/generated/ -/Client/build/ -/Client/build/classes/ -/Client/build/tmp/ -/Client/build/kotlin/ -/Client/build/generated/ -/Server/build/ -/Server/build/classes/ -/Server/build/tmp/ -/Server/build/kotlin/ -/Server/build/generated/ -/Server/data/eco/bot_offers.json -/File-Server/build/ -/File-Server/build/classes/ -/File-Server/build/tmp/ -/File-Server/build/kotlin/ -/File-Server/build/generated/ -**/.idea/workspace.xml -**/.idea/tasks.xml -Server/**/*.class -CompiledServer/* -CompiledServer/ -Server/gradle/ -Server/build/ -Server/.gradle/ -Client/gradle/ -Client/build/ -Client/.gradle/ +builddir +logs +Management-Server/target/* Management-Server/.gradle Management-Server/build/ Management-Server/org/ +Server/target/* +Server/data/eco/bot_offers.json +Server/gradle/ +Server/**/*.class +Server/build/ +Server/.gradle/ Server/data/eco/grand_exchange_db.emp -Single-Player/* -Single-Player/ +Server/ge_test.db +Management-Server/managementprops/ +Server/worldprops/ + +**/.idea/workspace.xml +**/.idea/tasks.xml docker .gradle gradle .idea .idea/ -Server/worldprops/ -Management-Server/managementprops/ -/Development-Client/ **/*.swp **/*.swo build/kotlin/sessions/ diff --git a/build b/build new file mode 100755 index 000000000..04c64e2e3 --- /dev/null +++ b/build @@ -0,0 +1,140 @@ +#!/bin/bash + +SCRIPT_DIR=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P) + +BUILD_MS=0 +BUILD_GS=0 +CLEAN_MS=0 +CLEAN_GS=0 +SKIPTEST="" + +GS_SRC=$SCRIPT_DIR/Server +MS_SRC=$SCRIPT_DIR/Management-Server + +CLEANOPT="" +_JAR_DIR="$SCRIPT_DIR/builddir" + +help() +{ + echo "Usage: $0 [-h] <-m | -g> [-c ] [-o ]"; + echo " -h: Display this message."; + echo " -m: Build the management server."; + echo " -g: Build the game server."; + echo " -c: Clean: m: management, g: gameserver. " + echo " Can specify both. Need at least one if present."; + echo " -o: Specify jar-file directory." + echo " -q: Quick build - will skip tests."; +} + +error() +{ + echo $1; + exit -1; +} + +clean_ms() +{ + cd $MS_SRC + + if [[ "$CLEANOPT" == *"m"* ]]; then + echo "Cleaning the management server." + sh mvnw clean || error "Failed to clean the MS." + fi +} + +clean_gs() +{ + cd $GS_SRC; + if [[ "$CLEANOPT" == *"g"* ]]; then + echo "Cleaning the game server." + sh mvnw clean || error "Failed to clean the game server. Giving up." + fi +} + +build_ms() +{ + cd $MS_SRC + + sh mvnw package $SKIPTEST || \ + error "Failed to build the management server. Giving up"; +} + +build_gs() +{ + cd $GS_SRC; + + sh mvnw package $SKIPTEST || \ + error "Failed to build the game server. Giving up." +} + +while getopts "hqmgc:o:d" arg; do + case $arg in + h) + help + exit 0 + ;; + m) + BUILD_MS=1 + ;; + g) + BUILD_GS=1 + ;; + c) + CLEANOPT=${OPTARG} + ;; + o) + _JAR_DIR=${OPTARG} + ;; + d) + echo "BUILD_MS=$BUILD_MS" + echo "BUILD_GS=$BUILD_GS" + echo "CLEANOPT=$CLEANOPT" + echo "_JAR_DIR=$_JAR_DIR" + ;; + q) + SKIPTEST="-DskipTests" + ;; + esac +done + +if [[ $CLEANOPT != "m" ]] \ + && [[ $CLEANOPT != "g" ]] \ + && [[ $CLEANOPT != "mg" ]] \ + && [[ $CLEANOPT != "" ]]; +then + error "Invalid cleaning option '$CLEANOPT'. Valid options are 'm', 'g', 'mg' or none." +fi + +if [ $BUILD_MS -eq 0 ] && [ $BUILD_GS -eq 0 ] && [[ $CLEANOPT == "" ]]; then + error "Need to build or clean at least one of the modules. See -h for details." +fi + +# Conditionals inside the functions. +clean_gs +clean_ms +# ----------- + +if [ -d $_JAR_DIR ]; then + rm -r $_JAR_DIR +fi + +if [ $BUILD_MS -ne 1 ] && [ $BUILD_GS -ne 1 ]; then + echo "No build options specified. Stop." + exit 0 +fi + +mkdir -p $_JAR_DIR || error "Failed to create build directory."; + +if [ $BUILD_MS -eq 1 ]; then + build_ms + + # Will never execute if build_ms fails because it quits upon failure. + mv -v $MS_SRC/target/*-with-dependencies.jar $_JAR_DIR/ms.jar +fi + +if [ $BUILD_GS -eq 1 ]; then + build_gs + + # Will never execute if build_gs fails because it quits upon failure. + mv -v $GS_SRC/target/*-with-dependencies.jar $_JAR_DIR/server.jar +fi diff --git a/build-ms-jar.sh b/build-ms-jar.sh deleted file mode 100755 index 0d5533470..000000000 --- a/build-ms-jar.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -cd Management-Server -sh mvnw package -mv target/*with-dependencies.jar ms.jar -echo "Jar built and moved to Management-Server/ms.jar" diff --git a/build-server-jar.sh b/build-server-jar.sh deleted file mode 100755 index b08ba1f06..000000000 --- a/build-server-jar.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -cd Server -sh mvnw package -mv target/*with-dependencies.jar server.jar -echo "Jar built and moved to Server/server.jar" diff --git a/run b/run new file mode 100755 index 000000000..40d5cb259 --- /dev/null +++ b/run @@ -0,0 +1,171 @@ +#!/bin/bash +SCRIPT_DIR=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P) +LOG_DIR=$SCRIPT_DIR/logs +BUILD_DIR=$SCRIPT_DIR/builddir +GS_SRC=$SCRIPT_DIR/Server +MS_SRC=$SCRIPT_DIR/Management-Server + +FORCE_REBUILD=0 +REFRESH_BUILD=1 + +GAMESERVER_ONLY=1 + +GS_EXEC="cd $GS_SRC && java -Dnashorn.args=--no-deprecation-warning -jar $BUILD_DIR/server.jar" +MS_EXEC="cd $MS_SRC && java -Dnashorn.args=--no-deprecation-warning -jar $BUILD_DIR/ms.jar" + +# 0: parallel +# 1: fancy tmux +# 2: tests only +RUN_MODE=0 + +help() +{ + echo "Usage: $0 [-h] [-q] [-r] [-t] [-x] [-g] [-e ] [-o ]" + echo " -h: Display this message." + echo " -q: Don't perform the incremental build." + echo " -r: Force clean rebuild." + echo " -t: Only run tests, not the JARs." + echo " -x: Run in a fancy tmux session." + echo " -g: Build + run only the game server (no management server)." + echo " -e: Write STDERR to 'logs/filename' as well as the terminal."; + echo " -o: Write STDOUT to 'logs/filename' as well as the terminal." +} + +error() +{ + echo "$1"; + exit 1; +} + +rebuild_project() +{ + if [ $GAMESERVER_ONLY ]; then + $SCRIPT_DIR/build -qgcg + else + $SCRIPT_DIR/build -qmgcmg + fi +} + +refresh_project() +{ + if [ $GAMESERVER_ONLY ]; then + $SCRIPT_DIR/build -qg + else + $SCRIPT_DIR/build -qmg + fi +} + +verify_binaries_exist() +{ + if ! [ $GAMESERVER_ONLY ]; then + if [ ! -f $SCRIPT_DIR/builddir/ms.jar ]; then + error "Management server binary does not exist."; + fi + fi + + if [ ! -f $SCRIPT_DIR/build/server.jar ]; then + error "Game server binary does not exist."; + fi +} + +run_server_parallel() +{ + if ! [ -x "$(command -v java)" ]; then + error "Java is not installed." + fi + + echo "Running in parallel. All logs redirected to proper files." + + if [ $GAMESERVER_ONLY ]; then + sh -c "$GS_EXEC" & wait + else + sh -c "$MS_EXEC > $LOG_DIR/ms_stdout.log 2> $LOG_DIR/ms_stderr.log & $GS_EXEC" & wait + fi +} + +run_server_tmux() +{ + if ! [ -x "$(command -v tmux)" ]; then + error "tmux is not installed. Install tmux or don't use this option." + fi + + if [ $GAMESERVER_ONLY ]; then + tmux new-session "$GS_EXEC" + else + tmux new-session "$MS_EXEC" \; \ + split-window -h "$GS_EXEC" + fi +} + +run_server_tests() +{ + cd "$GS_SRC" || error "Could not change to GameServer source directory." + sh mvnw test +} + +while getopts ":ghqrtxe:o:" arg; do + case $arg in + h) + help + exit 0 + ;; + q) + REFRESH_BUILD=0 + ;; + r) + FORCE_REBUILD=1 + ;; + t) + RUN_MODE=2 + ;; + o) + GS_EXEC="$GS_EXEC > >(tee $LOG_DIR/${OPTARG})" + ;; + e) + GS_EXEC="$GS_EXEC 2> >(tee $LOG_DIR/${OPTARG})" + ;; + x) + RUN_MODE=1 + ;; + g) + GAMESERVER_ONLY=0 + ;; + *) + error "Argument -$arg is not a known or valid argument." + ;; + esac +done + +if [ ! -d $LOG_DIR ]; then + mkdir -p $LOG_DIR +fi + +if [ ! -d $GS_SRC/target ]; then + rebuild_project || error "Failed to perform a clean build." +else + if [ $FORCE_REBUILD -eq 1 ]; then + rebuild_project || error "Failed to perform a clean build." + else + if [ $REFRESH_BUILD -eq 1 ]; then + refresh_project || error "Failed to perform an incremental build." + fi + fi +fi; + +cd "$SCRIPT_DIR/builddir" || error "Failed to navigate to the build directory." + +case $RUN_MODE in + 0) + # The trap will allow the script to kill the background + # Java instances upon exiting. + trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT + + run_server_parallel + ;; + 1) + run_server_tmux + ;; + 2) + run_server_tests + ;; +esac diff --git a/run-ms.sh b/run-ms.sh deleted file mode 100755 index 6ab208531..000000000 --- a/run-ms.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -cd Management-Server -sh mvnw package -mv target/*with-dependencies.jar /tmp/ms.jar -java -jar /tmp/ms.jar diff --git a/run-server-tests.sh b/run-server-tests.sh deleted file mode 100755 index 51d891af8..000000000 --- a/run-server-tests.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -cd Server -sh mvnw test diff --git a/run-server.sh b/run-server.sh deleted file mode 100755 index 1b365a791..000000000 --- a/run-server.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -cd Server -if [ ! -f hasRun.txt ]; then - sh mvnw clean - touch hasRun.txt -fi -sh mvnw package -DskipTests -mv target/*with-dependencies.jar /tmp/server.jar -java -jar /tmp/server.jar