Files
sensor-bench/build/build_operator_exe.ps1
2026-09-01 11:14:56 +08:00

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
}