#!/usr/bin/env bash # Helper script that builds and launches the Docker container. # --------------------------------------------------------------------- function print_help { echo "`basename "$0"` {options}" cat <&2 exit 1 ;; esac done # check if a VASSAL directory has been specified if [ -n "$VASSAL" ]; then if [ ! -d "$VASSAL" ]; then echo "Can't find the VASSAL directory: $VASSAL" exit 1 fi mpoint=/data/vassal/ target=$( readlink -f "$VASSAL" ) VASSAL_VOLUME="--volume $target:$mpoint" VASSAL_ENV="--env VASSAL_DIR=$mpoint --env VASSAL_DIR_TARGET=$target" fi # check if a VASL module file has been specified if [ -n "$VASL_MOD" ]; then if [ ! -f "$VASL_MOD" ]; then echo "Can't find the VASL .vmod file: $VASL_MOD" exit 1 fi mpoint=/data/vasl.vmod target=$( readlink -f "$VASL_MOD" ) VASL_MOD_VOLUME="--volume $target:$mpoint" VASL_MOD_ENV="--env VASL_MOD=$mpoint --env VASL_MOD_TARGET" fi # check if a VASL extensions directory has been specified if [ -n "$VASL_EXTNS" ]; then if [ ! -d "$VASL_EXTNS" ]; then echo "Can't find the VASL extensions directory: $VASL_EXTNS" exit 1 fi mpoint=/data/vasl-extensions/ target=$( readlink -f "$VASL_EXTNS" ) VASL_EXTNS_VOLUME="--volume $target:$mpoint" VASL_EXTNS_ENV="--env VASL_EXTNS_DIR=$mpoint --env VASL_EXTNS_DIR_TARGET=$target" fi # check if a VASL boards directory has been specified if [ -n "$VASL_BOARDS" ]; then if [ ! -d "$VASL_BOARDS" ]; then echo "Can't find the VASL boards directory: $VASL_BOARDS" exit 1 fi mpoint=/data/boards/ target=$( readlink -f "$VASL_BOARDS" ) VASL_BOARDS_VOLUME="--volume $target:$mpoint" VASL_BOARDS_ENV="--env BOARDS_DIR=$mpoint --env BOARDS_DIR_TARGET=$target" fi # check if a Chapter H notes directory has been specified if [ -n "$CHAPTER_H_NOTES" ]; then if [ ! -d "$CHAPTER_H_NOTES" ]; then echo "Can't find the Chapter H notes directory: $CHAPTER_H_NOTES" exit 1 fi mpoint=/data/chapter-h-notes/ target=$( readlink -f "$CHAPTER_H_NOTES" ) CHAPTER_H_NOTES_VOLUME="--volume $target:$mpoint" CHAPTER_H_NOTES_ENV="--env CHAPTER_H_NOTES_DIR=$mpoint --env CHAPTER_H_NOTES_DIR_TARGET=$target" fi # check if a user files directory has been specified if [ -n "$USER_FILES" ]; then if [ ! -d "$USER_FILES" ]; then echo "Can't find the user files directory: $USER_FILES" exit 1 fi mpoint=/data/user-files/ target=$( readlink -f "$USER_FILES" ) USER_FILES_VOLUME="--volume $target:$mpoint" USER_FILES_ENV="--env USER_FILES_DIR=$mpoint --env USER_FILES_DIR_TARGET=$target" fi # check if a template pack has been specified if [ -n "$TEMPLATE_PACK" ]; then # NOTE: The template pack can either be a file (ZIP) or a directory. if ! ls "$TEMPLATE_PACK" >/dev/null 2>&1 ; then echo "Can't find the template pack: $TEMPLATE_PACK" exit 1 fi mpoint=/data/template-pack target=$( readlink -f "$TEMPLATE_PACK" ) TEMPLATE_PACK_VOLUME="--volume $target:$mpoint" TEMPLATE_PACK_ENV="--env DEFAULT_TEMPLATE_PACK=$mpoint --env DEFAULT_TEMPLATE_PACK_TARGET" fi # check if testing has been enabled if [ -n "$CONTROL_TESTS_PORT" ]; then CONTROL_TESTS_PORT_BUILD="--build-arg CONTROL_TESTS_PORT=$CONTROL_TESTS_PORT" CONTROL_TESTS_PORT_RUN="--env CONTROL_TESTS_PORT=$CONTROL_TESTS_PORT --publish $CONTROL_TESTS_PORT:$CONTROL_TESTS_PORT" fi # build the image if [ -z "$NO_BUILD" ]; then echo Building the \"$IMAGE_TAG\" image... docker build \ --tag vasl-templates:$IMAGE_TAG \ $CONTROL_TESTS_PORT_BUILD \ $BUILD_NETWORK \ . 2>&1 \ | sed -e 's/^/ /' if [ ${PIPESTATUS[0]} -ne 0 ]; then exit 10 ; fi echo fi # launch the container echo Launching the \"$IMAGE_TAG\" image as \"$CONTAINER_NAME\"... docker run \ --name $CONTAINER_NAME \ --publish $PORT:5010 \ --env DOCKER_IMAGE_NAME="vasl-templates:$IMAGE_TAG" \ --env DOCKER_IMAGE_TIMESTAMP="$(date --utc +"%Y-%m-%d %H:%M:%S %:z")" \ --env DOCKER_CONTAINER_NAME="$CONTAINER_NAME" \ $CONTROL_TESTS_PORT_RUN \ $VASSAL_VOLUME $VASL_MOD_VOLUME $VASL_EXTNS_VOLUME $VASL_BOARDS_VOLUME $CHAPTER_H_NOTES_VOLUME $TEMPLATE_PACK_VOLUME $USER_FILES_VOLUME \ $VASSAL_ENV $VASL_MOD_ENV $VASL_EXTNS_ENV $VASL_BOARDS_ENV $CHAPTER_H_NOTES_ENV $TEMPLATE_PACK_ENV $USER_FILES_ENV \ $RUN_NETWORK $DETACH \ $TEST_DATA_VASSAL $TEST_DATA_VASL_MODS \ -it --rm \ vasl-templates:$IMAGE_TAG \ 2>&1 \ | sed -e 's/^/ /' exit ${PIPESTATUS[0]}