Add package smoke automation
This commit is contained in:
@@ -65,6 +65,7 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\test.ps1 -Preset des
|
|||||||
powershell -ExecutionPolicy Bypass -File scripts\automation\build.ps1 -Preset windows-msvc-default -Configuration Debug -Target pano_cli
|
powershell -ExecutionPolicy Bypass -File scripts\automation\build.ps1 -Preset windows-msvc-default -Configuration Debug -Target pano_cli
|
||||||
cmake --preset android-arm64
|
cmake --preset android-arm64
|
||||||
powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64
|
powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64
|
||||||
|
powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -Preset windows-msvc-default -Configuration Debug
|
||||||
```
|
```
|
||||||
|
|
||||||
Known local toolchain state:
|
Known local toolchain state:
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ agent or engineer to remove them without reconstructing context from chat.
|
|||||||
| DEBT-0008 | Open | Modernization | `windows-msvc-default` preset is used for local validation because the VS 2026 generator is not installed here | The target VS 2026 preset must remain, but this machine configures with Visual Studio 17 2022 | `cmake --preset windows-msvc-default`; `ctest --preset desktop-fast --build-config Debug` | Validate `windows-vs2026-x64` on a machine with Visual Studio 2026 installed and make it the default Windows validation preset |
|
| DEBT-0008 | Open | Modernization | `windows-msvc-default` preset is used for local validation because the VS 2026 generator is not installed here | The target VS 2026 preset must remain, but this machine configures with Visual Studio 17 2022 | `cmake --preset windows-msvc-default`; `ctest --preset desktop-fast --build-config Debug` | Validate `windows-vs2026-x64` on a machine with Visual Studio 2026 installed and make it the default Windows validation preset |
|
||||||
| DEBT-0009 | Open | Modernization | Android root CMake validation currently builds headless targets only, not APK/package variants | Platform app entrypoints still live in legacy Gradle/CMake projects and need Phase 6 alignment | `powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64` | Android standard, Quest, and Focus/Wave package targets consume shared component targets and have package smoke commands |
|
| DEBT-0009 | Open | Modernization | Android root CMake validation currently builds headless targets only, not APK/package variants | Platform app entrypoints still live in legacy Gradle/CMake projects and need Phase 6 alignment | `powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64` | Android standard, Quest, and Focus/Wave package targets consume shared component targets and have package smoke commands |
|
||||||
| DEBT-0010 | Open | Modernization | `pp_document` is a pure layer/document model but is not yet wired to legacy `Canvas`, PPI load/save, animation frames, or undo/redo | Keep extraction incremental while preserving app behavior | `ctest --preset desktop-fast --build-config Debug`; `pano_cli create-document --width 64 --height 32 --layers 2` | Legacy document behavior is represented by `pp_document` tests and the app consumes it through a boundary/facade |
|
| DEBT-0010 | Open | Modernization | `pp_document` is a pure layer/document model but is not yet wired to legacy `Canvas`, PPI load/save, animation frames, or undo/redo | Keep extraction incremental while preserving app behavior | `ctest --preset desktop-fast --build-config Debug`; `pano_cli create-document --width 64 --height 32 --layers 2` | Legacy document behavior is represented by `pp_document` tests and the app consumes it through a boundary/facade |
|
||||||
|
| DEBT-0011 | Open | Modernization | `package-smoke` validates the Windows CMake app artifact only, not AppX/APK/Apple/WebGL package outputs | Platform package targets are not migrated to root CMake yet | `powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -Preset windows-msvc-default -Configuration Debug` | Package-smoke covers Windows AppX, Android APK variants, Apple bundles, and WebGL output where local toolchains are present |
|
||||||
|
|
||||||
## Closed Debt
|
## Closed Debt
|
||||||
|
|
||||||
|
|||||||
@@ -242,10 +242,11 @@ Gate:
|
|||||||
Goal: make each component reachable by automated tools and future agents.
|
Goal: make each component reachable by automated tools and future agents.
|
||||||
|
|
||||||
Status: in progress. `tests/` exists, `desktop-fast` runs headlessly, and
|
Status: in progress. `tests/` exists, `desktop-fast` runs headlessly, and
|
||||||
PowerShell/bash wrappers exist for configure/build/test/analyze/platform-build.
|
PowerShell/bash wrappers exist for
|
||||||
`pano_cli` exists with JSON automation commands for creating a `pp_document`
|
configure/build/test/analyze/platform-build/package-smoke. `pano_cli` exists
|
||||||
model and inspecting image signatures; full document/app integration is
|
with JSON automation commands for creating a `pp_document` model and
|
||||||
debt-tracked as DEBT-0010.
|
inspecting image signatures; full document/app integration is debt-tracked as
|
||||||
|
DEBT-0010.
|
||||||
|
|
||||||
Implementation tasks:
|
Implementation tasks:
|
||||||
|
|
||||||
@@ -520,6 +521,7 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\test.ps1 -Preset des
|
|||||||
powershell -ExecutionPolicy Bypass -File scripts\automation\build.ps1 -Preset windows-msvc-default -Configuration Debug -Target pano_cli
|
powershell -ExecutionPolicy Bypass -File scripts\automation\build.ps1 -Preset windows-msvc-default -Configuration Debug -Target pano_cli
|
||||||
cmake --preset android-arm64
|
cmake --preset android-arm64
|
||||||
powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64
|
powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64
|
||||||
|
powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -Preset windows-msvc-default -Configuration Debug
|
||||||
```
|
```
|
||||||
|
|
||||||
Results:
|
Results:
|
||||||
@@ -539,6 +541,8 @@ Results:
|
|||||||
`out/build/windows-msvc-default/Debug/PanoPainter.exe`.
|
`out/build/windows-msvc-default/Debug/PanoPainter.exe`.
|
||||||
- PowerShell build/test automation wrappers return JSON summaries and passed
|
- PowerShell build/test automation wrappers return JSON summaries and passed
|
||||||
local smoke checks.
|
local smoke checks.
|
||||||
|
- PowerShell package-smoke wrapper validates the Windows CMake app executable
|
||||||
|
and runtime `data/` copy.
|
||||||
- Android arm64 configured with NDK 29.0.14206865 through the platform-build
|
- Android arm64 configured with NDK 29.0.14206865 through the platform-build
|
||||||
wrapper and compiled headless foundation/tool/test targets.
|
wrapper and compiled headless foundation/tool/test targets.
|
||||||
- Known remaining warnings: legacy project/vendor diagnostics, Visual Studio
|
- Known remaining warnings: legacy project/vendor diagnostics, Visual Studio
|
||||||
|
|||||||
48
scripts/automation/package-smoke.ps1
Normal file
48
scripts/automation/package-smoke.ps1
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
[CmdletBinding()]
|
||||||
|
param(
|
||||||
|
[string]$Preset = "windows-msvc-default",
|
||||||
|
[string]$Configuration = "Debug",
|
||||||
|
[string]$Target = "PanoPainter"
|
||||||
|
)
|
||||||
|
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
$started = Get-Date
|
||||||
|
|
||||||
|
& cmake --build --preset $Preset --config $Configuration --target $Target
|
||||||
|
$buildExitCode = $LASTEXITCODE
|
||||||
|
if ($buildExitCode -ne 0) {
|
||||||
|
$elapsed = [int]((Get-Date) - $started).TotalMilliseconds
|
||||||
|
[ordered]@{
|
||||||
|
command = "package-smoke"
|
||||||
|
preset = $Preset
|
||||||
|
configuration = $Configuration
|
||||||
|
target = $Target
|
||||||
|
stage = "build"
|
||||||
|
exitCode = $buildExitCode
|
||||||
|
elapsedMs = $elapsed
|
||||||
|
} | ConvertTo-Json -Compress
|
||||||
|
exit $buildExitCode
|
||||||
|
}
|
||||||
|
|
||||||
|
$binaryDir = Join-Path (Join-Path (Join-Path (Get-Location) "out/build/$Preset") $Configuration) "$Target.exe"
|
||||||
|
$dataDir = Join-Path (Join-Path (Join-Path (Get-Location) "out/build/$Preset") $Configuration) "data"
|
||||||
|
$checks = @(
|
||||||
|
[ordered]@{ name = "executable"; path = $binaryDir; exists = Test-Path -LiteralPath $binaryDir -PathType Leaf },
|
||||||
|
[ordered]@{ name = "data"; path = $dataDir; exists = Test-Path -LiteralPath $dataDir -PathType Container }
|
||||||
|
)
|
||||||
|
|
||||||
|
$failed = @($checks | Where-Object { -not $_.exists })
|
||||||
|
$exitCode = if ($failed.Count -eq 0) { 0 } else { 2 }
|
||||||
|
$elapsedMs = [int]((Get-Date) - $started).TotalMilliseconds
|
||||||
|
|
||||||
|
[ordered]@{
|
||||||
|
command = "package-smoke"
|
||||||
|
preset = $Preset
|
||||||
|
configuration = $Configuration
|
||||||
|
target = $Target
|
||||||
|
exitCode = $exitCode
|
||||||
|
elapsedMs = $elapsedMs
|
||||||
|
checks = $checks
|
||||||
|
} | ConvertTo-Json -Compress -Depth 5
|
||||||
|
|
||||||
|
exit $exitCode
|
||||||
28
scripts/automation/package-smoke.sh
Normal file
28
scripts/automation/package-smoke.sh
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
set -u
|
||||||
|
|
||||||
|
preset="${1:-linux-clang}"
|
||||||
|
configuration="${2:-Debug}"
|
||||||
|
target="${3:-PanoPainter}"
|
||||||
|
artifact="${4:-out/build/$preset/$target}"
|
||||||
|
start="$(date +%s)"
|
||||||
|
|
||||||
|
cmake --build --preset "$preset" --config "$configuration" --target "$target"
|
||||||
|
build_exit="$?"
|
||||||
|
if [ "$build_exit" -ne 0 ]; then
|
||||||
|
end="$(date +%s)"
|
||||||
|
elapsed_ms="$(( (end - start) * 1000 ))"
|
||||||
|
printf '{"command":"package-smoke","preset":"%s","configuration":"%s","target":"%s","stage":"build","exitCode":%s,"elapsedMs":%s}\n' "$preset" "$configuration" "$target" "$build_exit" "$elapsed_ms"
|
||||||
|
exit "$build_exit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "$artifact" ]; then
|
||||||
|
exit_code=0
|
||||||
|
else
|
||||||
|
exit_code=2
|
||||||
|
fi
|
||||||
|
|
||||||
|
end="$(date +%s)"
|
||||||
|
elapsed_ms="$(( (end - start) * 1000 ))"
|
||||||
|
printf '{"command":"package-smoke","preset":"%s","configuration":"%s","target":"%s","artifact":"%s","exists":%s,"exitCode":%s,"elapsedMs":%s}\n' "$preset" "$configuration" "$target" "$artifact" "$([ "$exit_code" -eq 0 ] && printf true || printf false)" "$exit_code" "$elapsed_ms"
|
||||||
|
exit "$exit_code"
|
||||||
Reference in New Issue
Block a user