Rewritten and much improved bash build script

Rewritten and much improved bash run script
Rewritten .gitignore
This commit is contained in:
vddcore 2022-06-08 14:47:17 +00:00 committed by Ryan
parent 28d9a58a6e
commit 177560aefc
8 changed files with 326 additions and 65 deletions

52
.gitignore vendored
View file

@ -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/

140
build Executable file
View file

@ -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 <m|g>] [-o <path>]";
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

View file

@ -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"

View file

@ -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"

171
run Executable file
View file

@ -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 <filename>] [-o <filename>]"
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

View file

@ -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

View file

@ -1,3 +0,0 @@
#!/bin/bash
cd Server
sh mvnw test

View file

@ -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