77 lines
2.9 KiB
PowerShell
77 lines
2.9 KiB
PowerShell
param(
|
|
[string] $AetheriaRoot = "E:\Projects\Aetheria",
|
|
[string] $UnityExe = "C:\Program Files\Unity\Hub\Editor\6000.4.2f1\Editor\Unity.exe",
|
|
[string] $OutputRoot = "artifacts\aetheria-consumer"
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$repoRoot = Split-Path -Parent $PSScriptRoot
|
|
$packageRoot = Join-Path $repoRoot "packages\org.gamecult.eve.unity-scene"
|
|
$manifestPath = Join-Path $AetheriaRoot "Packages\manifest.json"
|
|
$output = if ([System.IO.Path]::IsPathRooted($OutputRoot)) {
|
|
$OutputRoot
|
|
} else {
|
|
Join-Path $repoRoot $OutputRoot
|
|
}
|
|
|
|
foreach ($required in @($packageRoot, $manifestPath, $UnityExe)) {
|
|
if (-not (Test-Path -LiteralPath $required)) {
|
|
throw "Required EveUnity consumer-test path not found: $required"
|
|
}
|
|
}
|
|
|
|
$stamp = Get-Date -Format "yyyyMMddTHHmmss"
|
|
$runRoot = Join-Path $output $stamp
|
|
New-Item -ItemType Directory -Force -Path $runRoot | Out-Null
|
|
$resultsPath = Join-Path $runRoot "unity-editmode-results.xml"
|
|
$logPath = Join-Path $runRoot "unity-editmode.log"
|
|
$originalManifest = Get-Content -Raw -LiteralPath $manifestPath
|
|
|
|
try {
|
|
$manifest = $originalManifest | ConvertFrom-Json
|
|
$manifestUri = [Uri] (($AetheriaRoot.TrimEnd('\\') + '\\'))
|
|
$packageUri = [Uri] (($packageRoot.TrimEnd('\\') + '\\'))
|
|
$relativePackageRoot = [Uri]::UnescapeDataString(
|
|
$manifestUri.MakeRelativeUri($packageUri).ToString()).TrimEnd('/')
|
|
$dependency = "file:" + ($relativePackageRoot -replace '\\', '/')
|
|
$manifest.dependencies.'org.gamecult.eve.unity-scene' = $dependency
|
|
$testables = @($manifest.testables) | Where-Object { $_ }
|
|
if ($testables -notcontains 'org.gamecult.eve.unity-scene') {
|
|
$testables += 'org.gamecult.eve.unity-scene'
|
|
}
|
|
if ($manifest.PSObject.Properties.Name -contains 'testables') {
|
|
$manifest.testables = $testables
|
|
} else {
|
|
$manifest | Add-Member -NotePropertyName testables -NotePropertyValue $testables
|
|
}
|
|
$manifest | ConvertTo-Json -Depth 32 | Set-Content -LiteralPath $manifestPath
|
|
|
|
$arguments = @(
|
|
'-batchmode',
|
|
'-projectPath', $AetheriaRoot,
|
|
'-runTests',
|
|
'-testPlatform', 'EditMode',
|
|
'-assemblyNames', 'GameCult.Eve.UnityScene.Tests',
|
|
'-testResults', $resultsPath,
|
|
'-logFile', $logPath
|
|
)
|
|
$process = Start-Process -FilePath $UnityExe -ArgumentList $arguments -Wait -PassThru -WindowStyle Hidden
|
|
if ($process.ExitCode -ne 0) {
|
|
if (Test-Path -LiteralPath $logPath) {
|
|
Get-Content -LiteralPath $logPath -Tail 120
|
|
}
|
|
throw "EveUnity consumer tests failed with exit code $($process.ExitCode)"
|
|
}
|
|
} finally {
|
|
Set-Content -NoNewline -LiteralPath $manifestPath -Value $originalManifest
|
|
}
|
|
|
|
[xml] $results = Get-Content -Raw -LiteralPath $resultsPath
|
|
$run = $results.SelectSingleNode('//test-run')
|
|
if ($null -eq $run -or [int] $run.failed -gt 0) {
|
|
throw "EveUnity consumer tests did not pass: $resultsPath"
|
|
}
|
|
|
|
Write-Host "EveUnity consumer tests: $($run.passed) passed, $($run.total) total"
|
|
Write-Host "Results: $resultsPath"
|