#!/bin/bash set -e SCRIPT_PATH=$(readlink -f "${BASH_SOURCE:-$0}") SCRIPT_DIR=$(dirname "$SCRIPT_PATH") SERVER_MODS=${STK_SERVER_MODULES:=""} exec_spacetime() { # args: target, environment, build root, modules echo "[*] Running configure command: 'python3 $SCRIPT_DIR/spacetime_py/spacetime.py $1 $2 $SCRIPT_DIR $SPACETIME_VERBOSE'" python3 "$SCRIPT_DIR/spacetime_py/spacetime.py" "$1" "$2" "$SCRIPT_DIR" "$SPACETIME_VERBOSE" "$4" } exec_ninja() { # args: target echo "[*] Running build command: 'ninja -C $SCRIPT_DIR $1'" ninja -C "$SCRIPT_DIR" "$1" } sub_help() { echo "Spacetime - StarKingdoms build utility" echo "Spacetime is a small utility program to generate Ninja build manifests for compiling StarKingdoms." echo "Available targets:" echo " help - Show this help screen" # done echo " run_http - Compile the client and run a development http server for testing it" # done echo " run_server (default) - Compile and run the game server" # done echo " build_server - Compile the game server" # done echo " run_server_prod - Compile and run the game server with optimizations enabled" # done echo " build_server_prod - Compile the game server with optimizations enabled" # done echo " run_api - Compile and run the API server" # done echo " build_api - Compile the API server" # done echo " run_api_prod - Compile and run the API server with optimizations enabled" # done echo " build_api_prod - Compile the API server with optimizations enabled" # done echo " install_tooling - Install the compilation utilities required for compiling StarKingdoms" # done echo " build_assets - Compile spritesheets in all three texture sizes for textures-fast" # done echo " build_assets_full - Compile spritesheets in full size for textures-fast" # done echo " build_assets_375 - Commpile 37.5% spritesheets for textures-fast" # done echo " build_assets_125 - Compile 12.5% spritesheets for textures-fast" # done echo " clean - Remove all generated files" # done echo " build_docker_api - Build the API dockerfile" # done echo " build_docker_server - Build the server dockerfile" # done } check_install_cargo() { echo "[*] Checking for $1" if ! command -v "$1" &> /dev/null then echo "[+] $1 was not found, installing via Cargo..." cargo install "$2" $3 fi } check() { echo "[*] Checking for $1" if ! command -v "$1" &> /dev/null then echo "[x] $1 was not found but is required for the build process to continue. Install it with your system package manager, or, if supported, 'st install_tooling'" exit 1 fi } check_all() { check inkscape check protoc check atlasify } sub_build_docker_api() { cargo build --release --bin starkingdoms-api docker buildx build -f api.Dockerfile -t registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:api-$(git rev-parse --short HEAD) . docker buildx build -f api.Dockerfile -t registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:api-bleeding . docker push registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:api-$(git rev-parse --short HEAD) docker push registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:api-bleeding } sub_build_docker_server() { cargo build --release --bin starkingdoms-server docker buildx build -f api.Dockerfile -t registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:server-$(git rev-parse --short HEAD) . docker buildx build -f api.Dockerfile -t registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:server-bleeding . docker push registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:server-$(git rev-parse --short HEAD) docker push registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:server-bleeding } sub_clean() { rm -rf web/dist rm -rf assets/dist rm -rf assets/final rm -rf target rm -rf client/pkg } sub_install_tooling() { check inkscape check protoc check atlasify echo "[*] All required tools are installed" } sub_run_http() { check_all exec_spacetime client prod "$SCRIPT_DIR" "$CLIENT_MODS" exec_ninja asset cd client && yarn && yarn run dev } sub_build_server() { check_all exec_spacetime server dev "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja server } sub_run_server() { check_all exec_spacetime server dev "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja server exec "$SCRIPT_DIR/target/debug/starkingdoms-server" } sub_build_server_prod() { check_all exec_spacetime server prod "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja server } sub_run_server_prod() { check_all exec_spacetime server prod "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja server exec "$SCRIPT_DIR/target/release/starkingdoms-server" } sub_build_api() { check_all exec_spacetime api dev "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja api } sub_run_api() { check_all exec_spacetime api dev "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja api cd api && exec "$SCRIPT_DIR/target/debug/starkingdoms-api" } sub_build_api_prod() { check_all exec_spacetime api prod "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja api } sub_run_api_prod() { check_all exec_spacetime api prod "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja api cd api && exec "$SCRIPT_DIR/target/release/starkingdoms-api" } sub_build_assets() { check_all exec_spacetime asset dev "$SCRIPT_DIR" exec_ninja asset } sub_build_assets_full() { check_all exec_spacetime asset dev "$SCRIPT_DIR" exec_ninja asset-full } sub_build_assets_375() { check_all exec_spacetime asset dev "$SCRIPT_DIR" exec_ninja asset-375 } sub_build_assets_125() { check_all exec_spacetime asset dev "$SCRIPT_DIR" exec_ninja asset-125 } subcommand=$1 case $subcommand in "" | "-h" | "--help" | "help") sub_help ;; *) echo "[*] Running build command $subcommand" shift sub_${subcommand} $@ if [ $? = 127 ]; then echo "Error: '$subcommand' is not a known subcommand." >&2 echo " Run 'st --help' for a list of known subcommands." >&2 exit 1 fi ;; esac