This repository has been archived on 2026-10-29. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
EveUnity/scripts/run-package-tests.ps1
2026-07-10 02:30:06 +01:00

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"