/ run.sh
run.sh
1 #!/usr/bin/env bash 2 3 run_embark () { 4 local EMBARK_DOCKER_MOUNT_SOURCE="${EMBARK_DOCKER_MOUNT_SOURCE:-$PWD}" 5 local EMBARK_DOCKER_MOUNT_TARGET="${EMBARK_DOCKER_MOUNT_TARGET:-/dapp}" 6 local EMBARK_DOCKER_IMAGE="${EMBARK_DOCKER_IMAGE:-statusim/embark}" 7 local EMBARK_DOCKER_RUN="${EMBARK_DOCKER_RUN}" 8 local EMBARK_DOCKER_RUN_INTERACTIVE=${EMBARK_DOCKER_RUN_INTERACTIVE:-false} 9 local EMBARK_DOCKER_RUN_OPTS_REPLACE=${EMBARK_DOCKER_RUN_OPTS_REPLACE:-false} 10 local EMBARK_DOCKER_RUN_RM=${EMBARK_DOCKER_RUN_RM:-true} 11 local EMBARK_DOCKER_TAG="${EMBARK_DOCKER_TAG:-latest}" 12 13 local -a run_opts=( 14 "-i" 15 "-t" 16 "-p" 17 "5001:5001" 18 "-p" 19 "8000:8000" 20 "-p" 21 "8080:8080" 22 "-p" 23 "8500:8500" 24 "-p" 25 "8545:8545" 26 "-p" 27 "8546:8546" 28 "-p" 29 "8555:8555" 30 "-p" 31 "8556:8556" 32 "-p" 33 "30301:30301/udp" 34 "-p" 35 "30303:30303" 36 "-v" 37 "${EMBARK_DOCKER_MOUNT_SOURCE}:${EMBARK_DOCKER_MOUNT_TARGET}" 38 ) 39 40 local env_var 41 for env_var in LANG \ 42 LANGUAGE \ 43 LC_ALL \ 44 TERM; 45 # do not alter indentation, tabs in lines below 46 do 47 local include_var=$(cat <<- ENV_VAR 48 if [[ -v $env_var ]]; then 49 run_opts=( "\${run_opts[@]}" "-e" "\$env_var" ) 50 fi 51 ENV_VAR 52 ) 53 eval "$include_var" 54 done 55 # do not alter indentation, tabs in lines above 56 57 if [[ $EMBARK_DOCKER_RUN_RM = true ]]; then 58 run_opts=( "${run_opts[@]}" "--rm" ) 59 fi 60 61 local txtbld=$(tput bold) 62 local txtrst=$(tput sgr0) 63 64 local bldcyn=${txtbld}$(tput setaf 6) 65 local bldred=${txtbld}$(tput setaf 1) 66 local bldylw=${txtbld}$(tput setaf 3) 67 68 local ERROR=${bldred}ERROR${txtrst} 69 local INFO=${bldcyn}INFO${txtrst} 70 local WARNING=${bldylw}WARNING${txtrst} 71 72 local oldopts 73 case $- in 74 *e*) oldopts="set -e" ;; 75 *) oldopts="set +e" ;; 76 esac 77 set +e 78 79 cleanup () { 80 local retval=$? 81 unset check_bash_version 82 unset check_docker 83 unset cleanup 84 eval "$oldopts" 85 return $retval 86 } 87 88 check_bash_version () { 89 if [[ $BASH_VERSINFO -lt 4 ]]; then 90 echo "$ERROR: this script requires Bash version >= 4.0" 91 return 1 92 fi 93 } 94 check_bash_version || cleanup || return 95 96 check_docker () { 97 if ! type docker &> /dev/null; then 98 echo "$ERROR: the command \`docker\` must be in a path on \$PATH or aliased" 99 return 127 100 fi 101 } 102 check_docker || cleanup || return 103 104 local had_run_opts=false 105 local -a _run_opts=() 106 local -a _cmd=() 107 local -a cmd 108 109 while [[ ! -z "$1" ]]; do 110 if [[ "$1" = "--" ]]; then 111 had_run_opts=true 112 else 113 if [[ $had_run_opts = true ]]; then 114 _cmd=( "${_cmd[@]}" "$1" ) 115 else 116 _run_opts=( "${_run_opts[@]}" "$1" ) 117 fi 118 fi 119 shift 120 done 121 122 if [[ $had_run_opts = true ]]; then 123 cmd=( "${_cmd[@]}" ) 124 if [[ $EMBARK_DOCKER_RUN_OPTS_REPLACE = true ]]; then 125 run_opts=( "${_run_opts[@]}" ) 126 else 127 run_opts=( "${run_opts[@]}" "${_run_opts[@]}" ) 128 fi 129 else 130 cmd=( "${_run_opts[@]}" ) 131 fi 132 133 if [[ -z "$EMBARK_DOCKER_RUN" ]]; then 134 case "${cmd[0]}" in 135 -V|--version|-h|--help|new|demo|build|run|blockchain|simulator|test|\ 136 reset|graph|upload|version) cmd=( "embark" "${cmd[@]}" ) ;; 137 esac 138 else 139 local i_flag 140 if [[ $EMBARK_DOCKER_RUN_INTERACTIVE = true ]]; then 141 i_flag='i' 142 else 143 i_flag='' 144 fi 145 146 local run_script=$(< "$EMBARK_DOCKER_RUN") 147 # do not alter indentation, tabs in lines below 148 run_script=$(cat <<- RUN_SCRIPT 149 exec bash -${i_flag}s \$(tty) ${cmd[@]} << 'RUN' 150 __tty=\$1 151 shift 152 script=/tmp/run_embark_script 153 cat << 'SCRIPT' > \$script 154 $run_script 155 SCRIPT 156 chmod +x \$script 157 exec \$script \$@ < \$__tty 158 RUN 159 RUN_SCRIPT 160 ) 161 # do not alter indentation, tabs in lines above 162 cmd=( "bash" "-${i_flag}c" "$run_script" ) 163 fi 164 165 docker run \ 166 "${run_opts[@]}" \ 167 "${EMBARK_DOCKER_IMAGE}:${EMBARK_DOCKER_TAG}" \ 168 "${cmd[@]}" \ 169 || cleanup || return 170 171 cleanup 172 } 173 export -f run_embark 174 175 if [[ "$0" = "$BASH_SOURCE" ]]; then 176 run_embark "$@" 177 fi