Files
PerishFire 8f6cdaaba1 Harden release-beta-s self-hosted beta lane (#3641)
* Fix Windows smoke launcher payload layout

* Harden release-beta-s runner probe

* Use cmd shell for release-beta-s probe

* Add win beta build script for self-hosted lane

* Keep release-beta-s checkout lightweight

* Use explicit local beta version for release-beta-s

* Install dependencies in beta build script

* Repair Electron dist before Windows beta build

* Add release-beta-s timings and diagnostics

* Polish release-beta-s observability guardrails

* Trace tools-pack cache materialization

* Reuse materialized workspace build cache

* Trace Windows packaging segments

* Trace Windows archive process details

* Reuse installer unpacked materialization

* Preserve reusable Windows unpacked projection

* Add fast smoke telemetry for self-hosted beta

* Cache Windows archive outputs for beta lane

* Tighten fast Windows smoke lane

* Scope Windows beta artifact reporting by target

* Clean stale Windows target artifacts

* Wire Windows Authenticode signing

* Expose self-hosted beta validation modes

* Add core Windows smoke profile

* Decouple core smoke from updater fixture version

* Trace Windows smoke lifecycle steps

* Skip unpacked materialization on NSIS cache hit

* Add Nexu S3 beta publisher

* Harden self-hosted Windows beta lane

* Use Windows PowerShell for publish probe

* Run publish probe via repo script

* Require explicit self-hosted S3 public origin

* Run real installer acceptance for external feeds

* Skip ready-prompt checks for external feeds

* Relax optional self-hosted update inputs

* Tolerate BOM in self-hosted publish probe

* Converge self-hosted beta metadata and signing flow

* Run self-hosted beta metadata prep on the runner lane

* Use Windows PowerShell for self-hosted beta metadata checks

* Bypass execution policy in self-hosted beta metadata checks

* Split self-hosted beta metadata publish

* Suppress mc output in beta publish helpers

* Split Windows NSIS payload cache layers

* Require fresh tool dist metadata

* Preserve Windows overlay payload paths

* Default beta-s gate to core

* Optimize win beta packaging reuse

* simplify windows full smoke lifecycle

* preserve onboarding state after windows upgrade smoke

* fix windows tools-pack test portability

* recover stale tools-pack locks

* Allow auto signing fallback for beta builds

* Add self-hosted beta mac arm64 lane

* Quote self-hosted signing choices

* Run self-hosted beta metadata on mac lane

* Use shallow metadata checkout on self-hosted beta

* Use sparse beta metadata checkout

* Make mac release profile bash-compatible

* Allow file sparse metadata checkout

* Isolate self-hosted metadata checkout

* Clear sparse skip-worktree before mac build

* Isolate self-hosted mac build checkout

* Run self-hosted beta publish without aws cli

* Use unsigned beta prefix for mixed platform publish

* Sparse checkout self-hosted beta publish

* Publish mac beta platform before metadata

* Pass mac publish release profile

* Probe mac signing keychain import

* Expand mac signing preflight variants

* Use sudo keychain helper for self-hosted mac signing

* Route self-hosted mac codesign through sudo wrapper

* Normalize mac signing identity name

* Harden self-hosted mac notarization

* Optimize self-hosted mac release cache

* Fix mac signing helper cleanup

* Retry transient mac notarization uploads

* Keep mac notarization fail-fast

* Reduce mac symlink diagnostics noise

* Normalize self-hosted beta platform inputs

* chore: bump beta base version to 0.9.1

* chore: tune release tools-pack cache retention

* test: add temporary cache validation marker

* chore: key windows nsis base payload by content

* Revert "test: add temporary cache validation marker"

This reverts commit e8487bfd3e.

* chore: probe windows nsis payload cache before materializing

* chore: align self-hosted beta smoke modes

* chore: skip mac smoke report upload when disabled

* chore: default self-hosted beta to publish both platforms

* chore: make beta signing modes explicit

* Add release report artifacts and metatool metadata

* Fix Windows release report zip publishing

* Remove artifact handoff from release beta self-hosted lane

* Fix release beta merge follow-ups

* Fix release beta install regressions

* Restore web build dependencies

* Route Windows beta downloads through mirrors

* Use PowerShell 7 for Windows beta lane

* Fix release beta preflight gates

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Fix Windows beta smoke update reuse

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Fix release beta review follow-ups

* Refresh Nix pnpm dependency hashes

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Fix Windows signtool fallback resolution

* Reject stale beta platform manifests

* Validate beta platform manifest run identity

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Validate beta manifest commit identity

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Allow beta metadata publish reruns

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Build tools-pack fully in beta Windows bootstrap

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Emit r2 metadata for Windows beta publish

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Stabilize beta publish browser test

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Stabilize Windows beta metadata smoke test

Generated-By: looper 0.9.4 (runner=fixer, agent=codex)

* Restore multi-platform Vela CLI package

* Refresh Nix pnpm dependency hashes

Generated-By: looper 0.9.5 (runner=fixer, agent=codex)

---------

Co-authored-by: Looper <looper@noreply.github.com>
2026-06-05 03:00:55 +00:00

171 lines
5.7 KiB
PowerShell

$ErrorActionPreference = "Stop"
function Format-TableCell {
param([object]$Value)
if ($null -eq $Value) {
return ""
}
return ([string]$Value).Replace("|", "\|").Replace("`r", " ").Replace("`n", " ")
}
function Format-CodeCell {
param([object]$Value)
$text = (Format-TableCell $Value).Replace('`', "'")
return ('`{0}`' -f $text)
}
function Add-SummaryLine {
param([string]$Line = "")
if ([string]::IsNullOrWhiteSpace($summaryPath)) {
return
}
$Line | Add-Content -Path $summaryPath
}
function Invoke-ReportNode {
param([string[]]$Arguments)
$fnm = "C:\Users\runner\.cargo\bin\fnm.exe"
if (Test-Path -LiteralPath $fnm) {
& $fnm exec --using=24 -- node @Arguments
} else {
& node @Arguments
}
if ($LASTEXITCODE -ne 0) {
throw "node report command failed with exit code ${LASTEXITCODE}: $($Arguments -join ' ')"
}
}
function Write-ReportZip {
param(
[string]$ReportRoot,
[string]$ZipPath
)
New-Item -ItemType Directory -Force -Path $ReportRoot, (Split-Path -Parent $ZipPath) | Out-Null
Remove-Item -LiteralPath $ZipPath -Force -ErrorAction SilentlyContinue
$items = @(Get-ChildItem -LiteralPath $ReportRoot -Force | Select-Object -ExpandProperty FullName)
if ($items.Count -eq 0) {
throw "cannot create release report zip from empty directory: $ReportRoot"
}
Compress-Archive -LiteralPath $items -DestinationPath $ZipPath -CompressionLevel Optimal -Force
Write-Host "wrote release report zip: $ZipPath"
}
$summaryPath = $env:GITHUB_STEP_SUMMARY
$summaryTitle = if ([string]::IsNullOrWhiteSpace($env:SUMMARY_TITLE)) { "Windows tools-pack build" } else { $env:SUMMARY_TITLE }
$buildJsonPath = if ([string]::IsNullOrWhiteSpace($env:BUILD_JSON_PATH)) {
Join-Path $env:RUNNER_TEMP "windows-tools-pack-build.json"
} else {
$env:BUILD_JSON_PATH
}
$indexPath = if ([string]::IsNullOrWhiteSpace($env:INDEX_PATH)) {
"C:\.tmp\runner\od-beta\win\index\index.json"
} else {
$env:INDEX_PATH
}
$reportRoot = if ([string]::IsNullOrWhiteSpace($env:REPORT_ROOT)) {
if (Test-Path -LiteralPath $indexPath) {
$index = Get-Content -Raw -Path $indexPath | ConvertFrom-Json
if (![string]::IsNullOrWhiteSpace([string]$index.reportDir)) {
[string]$index.reportDir
} else {
Join-Path $env:RUNNER_TEMP "release-report\win"
}
} else {
Join-Path $env:RUNNER_TEMP "release-report\win"
}
} else {
$env:REPORT_ROOT
}
$reportZipPath = if ([string]::IsNullOrWhiteSpace($env:REPORT_ZIP_PATH)) {
Join-Path (Split-Path -Parent $reportRoot) "win-report.zip"
} else {
$env:REPORT_ZIP_PATH
}
if (!(Test-Path $buildJsonPath)) {
Add-SummaryLine "### $summaryTitle"
Add-SummaryLine
Add-SummaryLine "Build JSON was not found at ``$buildJsonPath``."
} else {
$build = Get-Content -Raw -Path $buildJsonPath | ConvertFrom-Json
Add-SummaryLine "### $summaryTitle"
Add-SummaryLine
Add-SummaryLine "| Phase | Duration |"
Add-SummaryLine "| --- | ---: |"
foreach ($timing in $build.timings) {
$seconds = [math]::Round(([double]$timing.durationMs) / 1000, 1)
Add-SummaryLine ('| {0} | {1}s |' -f (Format-CodeCell $timing.phase), $seconds)
}
Add-SummaryLine
Add-SummaryLine "| Cache node | Status | Reason | Duration |"
Add-SummaryLine "| --- | --- | --- | ---: |"
foreach ($entry in $build.cacheReport.entries) {
$seconds = [math]::Round(([double]$entry.durationMs) / 1000, 1)
Add-SummaryLine ('| {0} | {1} | {2} | {3}s |' -f (Format-CodeCell $entry.nodeId), (Format-CodeCell $entry.status), (Format-TableCell $entry.reason), $seconds)
}
$cacheRoot = if ([string]::IsNullOrWhiteSpace($env:CACHE_ROOT)) {
Join-Path $env:RUNNER_TEMP "tools-pack-cache"
} else {
$env:CACHE_ROOT
}
$entryRoot = Join-Path $cacheRoot "entries"
if (Test-Path $entryRoot) {
$entries = Get-ChildItem -Path $entryRoot -Directory -Recurse |
Where-Object { Test-Path (Join-Path $_.FullName "manifest.json") } |
ForEach-Object {
$size = (Get-ChildItem -Path $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
$entrySize = if ($null -eq $size) { 0 } else { [int64]$size }
[pscustomobject]@{
Node = Split-Path (Split-Path $_.FullName -Parent) -Leaf
Size = $entrySize
}
} |
Group-Object Node |
ForEach-Object {
$nodeSize = ($_.Group | Measure-Object -Property Size -Sum).Sum
$totalSize = if ($null -eq $nodeSize) { 0 } else { [int64]$nodeSize }
[pscustomobject]@{
Node = $_.Name
Count = $_.Count
Size = $totalSize
}
} |
Sort-Object Size -Descending
Add-SummaryLine
Add-SummaryLine "| Saved cache node | Entries | Size |"
Add-SummaryLine "| --- | ---: | ---: |"
foreach ($entry in $entries) {
$mb = [math]::Round(([double]$entry.Size) / 1MB, 1)
Add-SummaryLine ('| {0} | {1} | {2} MB |' -f (Format-CodeCell $entry.Node), $entry.Count, $mb)
}
}
}
$previousReportPlatform = $env:REPORT_PLATFORM
$previousReportRoot = $env:REPORT_ROOT
$previousReportZipPath = $env:REPORT_ZIP_PATH
$previousBuildJsonPath = $env:BUILD_JSON_PATH
$previousIndexPath = $env:INDEX_PATH
try {
$env:REPORT_PLATFORM = "win"
$env:REPORT_ROOT = $reportRoot
$env:REPORT_ZIP_PATH = $reportZipPath
$env:BUILD_JSON_PATH = $buildJsonPath
$env:INDEX_PATH = $indexPath
Invoke-ReportNode @("--experimental-strip-types", (Join-Path $PSScriptRoot "report-json.ts"))
} finally {
$env:REPORT_PLATFORM = $previousReportPlatform
$env:REPORT_ROOT = $previousReportRoot
$env:REPORT_ZIP_PATH = $previousReportZipPath
$env:BUILD_JSON_PATH = $previousBuildJsonPath
$env:INDEX_PATH = $previousIndexPath
}
Write-ReportZip -ReportRoot $reportRoot -ZipPath $reportZipPath