175 lines
4.6 KiB
PowerShell
175 lines
4.6 KiB
PowerShell
#requires -version 3.0
|
|
|
|
function Start-Embark {
|
|
|
|
function Set-Value( [parameter( Mandatory = $false )] [string] $Var, $Default) {
|
|
begin{
|
|
if(-not ($Var)) {
|
|
$Var = $Default
|
|
}
|
|
}
|
|
process{
|
|
return $Var
|
|
}
|
|
end{}
|
|
}
|
|
|
|
$EMBARK_DOCKER_MOUNT_SOURCE = Set-Value $Env:EMBARK_DOCKER_MOUNT_SOURCE $pwd
|
|
$EMBARK_DOCKER_MOUNT_TARGET = Set-Value $Env:EMBARK_DOCKER_MOUNT_TARGET "/dapp"
|
|
$EMBARK_DOCKER_RUN = $Env:EMBARK_DOCKER_RUN
|
|
$EMBARK_DOCKER_IMAGE = Set-Value $Env:EMBARK_DOCKER_IMAGE "statusim/embark"
|
|
$EMBARK_DOCKER_RUN_INTERACTIVE = Set-Value $Env:EMBARK_DOCKER_RUN_INTERACTIVE $false
|
|
$EMBARK_DOCKER_RUN_OPTS_REPLACE = Set-Value $Env:EMBARK_DOCKER_RUN_OPTS_REPLACE $false
|
|
$EMBARK_DOCKER_RUN_RM = Set-Value $Env:EMBARK_DOCKER_RUN_RM $true
|
|
$EMBARK_DOCKER_TAG = Set-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")
|
|
}
|
|
|
|
$OldErrorActionPreference = $ErrorActionPreference
|
|
|
|
# 'Continue' - Preference for printing errors and continuing the execution in case of non-terminating errors.
|
|
$ErrorActionPreference = 'Continue'
|
|
|
|
function Cleanup ( [parameter( Mandatory = $false )] [int] $RetVal) {
|
|
Remove-Item -Path Function:\Set-Value
|
|
Remove-Item -Path Function:\Confirm-Docker
|
|
Remove-Item -Path Function:\Cleanup
|
|
$ErrorActionPreference = $OldErrorActionPreference
|
|
$Global:LASTEXITCODE = $RetVal
|
|
return
|
|
}
|
|
|
|
function Confirm-Docker () {
|
|
if (-not (Get-Command docker -errorAction SilentlyContinue)) {
|
|
Write-Host "Error: " -ForegroundColor Red -NoNewline
|
|
Write-Host "the command ``docker`` must be in a path on `$PATH or aliased"
|
|
return 127
|
|
}
|
|
return 0
|
|
}
|
|
|
|
$docker_return_code = Confirm-Docker
|
|
|
|
if ($docker_return_code) {
|
|
return Cleanup -RetVal $docker_return_code
|
|
}
|
|
|
|
$had_run_opts = $false
|
|
$_run_opts = @()
|
|
$_cmd = @()
|
|
$cmd = @()
|
|
|
|
$i = 0
|
|
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)) {
|
|
if ($cmd[0] -cin @("-V", "--version", "-h", "--help", "new", "demo", "build", "run", "blockchain",
|
|
"simulator", "test", "reset", "graph", "upload", "version")) {
|
|
$cmd = @("embark") + $cmd
|
|
}
|
|
}
|
|
else {
|
|
$i_flag = ""
|
|
if ($EMBARK_DOCKER_RUN_INTERACTIVE -eq $true) {
|
|
$i_flag = "i"
|
|
}
|
|
|
|
$run_script = Get-Content $EMBARK_DOCKER_RUN
|
|
|
|
# " doesn't get passed to the container so has to be replaced by \"
|
|
$run_script = $run_script -join "`n" -replace '"', '\"'
|
|
|
|
# do not alter indentation, tabs in lines below
|
|
$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"
|
|
# do not alter indentation, tabs in lines above
|
|
|
|
$cmd = ("bash", "-${i_flag}c", "$run_script")
|
|
}
|
|
|
|
$opts = $run_opts + "${EMBARK_DOCKER_IMAGE}:${EMBARK_DOCKER_TAG}" + $cmd
|
|
|
|
docker run $opts
|
|
|
|
if (-not $?) {
|
|
return Cleanup -RetVal 1
|
|
}
|
|
|
|
return Cleanup
|
|
}
|
|
|
|
|
|
# Invokes Start-Embark only if the source is this script.
|
|
if ($MyInvocation.InvocationName.EndsWith($MyInvocation.MyCommand.Name)) {
|
|
Start-Embark @args
|
|
}
|