$ErrorActionPreference = "Stop" $root = Split-Path -Parent $MyInvocation.MyCommand.Path $releaseRoot = Join-Path $root "release" $reportPath = Join-Path $releaseRoot "final_release_report.json" New-Item -ItemType Directory -Force -Path $releaseRoot | Out-Null & (Join-Path $root "package_domain_release.ps1") $latestJsonPath = Join-Path $releaseRoot "latest_release.json" if (-not (Test-Path -LiteralPath $latestJsonPath)) { throw "latest_release.json not found" } $latest = Get-Content -LiteralPath $latestJsonPath -Raw | ConvertFrom-Json $archivePath = if ($latest.archive_path) { $latest.archive_path } else { $latest.zip_path } $verifyOutput = & (Join-Path $root "verify_domain_release.ps1") ` -ZipPath $archivePath ` -HashPath $latest.sha256_path $verify = $verifyOutput | ConvertFrom-Json $verifyOk = [bool]$verify.ok $smokeOk = [bool]$latest.smoke_test_ok $blockedReasons = @() if (-not $verifyOk) { $blockedReasons += "verify_failed" } if (-not $smokeOk) { $blockedReasons += "smoke_test_failed_or_skipped" } $report = [ordered]@{ generated_at = (Get-Date).ToString("s") ok = ($verifyOk -and $smokeOk) latest_release = $latest verify = $verify release_gate = [ordered]@{ verify_ok = $verifyOk smoke_test_ok = $smokeOk blocked_reasons = $blockedReasons decision = if ($blockedReasons.Count -eq 0) { "ready" } else { "blocked" } } } $report | ConvertTo-Json -Depth 8 | Set-Content -LiteralPath $reportPath -Encoding UTF8 Write-Host "final release prepared" Write-Host "report: $reportPath" Write-Host "ok: $($report.ok)"