Type EveElectron pending lifecycle
This commit is contained in:
parent
ceb6e005c4
commit
ced282f8b6
9 changed files with 364 additions and 3 deletions
123
scripts/run-eveelectron-lifecycle-smoke.ps1
Normal file
123
scripts/run-eveelectron-lifecycle-smoke.ps1
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
param(
|
||||
[string] $CapabilityManifestPath = "runtimes\incubating\eve-electron\eve-runtime-capability.json"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$projectRoot = Split-Path -Parent $PSScriptRoot
|
||||
$absoluteManifestPath = if ([System.IO.Path]::IsPathRooted($CapabilityManifestPath)) {
|
||||
$CapabilityManifestPath
|
||||
} else {
|
||||
Join-Path $projectRoot $CapabilityManifestPath
|
||||
}
|
||||
|
||||
if (-not (Test-Path -LiteralPath $absoluteManifestPath)) {
|
||||
throw "EveElectron runtime capability manifest not found: $absoluteManifestPath"
|
||||
}
|
||||
|
||||
$manifest = Get-Content -LiteralPath $absoluteManifestPath -Raw | ConvertFrom-Json
|
||||
|
||||
if ($manifest.schema -ne "gamecult.eve.runtime_capability.v1") {
|
||||
throw "Unexpected EveElectron manifest schema: $($manifest.schema)"
|
||||
}
|
||||
if ($manifest.runtimeId -ne "electron-shell") {
|
||||
throw "Unexpected EveElectron runtime id: $($manifest.runtimeId)"
|
||||
}
|
||||
if ($manifest.owner -ne "EveElectron") {
|
||||
throw "Unexpected EveElectron owner: $($manifest.owner)"
|
||||
}
|
||||
if ($manifest.incubation.ownerRepo -ne "EveElectron") {
|
||||
throw "Unexpected EveElectron incubation owner: $($manifest.incubation.ownerRepo)"
|
||||
}
|
||||
if ($manifest.incubation.currentHostRepo -ne "Eve") {
|
||||
throw "Unexpected EveElectron current host repo: $($manifest.incubation.currentHostRepo)"
|
||||
}
|
||||
if ($manifest.incubation.splitTarget -ne "EveElectron") {
|
||||
throw "Unexpected EveElectron split target: $($manifest.incubation.splitTarget)"
|
||||
}
|
||||
if (-not $manifest.incubation.splitHandoff.manifestPath) {
|
||||
throw "EveElectron manifest missing split handoff path"
|
||||
}
|
||||
|
||||
if (@($manifest.supportedFeatures).Count -ne 0) {
|
||||
throw "EveElectron must not claim supported runtime features before the generic shell body exists"
|
||||
}
|
||||
if (@($manifest.supportedPlugins).Count -ne 0) {
|
||||
throw "EveElectron must not claim plugin projection before the generic shell body exists"
|
||||
}
|
||||
|
||||
foreach ($pluginId in @("sai.vn", "norn.graph", "tex.math")) {
|
||||
$unsupported = @($manifest.unsupportedPlugins) | Where-Object { $_.pluginId -eq $pluginId } | Select-Object -First 1
|
||||
if (-not $unsupported) {
|
||||
throw "EveElectron manifest missing unsupported plugin declaration: $pluginId"
|
||||
}
|
||||
}
|
||||
|
||||
if ($manifest.commandTransport.schema -ne "gamecult.eve.command.v1") {
|
||||
throw "Unexpected EveElectron command schema: $($manifest.commandTransport.schema)"
|
||||
}
|
||||
if ($manifest.commandTransport.status -ne "pending-runtime-body") {
|
||||
throw "Unexpected EveElectron command transport status: $($manifest.commandTransport.status)"
|
||||
}
|
||||
|
||||
foreach ($stage in @("release", "test", "capture")) {
|
||||
$stageDocument = $manifest.lifecycle.$stage
|
||||
if ($null -eq $stageDocument) {
|
||||
throw "EveElectron lifecycle missing stage: $stage"
|
||||
}
|
||||
if ($stageDocument.ownerRepo -ne "EveElectron") {
|
||||
throw "EveElectron lifecycle stage $stage has unexpected owner: $($stageDocument.ownerRepo)"
|
||||
}
|
||||
if (-not $stageDocument.status) {
|
||||
throw "EveElectron lifecycle stage $stage missing status"
|
||||
}
|
||||
foreach ($evidencePath in @($stageDocument.evidencePaths)) {
|
||||
$absoluteEvidencePath = Join-Path $projectRoot $evidencePath
|
||||
if (-not (Test-Path -LiteralPath $absoluteEvidencePath)) {
|
||||
throw "EveElectron lifecycle stage $stage missing evidence path: $evidencePath"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$releaseContract = $manifest.lifecycle.release.releaseContract
|
||||
foreach ($field in @("ownerRepo", "packageName", "packageRoot", "versionSource", "tagPattern", "artifactKind", "publishProof")) {
|
||||
if (-not $releaseContract.$field) {
|
||||
throw "EveElectron release contract missing $field"
|
||||
}
|
||||
}
|
||||
foreach ($pathProperty in @("packageRoot", "versionSource")) {
|
||||
$relativePath = $releaseContract.$pathProperty
|
||||
$absolutePath = Join-Path $projectRoot $relativePath
|
||||
if (-not (Test-Path -LiteralPath $absolutePath)) {
|
||||
throw "EveElectron release contract $pathProperty does not exist: $relativePath"
|
||||
}
|
||||
}
|
||||
|
||||
$testContract = $manifest.lifecycle.test.testContract
|
||||
foreach ($field in @("ownerRepo", "runnerKind", "runnerScript", "consumerProject", "packageName", "testAssembly", "testPlatform", "resultsArtifact", "logArtifact", "manifestMutation")) {
|
||||
if (-not $testContract.$field) {
|
||||
throw "EveElectron test contract missing $field"
|
||||
}
|
||||
}
|
||||
foreach ($pathProperty in @("runnerScript", "consumerProject")) {
|
||||
$candidate = $testContract.$pathProperty
|
||||
$absolutePath = if ([System.IO.Path]::IsPathRooted($candidate)) {
|
||||
$candidate
|
||||
} else {
|
||||
Join-Path $projectRoot $candidate
|
||||
}
|
||||
if (-not (Test-Path -LiteralPath $absolutePath)) {
|
||||
throw "EveElectron test contract $pathProperty does not exist: $candidate"
|
||||
}
|
||||
}
|
||||
|
||||
$captureContract = $manifest.lifecycle.capture.captureContract
|
||||
foreach ($field in @("ownerRepo", "runtimeId", "captureKind", "artifactKind", "artifactPattern", "conformanceAttachment", "requiredProvider", "requiredSurface", "authority", "publishProof")) {
|
||||
if (-not $captureContract.$field) {
|
||||
throw "EveElectron capture contract missing $field"
|
||||
}
|
||||
}
|
||||
|
||||
& (Join-Path $projectRoot "scripts\run-eveelectron-split-handoff-smoke.ps1")
|
||||
|
||||
Write-Host "EveElectron lifecycle smoke passed: $absoluteManifestPath"
|
||||
27
scripts/run-eveelectron-provider-shell-smoke.ps1
Normal file
27
scripts/run-eveelectron-provider-shell-smoke.ps1
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
param(
|
||||
[string] $CapabilityManifestPath = "runtimes\incubating\eve-electron\eve-runtime-capability.json"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$projectRoot = Split-Path -Parent $PSScriptRoot
|
||||
$absoluteManifestPath = if ([System.IO.Path]::IsPathRooted($CapabilityManifestPath)) {
|
||||
$CapabilityManifestPath
|
||||
} else {
|
||||
Join-Path $projectRoot $CapabilityManifestPath
|
||||
}
|
||||
|
||||
if (-not (Test-Path -LiteralPath $absoluteManifestPath)) {
|
||||
throw "EveElectron runtime capability manifest not found: $absoluteManifestPath"
|
||||
}
|
||||
|
||||
$manifest = Get-Content -LiteralPath $absoluteManifestPath -Raw | ConvertFrom-Json
|
||||
|
||||
if ($manifest.runtimeId -ne "electron-shell") {
|
||||
throw "Unexpected EveElectron runtime id: $($manifest.runtimeId)"
|
||||
}
|
||||
if ($manifest.lifecycle.test.status -ne "pending-provider-advertisement-shell-smoke") {
|
||||
throw "EveElectron provider shell smoke should remain pending until a generic shell body exists: $($manifest.lifecycle.test.status)"
|
||||
}
|
||||
|
||||
throw "EveElectron provider shell smoke is a pending contract, not a runnable proof, until EveElectron owns the provider-agnostic Electron shell body."
|
||||
|
|
@ -20,6 +20,7 @@ try {
|
|||
& (Join-Path $PSScriptRoot "run-eveunity-split-handoff-smoke.ps1")
|
||||
& (Join-Path $PSScriptRoot "run-eveunity-scene-split-handoff-smoke.ps1")
|
||||
& (Join-Path $PSScriptRoot "run-eveelectron-split-handoff-smoke.ps1")
|
||||
& (Join-Path $PSScriptRoot "run-eveelectron-lifecycle-smoke.ps1")
|
||||
& (Join-Path $PSScriptRoot "run-conformance-consumer-smoke.ps1")
|
||||
& (Join-Path $PSScriptRoot "run-plugin-owner-conformance-consumer-smoke.ps1")
|
||||
& (Join-Path $PSScriptRoot "run-runtime-owner-conformance-consumer-smoke.ps1")
|
||||
|
|
|
|||
|
|
@ -37,12 +37,14 @@ node $consumerScript $consumerExport `
|
|||
--expect-runtime linux-flutter `
|
||||
--expect-runtime android-flutter `
|
||||
--expect-runtime unity-uitoolkit `
|
||||
--expect-runtime electron-shell `
|
||||
--expect-runtime direct2d `
|
||||
--expect-runtime-status web:active `
|
||||
--expect-runtime-status windows-flutter:active `
|
||||
--expect-runtime-status linux-flutter:active `
|
||||
--expect-runtime-status android-flutter:active `
|
||||
--expect-runtime-status unity-uitoolkit:active `
|
||||
--expect-runtime-status electron-shell:pending `
|
||||
--expect-runtime-status direct2d:external-adapter-spike `
|
||||
--expect-runtime-feature web:providerAdvertisements `
|
||||
--expect-runtime-feature windows-flutter:embeddedDocuments `
|
||||
|
|
@ -80,6 +82,7 @@ node $consumerScript $consumerExport `
|
|||
--expect-runtime-capture-status linux-flutter:ssh-golden `
|
||||
--expect-runtime-capture-status android-flutter:adb-png `
|
||||
--expect-runtime-capture-status unity-uitoolkit:semantic `
|
||||
--expect-runtime-capture-status electron-shell:missing `
|
||||
--expect-runtime-capture-status direct2d:missing `
|
||||
--expect-runtime-lifecycle-status unity-uitoolkit:release:incubating-upm-package `
|
||||
--expect-runtime-lifecycle-status unity-uitoolkit:test:batchmode-editmode-tests-and-consumer-build-smoke `
|
||||
|
|
@ -100,7 +103,18 @@ node $consumerScript $consumerExport `
|
|||
--expect-runtime-lifecycle-field "unity-uitoolkit:capture:captureContract.artifactKind:png" `
|
||||
--expect-runtime-lifecycle-field "unity-uitoolkit:capture:captureContract.conformanceAttachment:runtime.captureArtifacts[]" `
|
||||
--expect-runtime-lifecycle-field "unity-uitoolkit:capture:captureContract.requiredProvider:aetheria" `
|
||||
--expect-runtime-lifecycle-field "unity-uitoolkit:capture:captureContract.requiredSurface:aetheria.daemon.game"
|
||||
--expect-runtime-lifecycle-field "unity-uitoolkit:capture:captureContract.requiredSurface:aetheria.daemon.game" `
|
||||
--expect-runtime-lifecycle-status electron-shell:release:pending-electron-package `
|
||||
--expect-runtime-lifecycle-status electron-shell:test:pending-provider-advertisement-shell-smoke `
|
||||
--expect-runtime-lifecycle-status electron-shell:capture:pending-electron-window-capture `
|
||||
--expect-runtime-lifecycle-pending "electron-shell:release:Electron packaged app release" `
|
||||
--expect-runtime-lifecycle-pending "electron-shell:test:Electron provider-advertisement shell smoke" `
|
||||
--expect-runtime-lifecycle-pending "electron-shell:capture:Electron window capture artifact" `
|
||||
--expect-runtime-lifecycle-field "electron-shell:release:releaseContract.artifactKind:electron-app" `
|
||||
--expect-runtime-lifecycle-field "electron-shell:test:testContract.runnerKind:electron-provider-shell-smoke" `
|
||||
--expect-runtime-lifecycle-field "electron-shell:test:testContract.runnerScript:scripts/run-eveelectron-provider-shell-smoke.ps1" `
|
||||
--expect-runtime-lifecycle-field "electron-shell:capture:captureContract.captureKind:electron-window-png" `
|
||||
--expect-runtime-lifecycle-field "electron-shell:capture:captureContract.requiredSurface:aetheria.daemon.game"
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Runtime owner conformance consumer smoke failed with exit code $LASTEXITCODE"
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ try {
|
|||
--expect-split-target EveElectron `
|
||||
--expect-split-target-status EveElectron:incubating `
|
||||
--expect-split-target-proof "EveElectron:EveElectron split handoff is machine-readable" `
|
||||
--expect-split-target-proof "EveElectron:EveElectron lifecycle contract is machine-readable" `
|
||||
--expect-split-target-blocker "EveElectron:runtime:electron-shell:status:pending" `
|
||||
--expect-split-target-blocker-record EveElectron:runtime-status:electron-shell `
|
||||
--expect-split-target-blocker-record EveElectron:runtime-feature:electron-shell:providerAdvertisements `
|
||||
|
|
|
|||
Loading…
Reference in a new issue