Make Eve onboarding prove packaged authority routes
This commit is contained in:
parent
6c848bd6c0
commit
6835ea4c10
11 changed files with 151 additions and 49 deletions
|
|
@ -1,6 +1,7 @@
|
|||
param(
|
||||
[string] $Configuration = "Release",
|
||||
[string] $OutputDirectory = "artifacts\unity\org.gamecult.cultlib",
|
||||
[string] $NuGetConfig = "",
|
||||
[switch] $UpdateTemplate
|
||||
)
|
||||
|
||||
|
|
@ -30,11 +31,19 @@ if (Test-Path -LiteralPath $outputRoot) {
|
|||
Remove-Item -LiteralPath $outputRoot -Recurse -Force
|
||||
}
|
||||
|
||||
dotnet publish $projectPath -c $Configuration -o $publishRoot
|
||||
$publishArguments = @("publish", $projectPath, "-c", $Configuration, "-o", $publishRoot)
|
||||
if (-not [string]::IsNullOrWhiteSpace($NuGetConfig)) {
|
||||
$publishArguments += "-p:RestoreConfigFile=$([IO.Path]::GetFullPath($NuGetConfig))"
|
||||
}
|
||||
& dotnet @publishArguments
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "CultLib publish failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
dotnet publish $quicProjectPath -c $Configuration -o $quicPublishRoot
|
||||
$quicPublishArguments = @("publish", $quicProjectPath, "-c", $Configuration, "-o", $quicPublishRoot)
|
||||
if (-not [string]::IsNullOrWhiteSpace($NuGetConfig)) {
|
||||
$quicPublishArguments += "-p:RestoreConfigFile=$([IO.Path]::GetFullPath($NuGetConfig))"
|
||||
}
|
||||
& dotnet @quicPublishArguments
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "CultLib native QUIC managed publish failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
param(
|
||||
[string] $Configuration = "Release",
|
||||
[string] $OutputDirectory = "artifacts\nuget",
|
||||
[string] $PackageVersion = "",
|
||||
[switch] $SkipConsumerSmoke
|
||||
)
|
||||
|
||||
|
|
@ -18,6 +19,7 @@ $projects = @(
|
|||
"src\GameCult.Caching.MessagePack.Analyzers\GameCult.Caching.MessagePack.Analyzers.csproj",
|
||||
"src\GameCult.Caching.MessagePack\GameCult.Caching.MessagePack.csproj",
|
||||
"src\GameCult.Networking\GameCult.Networking.csproj",
|
||||
"src\GameCult.Networking.WebSockets\GameCult.Networking.WebSockets.csproj",
|
||||
"src\GameCult.Mesh\GameCult.Mesh.csproj"
|
||||
)
|
||||
|
||||
|
|
@ -27,8 +29,14 @@ if (Test-Path -LiteralPath $outputRoot) {
|
|||
New-Item -ItemType Directory -Force -Path $outputRoot | Out-Null
|
||||
|
||||
foreach ($project in $projects) {
|
||||
dotnet pack (Join-Path $repoRoot $project) -c $Configuration -o $outputRoot `
|
||||
--nologo --verbosity quiet -p:NoWarn=1591%3BCS8632
|
||||
$packArguments = @(
|
||||
"pack", (Join-Path $repoRoot $project), "-c", $Configuration, "-o", $outputRoot,
|
||||
"--nologo", "--verbosity", "quiet", "-p:NoWarn=1591%3BCS8632"
|
||||
)
|
||||
if (-not [string]::IsNullOrWhiteSpace($PackageVersion)) {
|
||||
$packArguments += "-p:Version=$PackageVersion"
|
||||
}
|
||||
& dotnet @packArguments
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "NuGet pack failed for $project with exit code $LASTEXITCODE"
|
||||
}
|
||||
|
|
@ -48,6 +56,7 @@ $expectedPackages = @(
|
|||
"GameCult.Caching.MessagePack.Analyzers.$version.nupkg",
|
||||
"GameCult.Caching.MessagePack.$version.nupkg",
|
||||
"GameCult.Networking.$version.nupkg",
|
||||
"GameCult.Networking.WebSockets.$version.nupkg",
|
||||
"GameCult.Mesh.$version.nupkg"
|
||||
)
|
||||
foreach ($package in $expectedPackages) {
|
||||
|
|
|
|||
|
|
@ -14,6 +14,14 @@ import { chromium } from "playwright-core";
|
|||
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
||||
const eveFlag = process.argv.indexOf("--eve-root");
|
||||
const eveRoot = resolve(eveFlag >= 0 ? process.argv[eveFlag + 1] : join(repoRoot, "..", "Eve"));
|
||||
const packageFeedFlag = process.argv.indexOf("--package-feed");
|
||||
const packageFeed = packageFeedFlag >= 0 ? resolve(process.argv[packageFeedFlag + 1]) : undefined;
|
||||
const cultLibVersionFlag = process.argv.indexOf("--cultlib-package-version");
|
||||
const cultLibPackageVersion = cultLibVersionFlag >= 0 ? process.argv[cultLibVersionFlag + 1] : undefined;
|
||||
const eveSurfaceVersionFlag = process.argv.indexOf("--eve-surface-package-version");
|
||||
const eveSurfacePackageVersion = eveSurfaceVersionFlag >= 0 ? process.argv[eveSurfaceVersionFlag + 1] : undefined;
|
||||
const nugetConfigFlag = process.argv.indexOf("--nuget-config");
|
||||
const nugetConfig = nugetConfigFlag >= 0 ? resolve(process.argv[nugetConfigFlag + 1]) : undefined;
|
||||
const sampleRoot = join(repoRoot, "samples", "eve-browser-network");
|
||||
const workRoot = await mkdtemp(join(tmpdir(), "cultmesh-browser-network-"));
|
||||
const statePath = join(workRoot, "counter.cc");
|
||||
|
|
@ -51,15 +59,30 @@ try {
|
|||
const bundle = await readFile(bundlePath, "utf8");
|
||||
assert.doesNotMatch(bundle, /(?:from\s*["']node:|require\(["']node:)/u, "browser bundle contains a Node builtin import");
|
||||
|
||||
await run("dotnet", [
|
||||
const dotnetBuildArguments = [
|
||||
"build",
|
||||
join(sampleRoot, "EveBrowserNetworkSample.csproj"),
|
||||
"-m:1",
|
||||
"--verbosity", "quiet",
|
||||
"-p:NoWarn=1591%3BCS8632",
|
||||
`-p:EveRoot=${eveRoot}`,
|
||||
`-p:CultLibRoot=${repoRoot}`,
|
||||
]);
|
||||
"-p:NuGetAudit=false",
|
||||
"-p:RestoreIgnoreFailedSources=true",
|
||||
];
|
||||
if (nugetConfig) dotnetBuildArguments.push(`-p:RestoreConfigFile=${nugetConfig}`);
|
||||
if (packageFeed) {
|
||||
if (!cultLibPackageVersion || !eveSurfacePackageVersion) {
|
||||
throw new Error("Package artifact builds require both CultLib and Eve surface package versions.");
|
||||
}
|
||||
dotnetBuildArguments.push(
|
||||
"-p:UsePackageArtifacts=true",
|
||||
`-p:PackageFeed=${packageFeed}`,
|
||||
`-p:CultLibPackageVersion=${cultLibPackageVersion}`,
|
||||
`-p:EveSurfacePackageVersion=${eveSurfacePackageVersion}`,
|
||||
);
|
||||
} else {
|
||||
dotnetBuildArguments.push(`-p:EveRoot=${eveRoot}`, `-p:CultLibRoot=${repoRoot}`);
|
||||
}
|
||||
await run("dotnet", dotnetBuildArguments);
|
||||
const providerPort = await freePort();
|
||||
const decoyProviderPort = await freePort();
|
||||
const replacementProviderPort = await freePort();
|
||||
|
|
|
|||
|
|
@ -25,43 +25,62 @@ if ($cultMeshClientSource -match 'ConnectAsync\s*\(\s*string\s+(endpointId|verse
|
|||
$cultMeshClientSource -match 'Lease(Document|Collection)Async[^\(]*\(\s*string\s+(endpointId|verseId)') {
|
||||
throw "CultMeshClient must not expose an ambiguous one-string session identity."
|
||||
}
|
||||
$discoverySource = Get-Content -LiteralPath (Join-Path $cultLibRoot "src\GameCult.Mesh\CultMeshDiscoveryService.cs") -Raw
|
||||
if ($discoverySource -notmatch 'AuthorityRuntimeIds\.Contains\(query\.AuthorityRuntimeId') {
|
||||
throw "CultMesh discovery must prove that a selected Verse route advertises the requested authority runtime."
|
||||
}
|
||||
|
||||
$dotnetPackageRoot = Join-Path ([IO.Path]::GetTempPath()) `
|
||||
("eve-getting-started-nuget-" + [guid]::NewGuid().ToString("N"))
|
||||
$sourceRevision = (& git -C $cultLibRoot rev-parse --short=12 HEAD).Trim()
|
||||
if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($sourceRevision)) {
|
||||
throw "Could not determine the CultLib source revision for local package identity."
|
||||
}
|
||||
$verificationNonce = [guid]::NewGuid().ToString("N").Substring(0, 8)
|
||||
$cultLibLocalVersion = "1.0.33-local.$sourceRevision.$verificationNonce"
|
||||
$surfaceLocalVersion = "0.3.2-local.$sourceRevision.$verificationNonce"
|
||||
try {
|
||||
& (Join-Path $EveRoot "scripts\pack-dotnet-surface.ps1") `
|
||||
-CultLibRoot $cultLibRoot `
|
||||
-OutputDirectory $dotnetPackageRoot
|
||||
-OutputDirectory $dotnetPackageRoot `
|
||||
-CultLibPackageVersion $cultLibLocalVersion `
|
||||
-SurfacePackageVersion $surfaceLocalVersion
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "The clean .NET package-consumer checkpoint failed."
|
||||
}
|
||||
|
||||
$cultLibPackage = Get-ChildItem -LiteralPath $dotnetPackageRoot -Filter "GameCult.Mesh.*.nupkg" |
|
||||
Where-Object { $_.Name -notlike "*.snupkg" } |
|
||||
Select-Object -First 1
|
||||
$surfacePackage = Get-ChildItem -LiteralPath $dotnetPackageRoot -Filter "GameCult.Eve.Surface.*.nupkg" |
|
||||
Where-Object { $_.Name -notlike "*.snupkg" } |
|
||||
Select-Object -First 1
|
||||
if (-not $cultLibPackage -or -not $surfacePackage) {
|
||||
throw "The local package feed is missing CultMesh or Eve surface artifacts."
|
||||
}
|
||||
$cultLibVersion = [regex]::Match($cultLibPackage.Name, '^GameCult\.Mesh\.(.+)\.nupkg$').Groups[1].Value
|
||||
$surfaceVersion = [regex]::Match($surfacePackage.Name, '^GameCult\.Eve\.Surface\.(.+)\.nupkg$').Groups[1].Value
|
||||
|
||||
& (Join-Path $PSScriptRoot "verify-eve-two-runtime-sample.ps1") `
|
||||
-EveRoot $EveRoot `
|
||||
-SkipDependencyInstall:$SkipDependencyInstall
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "The clean package-consumer checkpoint failed."
|
||||
}
|
||||
|
||||
$nodeCommand = Get-Command node -ErrorAction Stop
|
||||
$playwrightCli = Join-Path $cultLibRoot "node_modules\playwright-core\cli.js"
|
||||
if (-not (Test-Path -LiteralPath $playwrightCli -PathType Leaf)) {
|
||||
throw "playwright-core is missing after dependency setup: $playwrightCli"
|
||||
}
|
||||
|
||||
& $nodeCommand.Source (Join-Path $PSScriptRoot "verify-eve-browser-network.mjs") `
|
||||
--eve-root $EveRoot `
|
||||
--package-feed $dotnetPackageRoot `
|
||||
--cultlib-package-version $cultLibVersion `
|
||||
--eve-surface-package-version $surfaceVersion
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "The real browser/C# network checkpoint failed."
|
||||
}
|
||||
|
||||
Write-Host "Eve getting-started verification passed: clean .NET and TypeScript artifacts, DOM and headless convergence, real Chromium and C# clients, Odin discovery, authority-bound routes, receipts, persistence, and route replacement."
|
||||
} finally {
|
||||
if (Test-Path -LiteralPath $dotnetPackageRoot) {
|
||||
Remove-Item -LiteralPath $dotnetPackageRoot -Recurse -Force
|
||||
}
|
||||
}
|
||||
|
||||
& (Join-Path $PSScriptRoot "verify-eve-two-runtime-sample.ps1") `
|
||||
-EveRoot $EveRoot `
|
||||
-SkipDependencyInstall:$SkipDependencyInstall
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "The clean package-consumer checkpoint failed."
|
||||
}
|
||||
|
||||
$nodeCommand = Get-Command node -ErrorAction Stop
|
||||
$playwrightCli = Join-Path $cultLibRoot "node_modules\playwright-core\cli.js"
|
||||
if (-not (Test-Path -LiteralPath $playwrightCli -PathType Leaf)) {
|
||||
throw "playwright-core is missing after dependency setup: $playwrightCli"
|
||||
}
|
||||
|
||||
& $nodeCommand.Source (Join-Path $PSScriptRoot "verify-eve-browser-network.mjs") `
|
||||
--eve-root $EveRoot
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "The real browser/C# network checkpoint failed."
|
||||
}
|
||||
|
||||
Write-Host "Eve getting-started verification passed: clean .NET and TypeScript artifacts, DOM and headless convergence, real Chromium and C# clients, Odin discovery, receipts, persistence, and route replacement."
|
||||
|
|
|
|||
Loading…
Reference in a new issue