79 lines
3.1 KiB
PowerShell
79 lines
3.1 KiB
PowerShell
param(
|
|
[string]$EnvName = "sensor-bench-build-py310"
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot "..")
|
|
$DistDir = Join-Path $RepoRoot "dist"
|
|
$WorkDir = Join-Path $RepoRoot "build\pyinstaller_work_operator"
|
|
$SpecPath = Join-Path $PSScriptRoot "sensor_bench_operator.spec"
|
|
$RepoConfig = Join-Path $RepoRoot "config"
|
|
$InternalRoot = Join-Path $RepoRoot "internal"
|
|
$DistApp = Join-Path $DistDir "SensorBenchOperator"
|
|
|
|
if (-not (Get-Command conda -ErrorAction SilentlyContinue)) {
|
|
throw "conda was not found on PATH. Open an Anaconda Prompt or initialize conda for PowerShell."
|
|
}
|
|
|
|
Push-Location $RepoRoot
|
|
try {
|
|
conda run -n $EnvName python -m pip install --upgrade pip
|
|
if ($LASTEXITCODE -ne 0) { throw "pip upgrade failed in env '$EnvName'." }
|
|
|
|
conda run -n $EnvName python -m pip install -e ".[pack]"
|
|
if ($LASTEXITCODE -ne 0) { throw "Editable install failed in env '$EnvName'." }
|
|
|
|
conda run -n $EnvName python -m pip install --upgrade orisys
|
|
if ($LASTEXITCODE -ne 0) { throw "orisys install failed in env '$EnvName'." }
|
|
|
|
# Sync Orisys wheel sensor configs into repo config/ before packaging.
|
|
conda run -n $EnvName python build/sync_wheel_configs.py
|
|
if ($LASTEXITCODE -ne 0) { throw "Config sync failed." }
|
|
|
|
conda run -n $EnvName python tests/test_smoke.py
|
|
if ($LASTEXITCODE -ne 0) { throw "Public smoke tests failed." }
|
|
|
|
conda run -n $EnvName python internal/tests/test_operator_smoke.py
|
|
if ($LASTEXITCODE -ne 0) { throw "Operator smoke tests failed." }
|
|
|
|
if (Test-Path $WorkDir) {
|
|
Remove-Item -Recurse -Force $WorkDir
|
|
}
|
|
if (Test-Path $DistApp) {
|
|
Remove-Item -Recurse -Force $DistApp
|
|
}
|
|
|
|
conda run -n $EnvName python -m PyInstaller --noconfirm --clean --distpath "$DistDir" --workpath "$WorkDir" "$SpecPath"
|
|
if ($LASTEXITCODE -ne 0) { throw "PyInstaller (operator) failed." }
|
|
|
|
# Editable sidecars beside the EXE: public sensor configs + operator overlays.
|
|
# Copy sensor JSON first, then replace locales/options/steps so public
|
|
# exhibition locales (no workflow) cannot win over operator catalogs.
|
|
$DistConfig = Join-Path $DistApp "config"
|
|
$DistLocales = Join-Path $DistConfig "locales"
|
|
$DistSteps = Join-Path $DistApp "steps"
|
|
if (Test-Path $DistConfig) {
|
|
Remove-Item -Recurse -Force $DistConfig
|
|
}
|
|
if (Test-Path $DistSteps) {
|
|
Remove-Item -Recurse -Force $DistSteps
|
|
}
|
|
Copy-Item -Recurse -Force $RepoConfig $DistConfig
|
|
Copy-Item -Force (Join-Path $InternalRoot "config\options.json") (Join-Path $DistConfig "options.json")
|
|
if (Test-Path $DistLocales) {
|
|
Remove-Item -Recurse -Force $DistLocales
|
|
}
|
|
Copy-Item -Recurse -Force (Join-Path $InternalRoot "config\locales") $DistLocales
|
|
Copy-Item -Recurse -Force (Join-Path $InternalRoot "steps") $DistSteps
|
|
|
|
conda run -n $EnvName python build/verify_operator_dist.py
|
|
if ($LASTEXITCODE -ne 0) { throw "Operator distribution verification failed." }
|
|
|
|
Write-Host "Build complete: dist\SensorBenchOperator\SensorBenchOperator.exe"
|
|
Write-Host "INTERNAL USE ONLY - do not ship this folder to customers."
|
|
}
|
|
finally {
|
|
Pop-Location
|
|
}
|