embark-docker/run.ps1

171 lines
4.0 KiB
PowerShell

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