New engines start from the shared test kit (the template's tests are a one-line EngineContractTests subclass) and the host APIs, so they don't re-derive geometry reading, work areas or validator tolerances. BENCH-RULES.md now forbids clocks, unseeded randomness and environment variables from influencing placement (budgets count work; wall time only through the host's cancellation token) and lists the kit as read-only. Build-Engines.ps1 deploys only OpenNest.Engine.* folders, and New-Engine.ps1 -IncludeBuildFiles copies the kit. Co-Authored-By: Codex <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
48 lines
2.1 KiB
PowerShell
48 lines
2.1 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Builds every plugin engine in this repo and deploys it to the OpenNest benchmark.
|
|
|
|
.DESCRIPTION
|
|
OpenNest.Benchmark loads plugin engines from an Engines/ folder next to its own
|
|
build output. This builds the benchmark in the OpenNest checkout plus each
|
|
OpenNest.Engine.*/ project here (test subprojects are skipped) and copies each
|
|
engine DLL into that folder.
|
|
|
|
.EXAMPLE
|
|
./Build-Engines.ps1
|
|
./Build-Engines.ps1 -Engines MyEngine -Configuration Debug
|
|
./Build-Engines.ps1 -OpenNestRoot D:/src/OpenNest
|
|
#>
|
|
param(
|
|
[string]$Configuration = 'Release',
|
|
# Engine names without the OpenNest.Engine. prefix; default is all of them.
|
|
[string[]]$Engines,
|
|
# OpenNest checkout to build against; defaults to a sibling clone (../OpenNest).
|
|
[string]$OpenNestRoot = (Join-Path (Split-Path $PSScriptRoot -Parent) 'OpenNest')
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
if (-not (Test-Path (Join-Path $OpenNestRoot 'OpenNest.Benchmark/OpenNest.Benchmark.csproj'))) {
|
|
throw "OpenNest checkout not found at '$OpenNestRoot'. Clone https://git.thecozycat.net/aj/OpenNest.git next to this repo or pass -OpenNestRoot."
|
|
}
|
|
$OpenNestRoot = (Resolve-Path $OpenNestRoot).Path
|
|
|
|
dotnet build (Join-Path $OpenNestRoot 'OpenNest.Benchmark/OpenNest.Benchmark.csproj') -c $Configuration -m:1 -nr:false
|
|
if ($LASTEXITCODE -ne 0) { throw 'OpenNest.Benchmark build failed.' }
|
|
|
|
$deployDir = Join-Path $OpenNestRoot "OpenNest.Benchmark/bin/$Configuration/net8.0/Engines"
|
|
New-Item -ItemType Directory -Force $deployDir | Out-Null
|
|
|
|
$projects = Get-ChildItem $PSScriptRoot -Directory -Filter 'OpenNest.Engine.*' |
|
|
Where-Object { -not $Engines -or $Engines -contains $_.Name.Substring('OpenNest.Engine.'.Length) }
|
|
|
|
foreach ($dir in $projects) {
|
|
$csproj = Join-Path $dir.FullName "$($dir.Name).csproj"
|
|
dotnet build $csproj -c $Configuration "-p:OpenNestRoot=$OpenNestRoot/" -m:1 -nr:false
|
|
if ($LASTEXITCODE -ne 0) { throw "$($dir.Name) build failed." }
|
|
|
|
$dll = Join-Path $dir.FullName "bin/$Configuration/net8.0/$($dir.Name).dll"
|
|
Copy-Item $dll $deployDir -Force
|
|
Write-Host "Deployed $($dir.Name) -> $deployDir"
|
|
}
|