diff --git a/run.ps1 b/run.ps1 new file mode 100644 index 0000000..6bbb899 --- /dev/null +++ b/run.ps1 @@ -0,0 +1,170 @@ +function Run-Embark { + + function Assign-Value( [parameter( Mandatory = $false )] [string] $Var, $Default) { + begin{ + if(-not ($Var)) { + $Var = $Default + } + } + process{ + return $Var + } + end{} + } + + $EMBARK_DOCKER_MOUNT_SOURCE = Assign-Value $Env:EMBARK_DOCKER_MOUNT_SOURCE $pwd + $EMBARK_DOCKER_MOUNT_TARGET = Assign-Value $Env:EMBARK_DOCKER_MOUNT_TARGET "/dapp" + $EMBARK_DOCKER_RUN = $Env:EMBARK_DOCKER_RUN + $EMBARK_DOCKER_IMAGE = Assign-Value $Env:EMBARK_DOCKER_IMAGE "statusim/embark" + $EMBARK_DOCKER_RUN_INTERACTIVE = Assign-Value $Env:EMBARK_DOCKER_RUN_INTERACTIVE $false + $EMBARK_DOCKER_RUN_OPTS_REPLACE = Assign-Value $Env:EMBARK_DOCKER_RUN_OPTS_REPLACE $false + $EMBARK_DOCKER_RUN_RM = Assign-Value $Env:EMBARK_DOCKER_RUN_RM $true + $EMBARK_DOCKER_TAG = Assign-Value $Env:EMBARK_DOCKER_TAG "latest" + + $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}" + ) + + foreach ($env_var in "LANG", "LANGUAGE", "LC_ALL", "TERM") { + if (Test-Path "Env:$env_var") { + $run_opts = $run_opts + "-e" + "$env_var" + } + } + + if ($EMBARK_DOCKER_RUN_RM -eq $true) { + $run_opts = $run_opts + "--rm" + } + + function Cleanup { + $retval = $lastexitcode + Remove-Item -Path Function:\Check-Docker + Remove-Item -Path Function:\Cleanup + return $retval + } + + function Check-Docker () { + if (-not (Get-Command docker -errorAction SilentlyContinue)) { + "Error: the command \`docker\` must be in a path on \$PATH or aliased" + return 127 + } + } + + Check-Docker + + $had_run_opts = $false + $_run_opts = @() + $_cmd = @() + $cmd = @() + + $i = 1 + while ($args[$i]) { + if ($args[$i] -eq "--") { + $had_run_opts = $true + } + else { + if ($had_run_opts -eq $true) { + $_cmd = $_cmd + $args[$i] + } + else { + $_run_opts = $_run_opts + $args[$i] + } + } + $i++ + } + + if ($had_run_opts -eq $true) { + $cmd = $_cmd + if ($EMBARK_DOCKER_RUN_OPTS_REPLACE -eq $true) { + $run_opts = $_run_opts + } + else { + $run_opts = $run_opts + $_run_opts + } + } + else { + $cmd = $_run_opts + } + + if (-not ($EMBARK_DOCKER_RUN)) { + switch ($cmd[0]) { + "-V" {} + "--version" {} + "-h" {} + "--help" {} + "new" {} + "demo" {} + "build" {} + "run" {} + "blockchain" {} + "simulator" {} + "test" {} + "reset" {} + "graph" {} + "upload" {} + "version" { + $cmd = "embark" + $cmd + break + } + } + } + else { + $i_flag = "" + if ($EMBARK_DOCKER_RUN_INTERACTIVE = $true) { + $i_flag = "i" + } + + $run_script = Get-Content $EMBARK_DOCKER_RUN + "${cmd}" + $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 + " + $cmd = ("bash", "-${i_flag}c", "$run_script") + } + + $opts = @() + + if ($cmd) { + $opts = $run_opts + "${EMBARK_DOCKER_IMAGE}:${EMBARK_DOCKER_TAG}" + $cmd + } + else { + $opts = $run_opts + "${EMBARK_DOCKER_IMAGE}:${EMBARK_DOCKER_TAG}" + } + + docker run $opts + + Cleanup +} + +Run-Embark