You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

112 lines
4.2 KiB

[CmdletBinding()]
param(
[int]$WebPort = 8083,
[int]$ApiPort = 8082
)
$ErrorActionPreference = "Stop"
$projectRoot = Split-Path -Parent $PSScriptRoot
$runtimeRoot = Join-Path $projectRoot "runtime"
$backendRuntime = Join-Path $runtimeRoot "backend"
$frontendRuntime = Join-Path $runtimeRoot "frontend"
$binRoot = Join-Path $projectRoot "bin"
New-Item -ItemType Directory -Force -Path $backendRuntime, $frontendRuntime | Out-Null
$bootIDPath = Join-Path $backendRuntime "boot-id.txt"
if (-not (Test-Path -LiteralPath $bootIDPath)) {
[System.IO.File]::WriteAllText($bootIDPath, ([guid]::NewGuid().ToString() + [Environment]::NewLine))
}
$env:TERA_API_LISTEN_ADDR = "127.0.0.1:$ApiPort"
$env:TERA_API_ALLOW_MOCK_ACTORS = "true"
$env:TERA_API_PORT_SERVICES_ENABLED = "false"
$env:TERA_API_DIAGNOSTICS_ENABLED = "false"
$env:TERA_API_LOG_SCHEDULER_ENABLED = "false"
$env:TERA_API_PASSWORD_KDF = "pbkdf2-hmac-sha256"
$env:TERA_API_CONFIG_STORE = Join-Path $backendRuntime "config.json"
$env:TERA_API_OPERATION_STORE = Join-Path $backendRuntime "operations.json"
$env:TERA_API_AUTH_STORE = Join-Path $backendRuntime "auth.json"
$env:TERA_API_SESSION_STORE = Join-Path $backendRuntime "sessions.json"
$env:TERA_API_LOGIN_FAILURE_STORE = Join-Path $backendRuntime "login-failures.json"
$env:TERA_API_SECRET_STORE = Join-Path $backendRuntime "secrets.json"
$env:TERA_API_AUDIT_LOG = Join-Path $backendRuntime "audit.json"
$env:TERA_API_SYSTEM_LOG_STORE = Join-Path $backendRuntime "system-logs.json"
$env:TERA_API_PORT_LOG_STORE = Join-Path $backendRuntime "port-logs.json"
$env:TERA_API_LINK_LOG_STORE = Join-Path $backendRuntime "link-logs.json"
$env:TERA_API_TLS_STORE = Join-Path $backendRuntime "tls\library"
$env:TERA_API_TLS_ACTIVE_CERT = Join-Path $backendRuntime "tls\active.crt"
$env:TERA_API_TLS_ACTIVE_KEY = Join-Path $backendRuntime "tls\active.key"
$env:TERA_API_BOOT_ID_PATH = $bootIDPath
$env:TERA_API_BOOT_MARKER_PATH = Join-Path $backendRuntime "last-boot-id.txt"
$backendExe = Join-Path $binRoot "tera-api.exe"
$frontendExe = Join-Path $binRoot "tera-web.exe"
$goCommand = Get-Command go -ErrorAction SilentlyContinue
if (Test-Path -LiteralPath $backendExe) {
$backendFile = $backendExe
$backendArguments = @()
} elseif ($goCommand) {
$backendFile = $goCommand.Source
$backendArguments = @("run", "-mod=vendor", "-buildvcs=false", "./cmd/tera-api")
} else {
throw "bin\tera-api.exe is missing and Go was not found on PATH."
}
$backendStartOptions = @{
FilePath = $backendFile
WorkingDirectory = Join-Path $projectRoot "backend"
RedirectStandardOutput = Join-Path $backendRuntime "stdout.log"
RedirectStandardError = Join-Path $backendRuntime "stderr.log"
WindowStyle = "Hidden"
PassThru = $true
}
if ($backendArguments.Count -gt 0) {
$backendStartOptions.ArgumentList = $backendArguments
}
$backendProcess = Start-Process @backendStartOptions
try {
$ready = $false
for ($attempt = 0; $attempt -lt 60; $attempt++) {
if ($backendProcess.HasExited) {
throw "The backend exited during startup. Check runtime\backend\stderr.log."
}
try {
Invoke-WebRequest -UseBasicParsing -Uri "http://127.0.0.1:$ApiPort/api/v1/auth/login-policy" -TimeoutSec 1 | Out-Null
$ready = $true
break
} catch {
Start-Sleep -Milliseconds 500
}
}
if (-not $ready) {
throw "Timed out while waiting for the backend."
}
$env:PORT = "$WebPort"
$env:TERACLONE_API_UPSTREAM = "http://127.0.0.1:$ApiPort"
$env:TERACLONE_DB_PATH = Join-Path $frontendRuntime "frontend.db"
Write-Host "TERA Clone Demo: http://127.0.0.1:$WebPort"
Write-Host "Login: admin / mock-admin-secret"
Write-Host "Press Ctrl+C to stop both services."
if (Test-Path -LiteralPath $frontendExe) {
& $frontendExe
} elseif ($goCommand) {
Push-Location (Join-Path $projectRoot "frontend")
try {
& $goCommand.Source run -buildvcs=false ./cmd/server
} finally {
Pop-Location
}
} else {
throw "bin\tera-web.exe is missing and Go was not found on PATH."
}
} finally {
if ($backendProcess -and -not $backendProcess.HasExited) {
Stop-Process -Id $backendProcess.Id -Force
}
}