From 321e5d62872bb8dd03211b93491fb701f9f42b12 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Fri, 5 Jun 2026 13:22:57 +0200 Subject: [PATCH] Add Linux app package readiness --- docs/modernization/build-inventory.md | 14 +++++----- docs/modernization/debt.md | 11 +++++--- docs/modernization/roadmap.md | 22 ++++++++-------- scripts/automation/package-smoke.ps1 | 27 ++++++++++++++++++-- scripts/automation/package-smoke.sh | 11 +++++++- scripts/dev/check_package_smoke_readiness.py | 10 ++++++++ 6 files changed, 72 insertions(+), 23 deletions(-) diff --git a/docs/modernization/build-inventory.md b/docs/modernization/build-inventory.md index 3cd3abc..82ce4ba 100644 --- a/docs/modernization/build-inventory.md +++ b/docs/modernization/build-inventory.md @@ -184,18 +184,18 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\apple-remote-build.p It also guards the root CMake platform automation target names and the PowerShell/shell Android SDK Manager update hooks. - `package-smoke.ps1 -ReadinessOnly` and `package-smoke.sh --readiness-only` - emit the Windows AppX, Android standard/Quest/Focus APK, Apple bundle, and - WebGL package readiness matrix without first building an app artifact. The - full package smoke command still builds/checks the selected app target before - reporting the same readiness matrix. `package-smoke.ps1 + emit the Windows AppX, Android standard/Quest/Focus APK, Apple bundle, Linux + app, and WebGL package readiness matrix without first building an app + artifact. The full package smoke command still builds/checks the selected app + target before reporting the same readiness matrix. `package-smoke.ps1 -AndroidNativeChecks` also runs the retained Android standard `native-lib` build and Quest/Focus configure helper for selected Android package kinds, then reports those native results beside the APK blocker matrix. `scripts/dev/check_package_smoke_readiness.py`, registered as `panopainter_package_smoke_readiness_self_test`, verifies both wrappers keep - the same six package kinds, blocked DEBT-0011 status, readiness-only mode, - retained Android native-check prerequisite metadata, and root CMake package - validation target names. + the same seven package kinds, blocked DEBT-0011 status, readiness-only mode, + retained Android native-check prerequisite metadata, retained Linux/WebGL + CMake baseline metadata, and root CMake package validation target names. - Root CMake exposes non-default package validation targets: `panopainter_package_readiness`, `panopainter_windows_app_package_smoke`, diff --git a/docs/modernization/debt.md b/docs/modernization/debt.md index 91f63a9..dca7882 100644 --- a/docs/modernization/debt.md +++ b/docs/modernization/debt.md @@ -31,8 +31,8 @@ agent or engineer to remove them without reconstructing context from chat. Android variants. Package targets remain open under DEBT-0009 and DEBT-0011. - 2026-06-05: DEBT-0011 was narrowed. `package-smoke.ps1` and `package-smoke.sh` now have readiness-only modes that report the same - Windows AppX, Android standard/Quest/Focus APK, Apple bundle, and WebGL - blocker matrix without requiring an app build first, and + Windows AppX, Android standard/Quest/Focus APK, Apple bundle, Linux app, and + WebGL blocker matrix without requiring an app build first, and `panopainter_package_smoke_readiness_self_test` guards package-kind parity across both wrappers. Package target migration remains open. - 2026-06-05: DEBT-0004 was narrowed for Apple compile coverage. The Mac mini @@ -269,6 +269,11 @@ agent or engineer to remove them without reconstructing context from chat. instead of global C++14 flags. `panopainter_retained_platform_cmake_self_test` guards those baselines while root CMake app/package target migration remains open. +- 2026-06-05: DEBT-0011 was narrowed again. Package readiness now includes a + Linux app output blocker and points WebGL readiness at the retained WebGL app + CMake entrypoint, with both PowerShell and shell wrappers reporting the + retained Linux/WebGL CMake baseline prerequisite guarded by + `panopainter_retained_platform_cmake_self_test`. - 2026-06-05: DEBT-0011 was narrowed again. `package-smoke.ps1` now has `-AndroidNativeChecks`, which invokes the retained Android standard `native-lib` build and Quest/Focus configure helper for selected Android @@ -323,7 +328,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-0009 | Open | Modernization | Android root CMake validation currently builds headless targets only, while retained standard/Quest/Focus package CMake paths now have a refreshed CMake 3.10/C++23 baseline outside root CMake; automation queries `sdkmanager`, installs newer or missing SDK Manager NDK/CMake packages, selects the resulting pair before configure, and reports update decisions; root CMake exposes non-default platform-build and retained native package validation targets | 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`; `cmake --build --preset android-x64`; `cmake --build --preset android-quest-arm64`; `cmake --build --preset android-focus-arm64`; `cmake --build --preset windows-msvc-default --config Debug --target panopainter_platform_build_android_assets`; `powershell -ExecutionPolicy Bypass -File scripts\automation\android-legacy-package-build.ps1 -Packages standard`; `powershell -ExecutionPolicy Bypass -File scripts\automation\android-legacy-package-build.ps1 -Packages quest,focus -ConfigureOnly`; `powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -ReadinessOnly -AndroidNativeChecks -PackageKinds android-standard-apk,android-quest-apk,android-focus-apk`; `cmake --build --preset windows-msvc-default --config Debug --target panopainter_android_native_package_smoke` | 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/frame/document/undo-history model with alpha-lock metadata, snapshot construction, per-layer frame metadata, renderer-free RGBA8 face payload storage, snapshot-embedded face-payload validation, renderer-free alpha8 selection-mask storage, PPI import/export helpers, and stroke-script-to-face-payload CLI automation, but it is not yet wired to legacy `Canvas`, legacy save, or legacy action commands | Keep extraction incremental while preserving app behavior | `ctest --preset desktop-fast --build-config Debug`; `pano_cli create-document --width 64 --height 32 --layers 2`; `pano_cli load-project --path tests\data\projects\minimal-project.ppi`; `pp_document_tests`; `pp_document_ppi_import_tests`; `pp_document_ppi_export_tests`; `pano_cli_simulate_document_edits_smoke`; `pano_cli_simulate_document_export_smoke`; `pano_cli_save_document_project_roundtrip_smoke`; `pano_cli_apply_stroke_script_roundtrip_smoke`; `pano_cli_apply_stroke_script_rejects_tiny_canvas` | 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 and reports a structured package readiness matrix for Windows AppX, Android standard/Quest/Focus APKs, Apple bundles, and WebGL output; the Windows app smoke and retained Android package native CMake paths are reachable from root CMake package validation targets, but Windows AppX/APK/Apple/WebGL package outputs are still `blocked` because root CMake package targets do not exist yet | 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`; `cmake --build --preset windows-msvc-default --config Debug --target panopainter_windows_app_package_smoke`; `powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -ReadinessOnly -AndroidNativeChecks -PackageKinds android-standard-apk,android-quest-apk,android-focus-apk`; `cmake --build --preset windows-msvc-default --config Debug --target panopainter_android_native_package_smoke`; `python scripts/dev/check_package_smoke_readiness.py`; `bash -n scripts/automation/package-smoke.sh` | Package-smoke builds and validates Windows AppX, Android APK variants, Apple bundles, and WebGL output where local toolchains are present | +| DEBT-0011 | Open | Modernization | `package-smoke` validates the Windows CMake app artifact and reports a structured package readiness matrix for Windows AppX, Android standard/Quest/Focus APKs, Apple bundles, Linux app output, and WebGL output; the Windows app smoke, retained Android package native CMake paths, and retained Linux/WebGL CMake baseline metadata are reachable from package validation, but Windows AppX/APK/Linux/Apple/WebGL package outputs are still `blocked` because root CMake package targets do not exist yet | 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`; `cmake --build --preset windows-msvc-default --config Debug --target panopainter_windows_app_package_smoke`; `powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -ReadinessOnly -AndroidNativeChecks -PackageKinds android-standard-apk,android-quest-apk,android-focus-apk`; `cmake --build --preset windows-msvc-default --config Debug --target panopainter_android_native_package_smoke`; `python scripts/dev/check_package_smoke_readiness.py`; `bash -n scripts/automation/package-smoke.sh` | Package-smoke builds and validates Windows AppX, Android APK variants, Linux app, Apple bundles, and WebGL output where local toolchains are present | | DEBT-0012 | Open | Modernization | `pp_ui_core` uses vcpkg tinyxml2 on `windows-msvc-vcpkg-headless`, but retains `pp_vendor_tinyxml2` for default and unproven platform presets | Mobile/AppX/Apple triplets and app packaging still need validation before removing the vendored fallback | `ctest --preset desktop-fast-vcpkg --build-config Debug`; `ctest --preset desktop-fast --build-config Debug`; `powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64` | All supported presets consume vcpkg tinyxml2 or document a permanent vendored exception | | DEBT-0013 | Open | Modernization | `pp_assets`, `pp_document`, `pano_cli inspect-project`, `pano_cli load-project`, and `pano_cli save-project` validate the fixed PPI header, thumbnail/body byte layout, generated multi-layer/multi-frame PPI writing with explicit layer opacity/blend/alpha-lock/visibility metadata, per-layer frame durations, metadata-only and targeted dirty-face-payload save/load round-trips, layer/frame index, dirty-face descriptors, dirty-face PNG payload metadata, asset-level RGBA PNG payload decoding, pure document-to-PPI export, CLI document export automation, file-writing document export automation, stroke-script-generated document payload export, and decoded pixel attachment to `pp_document`, but full legacy PPI round-trip parity is not yet extracted | Full PPI save parity requires staged extraction of legacy `Canvas` serialization and image/layer payload handling | `ctest --preset desktop-fast --build-config Debug`; `pp_assets_image_pixels_tests`; `pp_assets_ppi_header_tests`; `pp_document_ppi_import_tests`; `pp_document_ppi_export_tests`; `pano_cli_inspect_project_layout_smoke`; `pano_cli_load_project_metadata_smoke`; `pano_cli_save_project_roundtrip_smoke`; `pano_cli_save_project_payload_roundtrip_smoke`; `pano_cli_simulate_document_export_smoke`; `pano_cli_save_document_project_roundtrip_smoke`; `pano_cli_apply_stroke_script_roundtrip_smoke`; `pano_cli_apply_stroke_script_rejects_tiny_canvas` | Full PPI load/save fixtures cover thumbnails, decoded layer face payloads attached to documents, frames, corrupt payloads, dirty-face payload saving, arbitrary legacy canvas payload/layout combinations, and legacy app round-trip compatibility | | DEBT-0014 | Open | Modernization | `windows-clangcl-asan` now configures as a headless Ninja/clang-cl preset and uses the release MSVC runtime required by ASan, but local builds still fail because installed clang-cl 18.1.8 is paired with VS 2026-preview STL headers that require Clang 20 or newer | Sanitizer validation should be local and repeatable, but this machine's compiler/header pairing is incompatible | `cmake --fresh --preset windows-clangcl-asan`; `cmake --build --preset windows-clangcl-asan --target pp_foundation` | Install/use Clang 20+ with the VS 2026 STL, or point the preset at a compatible VS 2022 toolchain, then make `platform-build.ps1 -Presets windows-clangcl-asan` pass for the headless matrix | diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index 4576113..c180a09 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -1396,11 +1396,12 @@ also exposes non-default platform validation targets: those target names and the wrapper matrix now includes `pp_app_core_app_dialog_tests` with the rest of the CMake test executables. `package-smoke` now emits a structured package readiness matrix for Windows -AppX, Android standard/Quest/Focus APKs, Apple bundles, and WebGL output, with -blocked prerequisites tied to DEBT-0011. It also has a readiness-only mode for -cheap package blocker inventory without building an app artifact, and -`panopainter_package_smoke_readiness_self_test` keeps the PowerShell and shell -readiness matrices aligned. The PowerShell wrapper can also run the retained +AppX, Android standard/Quest/Focus APKs, Apple bundles, Linux app output, and +WebGL output, with blocked prerequisites tied to DEBT-0011. It also has a +readiness-only mode for cheap package blocker inventory without building an app +artifact, and `panopainter_package_smoke_readiness_self_test` keeps the +PowerShell and shell readiness matrices aligned, including retained Linux/WebGL +CMake baseline metadata. The PowerShell wrapper can also run the retained Android native package checks through `-AndroidNativeChecks`, reporting the standard `native-lib` build plus Quest/Focus configure checks next to the APK blocker matrix. Root CMake now exposes non-default package validation targets @@ -2388,11 +2389,12 @@ Results: document export or history can persist malformed state. - Package-smoke wrappers validate the Windows CMake app executable/runtime `data/` copy and report structured package readiness for AppX, Android - standard/Quest/Focus APKs, Apple bundles, and WebGL outputs. Actual package - building remains blocked by DEBT-0011 until those targets are migrated to - root CMake. Readiness-only mode now reports the same matrix without building - the app first, and the package readiness self-test keeps wrapper package - kinds aligned. + standard/Quest/Focus APKs, Apple bundles, Linux app output, and WebGL + outputs. Actual package building remains blocked by DEBT-0011 until those + targets are migrated to root CMake. Readiness-only mode now reports the same + matrix without building the app first, and the package readiness self-test + keeps wrapper package kinds, retained Linux/WebGL CMake metadata, and blocker + metadata aligned. - Android standard arm64/x64, Quest arm64, and Focus/Wave arm64 configure through the platform-build wrapper by default. Focused validation compiled representative headless component/tool targets across all four presets, and diff --git a/scripts/automation/package-smoke.ps1 b/scripts/automation/package-smoke.ps1 index fc48695..e7291f5 100644 --- a/scripts/automation/package-smoke.ps1 +++ b/scripts/automation/package-smoke.ps1 @@ -11,6 +11,7 @@ param( "android-quest-apk", "android-focus-apk", "apple-bundle", + "linux-app", "webgl" ) ) @@ -283,16 +284,38 @@ function Get-PackageReadiness { (New-ArtifactCheck -Name "apple-package-output" -Path $bundleDir -PathType "Container") ) } + "linux-app" { + $linuxCmake = Join-Path $root "linux/CMakeLists.txt" + $linuxBinary = Join-Path $root "out/package/linux/panopainter" + $readiness += New-PackageReadiness ` + -Kind $kind ` + -Status "blocked" ` + -Reason "retained-linux-cmake-not-consuming-root-cmake-targets" ` + -ValidationCommand "cmake -S linux -B out/package/linux-retained && cmake --build out/package/linux-retained --target panopainter" ` + -Prerequisites @( + (New-Prerequisite -Name "retained-linux-cmake" -Available (Test-Path -LiteralPath $linuxCmake -PathType Leaf) -Detail $linuxCmake), + (New-Prerequisite -Name "cmake" -Available (Test-CommandAvailable "cmake") -Detail "Linux retained app CMake configure/build tool"), + (New-Prerequisite -Name "retained-platform-cmake-baseline" -Available $true -Detail "python scripts/dev/check_retained_platform_cmake.py"), + (New-Prerequisite -Name "root-cmake-preset" -Available $true -Detail "linux-clang"), + (New-Prerequisite -Name "root-cmake-package-target" -Available $false -Detail "Not migrated yet") + ) ` + -Artifacts @( + (New-ArtifactCheck -Name "linux-app-output" -Path $linuxBinary -PathType "Leaf") + ) + } "webgl" { + $webglCmake = Join-Path $root "webgl/CMakeLists.txt" $webDir = Join-Path $root "out/package/webgl" $readiness += New-PackageReadiness ` -Kind $kind ` -Status "blocked" ` - -Reason "emscripten-preset-exists-but-webgl-package-target-missing" ` - -ValidationCommand "cmake --build --preset emscripten --target PanoPainter" ` + -Reason "retained-webgl-cmake-not-consuming-root-cmake-targets" ` + -ValidationCommand "emcmake cmake -S webgl -B out/package/webgl-retained && cmake --build out/package/webgl-retained --target panopainter" ` -Prerequisites @( + (New-Prerequisite -Name "retained-webgl-cmake" -Available (Test-Path -LiteralPath $webglCmake -PathType Leaf) -Detail $webglCmake), (New-Prerequisite -Name "emcc" -Available (Test-CommandAvailable "emcc") -Detail "Emscripten compiler"), (New-Prerequisite -Name "emcmake" -Available (Test-CommandAvailable "emcmake") -Detail "Emscripten CMake wrapper"), + (New-Prerequisite -Name "retained-platform-cmake-baseline" -Available $true -Detail "python scripts/dev/check_retained_platform_cmake.py"), (New-Prerequisite -Name "root-cmake-preset" -Available $true -Detail "emscripten"), (New-Prerequisite -Name "root-cmake-package-target" -Available $false -Detail "Not migrated yet") ) ` diff --git a/scripts/automation/package-smoke.sh b/scripts/automation/package-smoke.sh index bf93ca1..f5ca970 100644 --- a/scripts/automation/package-smoke.sh +++ b/scripts/automation/package-smoke.sh @@ -55,6 +55,9 @@ package_readiness_json() { android_focus_output="$root/android/focus/build/outputs/apk" apple_project="$root/PanoPainter.xcodeproj/project.pbxproj" apple_output="$root/out/package/apple" + linux_cmake="$root/linux/CMakeLists.txt" + linux_output="$root/out/package/linux/panopainter" + webgl_cmake="$root/webgl/CMakeLists.txt" webgl_output="$root/out/package/webgl" file_available "$windows_wapproj"; windows_wapproj_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" @@ -78,6 +81,11 @@ package_readiness_json() { command_available xcodebuild; xcodebuild_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" dir_available "$apple_output"; apple_output_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" + file_available "$linux_cmake"; linux_cmake_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" + command_available cmake; cmake_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" + file_available "$linux_output"; linux_output_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" + + file_available "$webgl_cmake"; webgl_cmake_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" command_available emcc; emcc_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" command_available emcmake; emcmake_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" dir_available "$webgl_output"; webgl_output_exists="$([ "$?" -eq 0 ] && printf 1 || printf 0)" @@ -88,7 +96,8 @@ package_readiness_json() { printf ',{"kind":"android-quest-apk","status":"blocked","reason":"legacy-gradle-package-not-consuming-root-cmake-targets","debt":"DEBT-0011","validationCommand":"gradle -p android/quest assembleDebug","prerequisites":[{"name":"gradle-build","available":%s,"detail":%s},{"name":"android-manifest","available":%s,"detail":%s},{"name":"gradle","available":%s,"detail":"Android package builder"},{"name":"retained-native-cmake-check","available":true,"detail":"powershell -ExecutionPolicy Bypass -File scripts/automation/android-legacy-package-build.ps1 -Packages quest -ConfigureOnly"},{"name":"root-cmake-preset","available":true,"detail":"android-quest-arm64"},{"name":"root-cmake-package-target","available":false,"detail":"Not migrated yet"}],"artifacts":[{"name":"apk-output","path":%s,"pathType":"Container","exists":%s}]}' "$(json_bool "$android_quest_gradle_exists")" "$(json_string "$android_quest_gradle")" "$(json_bool "$android_quest_manifest_exists")" "$(json_string "$android_quest_manifest")" "$(json_bool "$gradle_exists")" "$(json_string "$android_quest_output")" "$(json_bool "$android_quest_output_exists")" printf ',{"kind":"android-focus-apk","status":"blocked","reason":"legacy-gradle-package-not-consuming-root-cmake-targets","debt":"DEBT-0011","validationCommand":"gradle -p android/focus assembleDebug","prerequisites":[{"name":"gradle-build","available":%s,"detail":%s},{"name":"android-manifest","available":%s,"detail":%s},{"name":"gradle","available":%s,"detail":"Android package builder"},{"name":"retained-native-cmake-check","available":true,"detail":"powershell -ExecutionPolicy Bypass -File scripts/automation/android-legacy-package-build.ps1 -Packages focus -ConfigureOnly"},{"name":"root-cmake-preset","available":true,"detail":"android-focus-arm64"},{"name":"root-cmake-package-target","available":false,"detail":"Not migrated yet"}],"artifacts":[{"name":"apk-output","path":%s,"pathType":"Container","exists":%s}]}' "$(json_bool "$android_focus_gradle_exists")" "$(json_string "$android_focus_gradle")" "$(json_bool "$android_focus_manifest_exists")" "$(json_string "$android_focus_manifest")" "$(json_bool "$gradle_exists")" "$(json_string "$android_focus_output")" "$(json_bool "$android_focus_output_exists")" printf ',{"kind":"apple-bundle","status":"blocked","reason":"legacy-xcode-project-and-host-toolchain-not-aligned-with-root-cmake-package-target","debt":"DEBT-0011","validationCommand":"xcodebuild -project PanoPainter.xcodeproj -configuration %s","prerequisites":[{"name":"legacy-xcode-project","available":%s,"detail":%s},{"name":"xcodebuild","available":%s,"detail":"Apple package builder"},{"name":"root-cmake-preset","available":true,"detail":"macos/ios-device/ios-simulator"},{"name":"root-cmake-package-target","available":false,"detail":"Not migrated yet"}],"artifacts":[{"name":"apple-package-output","path":%s,"pathType":"Container","exists":%s}]}' "$configuration" "$(json_bool "$apple_project_exists")" "$(json_string "$apple_project")" "$(json_bool "$xcodebuild_exists")" "$(json_string "$apple_output")" "$(json_bool "$apple_output_exists")" - printf ',{"kind":"webgl","status":"blocked","reason":"emscripten-preset-exists-but-webgl-package-target-missing","debt":"DEBT-0011","validationCommand":"cmake --build --preset emscripten --target PanoPainter","prerequisites":[{"name":"emcc","available":%s,"detail":"Emscripten compiler"},{"name":"emcmake","available":%s,"detail":"Emscripten CMake wrapper"},{"name":"root-cmake-preset","available":true,"detail":"emscripten"},{"name":"root-cmake-package-target","available":false,"detail":"Not migrated yet"}],"artifacts":[{"name":"webgl-output","path":%s,"pathType":"Container","exists":%s}]}' "$(json_bool "$emcc_exists")" "$(json_bool "$emcmake_exists")" "$(json_string "$webgl_output")" "$(json_bool "$webgl_output_exists")" + printf ',{"kind":"linux-app","status":"blocked","reason":"retained-linux-cmake-not-consuming-root-cmake-targets","debt":"DEBT-0011","validationCommand":"cmake -S linux -B out/package/linux-retained && cmake --build out/package/linux-retained --target panopainter","prerequisites":[{"name":"retained-linux-cmake","available":%s,"detail":%s},{"name":"cmake","available":%s,"detail":"Linux retained app CMake configure/build tool"},{"name":"retained-platform-cmake-baseline","available":true,"detail":"python scripts/dev/check_retained_platform_cmake.py"},{"name":"root-cmake-preset","available":true,"detail":"linux-clang"},{"name":"root-cmake-package-target","available":false,"detail":"Not migrated yet"}],"artifacts":[{"name":"linux-app-output","path":%s,"pathType":"Leaf","exists":%s}]}' "$(json_bool "$linux_cmake_exists")" "$(json_string "$linux_cmake")" "$(json_bool "$cmake_exists")" "$(json_string "$linux_output")" "$(json_bool "$linux_output_exists")" + printf ',{"kind":"webgl","status":"blocked","reason":"retained-webgl-cmake-not-consuming-root-cmake-targets","debt":"DEBT-0011","validationCommand":"emcmake cmake -S webgl -B out/package/webgl-retained && cmake --build out/package/webgl-retained --target panopainter","prerequisites":[{"name":"retained-webgl-cmake","available":%s,"detail":%s},{"name":"emcc","available":%s,"detail":"Emscripten compiler"},{"name":"emcmake","available":%s,"detail":"Emscripten CMake wrapper"},{"name":"retained-platform-cmake-baseline","available":true,"detail":"python scripts/dev/check_retained_platform_cmake.py"},{"name":"root-cmake-preset","available":true,"detail":"emscripten"},{"name":"root-cmake-package-target","available":false,"detail":"Not migrated yet"}],"artifacts":[{"name":"webgl-output","path":%s,"pathType":"Container","exists":%s}]}' "$(json_bool "$webgl_cmake_exists")" "$(json_string "$webgl_cmake")" "$(json_bool "$emcc_exists")" "$(json_bool "$emcmake_exists")" "$(json_string "$webgl_output")" "$(json_bool "$webgl_output_exists")" printf ']' } diff --git a/scripts/dev/check_package_smoke_readiness.py b/scripts/dev/check_package_smoke_readiness.py index 3ee2f5d..dffbae4 100644 --- a/scripts/dev/check_package_smoke_readiness.py +++ b/scripts/dev/check_package_smoke_readiness.py @@ -15,6 +15,7 @@ EXPECTED_PACKAGE_KINDS = [ "android-quest-apk", "android-focus-apk", "apple-bundle", + "linux-app", "webgl", ] @@ -73,6 +74,10 @@ def main() -> int: "package-smoke.ps1": r"retained-native-cmake-check", "package-smoke.sh": r"retained-native-cmake-check", }) + retained_platform_cmake_counts = count_regex(root, { + "package-smoke.ps1": r"retained-(linux|webgl)-cmake", + "package-smoke.sh": r"retained-(linux|webgl)-cmake", + }) cmake_package_module = (root / "cmake" / "PanoPainterPackageTargets.cmake").read_text(encoding="utf-8") root_cmake = (root / "CMakeLists.txt").read_text(encoding="utf-8") @@ -94,6 +99,9 @@ def main() -> int: retained_android_native_complete = { name: count >= 3 for name, count in retained_android_native_counts.items() } + retained_platform_cmake_complete = { + name: count >= 2 for name, count in retained_platform_cmake_counts.items() + } cmake_package_targets_present = { target: target in cmake_package_module for target in EXPECTED_CMAKE_PACKAGE_TARGETS } @@ -106,6 +114,7 @@ def main() -> int: and all(blocked_complete.values()) and all(readiness_mode_present.values()) and all(retained_android_native_complete.values()) + and all(retained_platform_cmake_complete.values()) and all(cmake_package_targets_present.values()) and cmake_package_module_included ) @@ -123,6 +132,7 @@ def main() -> int: "blockedComplete": blocked_complete, "readinessModePresent": readiness_mode_present, "retainedAndroidNativeComplete": retained_android_native_complete, + "retainedPlatformCmakeComplete": retained_platform_cmake_complete, "cmakePackageTargetsPresent": cmake_package_targets_present, "cmakePackageModuleIncluded": cmake_package_module_included, }, separators=(",", ":")))