178 lines
4.4 KiB
Bash
Executable File
178 lines
4.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
run_embark () {
|
|
local EMBARK_DOCKER_MOUNT_SOURCE="${EMBARK_DOCKER_MOUNT_SOURCE:-$PWD}"
|
|
local EMBARK_DOCKER_MOUNT_TARGET="${EMBARK_DOCKER_MOUNT_TARGET:-/dapp}"
|
|
local EMBARK_DOCKER_IMAGE="${EMBARK_DOCKER_IMAGE:-statusim/embark}"
|
|
local EMBARK_DOCKER_RUN="${EMBARK_DOCKER_RUN}"
|
|
local EMBARK_DOCKER_RUN_INTERACTIVE=${EMBARK_DOCKER_RUN_INTERACTIVE:-false}
|
|
local EMBARK_DOCKER_RUN_OPTS_REPLACE=${EMBARK_DOCKER_RUN_OPTS_REPLACE:-false}
|
|
local EMBARK_DOCKER_RUN_RM=${EMBARK_DOCKER_RUN_RM:-true}
|
|
local EMBARK_DOCKER_TAG="${EMBARK_DOCKER_TAG:-latest}"
|
|
|
|
local -a run_opts=(
|
|
"-i"
|
|
"-t"
|
|
"-p"
|
|
"5001:5001"
|
|
"-p"
|
|
"8000:8000"
|
|
"-p"
|
|
"8080:8080"
|
|
"-p"
|
|
"8500:8500"
|
|
"-p"
|
|
"8545:8545"
|
|
"-p"
|
|
"8546:8546"
|
|
"-p"
|
|
"8555:8555"
|
|
"-p"
|
|
"8556:8556"
|
|
"-p"
|
|
"30301:30301/udp"
|
|
"-p"
|
|
"30303:30303"
|
|
"-v"
|
|
"${EMBARK_DOCKER_MOUNT_SOURCE}:${EMBARK_DOCKER_MOUNT_TARGET}"
|
|
)
|
|
|
|
local env_var
|
|
for env_var in LANG \
|
|
LANGUAGE \
|
|
LC_ALL \
|
|
TERM;
|
|
# do not alter indentation, tabs in lines below
|
|
do
|
|
local include_var=$(cat <<- ENV_VAR
|
|
if [[ -n $env_var && -v $env_var ]]; then
|
|
run_opts=( "${run_opts[@]}" "-e" "$env_var" )
|
|
fi
|
|
ENV_VAR
|
|
)
|
|
eval "$include_var"
|
|
done
|
|
# do not alter indentation, tabs in lines above
|
|
|
|
if [[ $EMBARK_DOCKER_RUN_RM = true ]]; then
|
|
run_opts=( "${run_opts[@]}" "--rm" )
|
|
fi
|
|
|
|
local txtbld=$(tput bold)
|
|
local txtrst=$(tput sgr0)
|
|
|
|
local bldcyn=${txtbld}$(tput setaf 6)
|
|
local bldred=${txtbld}$(tput setaf 1)
|
|
local bldylw=${txtbld}$(tput setaf 3)
|
|
|
|
local ERROR=${bldred}ERROR${txtrst}
|
|
local INFO=${bldcyn}INFO${txtrst}
|
|
local WARNING=${bldylw}WARNING${txtrst}
|
|
|
|
local oldopts
|
|
case $- in
|
|
*e*) oldopts="set -e" ;;
|
|
*) oldopts="set +e" ;;
|
|
esac
|
|
set +e
|
|
|
|
cleanup () {
|
|
local retval=$?
|
|
unset check_bash_version
|
|
unset check_docker
|
|
unset cleanup
|
|
eval "$oldopts"
|
|
return $retval
|
|
}
|
|
|
|
check_bash_version () {
|
|
if [[ $BASH_VERSINFO -lt 4 ]]; then
|
|
echo "$ERROR: this script requires Bash version >= 4.0"
|
|
return 1
|
|
fi
|
|
}
|
|
check_bash_version || cleanup || return
|
|
|
|
check_docker () {
|
|
if ! type docker &> /dev/null; then
|
|
echo "$ERROR: the command \`docker\` must be in a path on \$PATH or aliased"
|
|
return 127
|
|
fi
|
|
}
|
|
check_docker || cleanup || return
|
|
|
|
local had_run_opts=false
|
|
local -a _run_opts=()
|
|
local -a _cmd=()
|
|
local -a cmd
|
|
|
|
while [[ ! -z "$1" ]]; do
|
|
if [[ "$1" = "--" ]]; then
|
|
had_run_opts=true
|
|
else
|
|
if [[ $had_run_opts = true ]]; then
|
|
_cmd=( "${_cmd[@]}" "$1" )
|
|
else
|
|
_run_opts=( "${_run_opts[@]}" "$1" )
|
|
fi
|
|
fi
|
|
shift
|
|
done
|
|
|
|
if [[ $had_run_opts = true ]]; then
|
|
cmd=( "${_cmd[@]}" )
|
|
if [[ $EMBARK_DOCKER_RUN_OPTS_REPLACE = true ]]; then
|
|
run_opts=( "${_run_opts[@]}" )
|
|
else
|
|
run_opts=( "${run_opts[@]}" "${_run_opts[@]}" )
|
|
fi
|
|
else
|
|
cmd=( "${_run_opts[@]}" )
|
|
fi
|
|
|
|
if [[ -z "$EMBARK_DOCKER_RUN" ]]; then
|
|
case "${cmd[0]}" in
|
|
-V|--version|-h|--help|new|demo|build|run|blockchain|simulator|test|\
|
|
reset|graph|upload|version) cmd=( "embark" "${cmd[@]}" ) ;;
|
|
esac
|
|
else
|
|
local i_flag
|
|
if [[ $EMBARK_DOCKER_RUN_INTERACTIVE = true ]]; then
|
|
i_flag='i'
|
|
else
|
|
i_flag=''
|
|
fi
|
|
|
|
local run_script=$(< "$EMBARK_DOCKER_RUN")
|
|
# do not alter indentation, tabs in lines below
|
|
run_script=$(cat <<- RUN_SCRIPT
|
|
exec bash -${i_flag}s \$(tty) ${cmd[@]} << 'RUN'
|
|
__tty=\$1
|
|
shift
|
|
script=/tmp/run_embark_script
|
|
cat << 'SCRIPT' > \$script
|
|
$run_script
|
|
SCRIPT
|
|
chmod +x \$script
|
|
exec \$script \$@ < \$__tty
|
|
RUN
|
|
RUN_SCRIPT
|
|
)
|
|
# do not alter indentation, tabs in lines above
|
|
cmd=( "bash" "-${i_flag}c" "$run_script" )
|
|
fi
|
|
|
|
docker run \
|
|
"${run_opts[@]}" \
|
|
"${EMBARK_DOCKER_IMAGE}:${EMBARK_DOCKER_TAG}" \
|
|
"${cmd[@]}" \
|
|
|| cleanup || return
|
|
|
|
cleanup
|
|
}
|
|
export -f run_embark
|
|
|
|
if [[ "$0" = "$BASH_SOURCE" ]]; then
|
|
run_embark "$@"
|
|
fi
|