#!/bin/bash SERVER_DIR="$(cd "${0%/*}" && echo $PWD)" LEADERBOARD_ADDRESS_AND_PORT="127.0.0.1:8080" # Usage: # # [DEBUGGER= [DOCKER=0] [REL=1] ./run # # Set DEBUGGER to cgdb or gdb to debug # Set DOCKER=0 to run without docker (runs with docker by default) # Set REL=1 to run release (runs debug by default) prepare_content() { # Attempt putting test data in place if [ -f "${SERVER_DIR}/docker/wicontent/wi/index" ]; then return fi # Expand test data if it exists if [ -f "${SERVER_DIR}/testdata.tar.gz" ]; then echo Untaring testdata.tar.gz... tar -xf "${SERVER_DIR}/testdata.tar.gz" -C "${SERVER_DIR}/docker/wicontent" mv "${SERVER_DIR}/docker/wicontent/testdata" "${SERVER_DIR}/docker/wicontent/wi" else # Test data doesn't exist. Attempt download WICONTENT_URL="$(${SERVER_DIR}/docker/config WICONTENT_URL)" if [ ! -z "${WICONTENT_URL}" ]; then echo Attempting download of wicontent.tar.gz... local ETAG=$(curl -s -D - "${WICONTENT_URL}" -o "${SERVER_DIR}/docker/wicontent/wicontent.tar.gz" | grep ETag | cut -d: -f2 | cut -d\" -f2) if [ ! -z "${ETAG}" ]; then echo -n "${ETAG}" > "${SERVER_DIR}/docker/wicontent/wicontent.tar.gz-etag" tar -xf "${SERVER_DIR}/docker/wicontent/wicontent.tar.gz" -C "${SERVER_DIR}/docker/wicontent" fi fi fi if [ ! -f "${SERVER_DIR}/docker/wicontent/wi/index" ]; then echo "Mission pack info missing ${SERVER_DIR}/docker/wicontent" exit 1 fi } run_with_docker() { # Ensure control-c goes to docker, not this script set -m # Use wi_build because it has debuggers in it. wi_build contains app data and images # because the entire wi tree gets mapped in. TAG_VERSION="$(${SERVER_DIR}/docker/image_version wi_build)" IMAGE="$(${SERVER_DIR}/docker/config REGISTRY_PREFIX)/wi_build" AUTH_PREFIX="$(${SERVER_DIR}/docker/config AUTH_PREFIX)" # Debugger if [ ! -z "$DEBUGGER" ]; then DEBUGGER="--debugger ${DEBUGGER}" fi # Run echo Build: ${BUILD_TYPE}, image: ${IMAGE}:${TAG_VERSION} ${AUTH_PREFIX} docker -- run -it --rm -p 22221:22221 -v "${SERVER_DIR}/docker/entrypoint":/entrypoint -v "$(dirname "${SERVER_DIR}")":/wi ${IMAGE}:${TAG_VERSION} /entrypoint runwis ${DEBUGGER} --build_type ${BUILD_TYPE} --public_ip 127.0.0.1 --public_listen_port 22221 --instance_name "My Instance Name" --image_tag "My Image Tag" --wicontent_url "${WICONTENT_URL}" --args --server_id 50 --server_name "My Server" --server_location "My Office" --server_type "production" --listen_address 0.0.0.0 --listen_port 22221 --stats_address "${LEADERBOARD_ADDRESS_AND_PORT}" --checksync } run_without_docker() { # Debugger if [ ! -z "$DEBUGGER" ]; then DEBUGGER="${DEBUGGER} --args" fi ${DEBUGGER} ${BUILD_TYPE}/wis --listen_address 127.0.0.1:22221 --server_id 0 --missionpack_dir docker/wicontent/wi --htdata ../game/htdata832.pdb --stats_address "${LEADERBOARD_ADDRESS_AND_PORT}" --stats_path /api/addgamestats --server_info_path /api/serverinfo --server_name Icarus --server_location "Seattle WA" --server_type beta --server_info_extra "{\"foo\":\"bar\"}" --server_info_expires 60 --checksync --max_players 2000 } if [ "${REL}" == "1" ]; then BUILD_TYPE=release else BUILD_TYPE=debug fi prepare_content if [ "${DOCKER}" == "0" ]; then run_without_docker else run_with_docker fi