Files
wehub-resource-sync 070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:00:47 +08:00

80 lines
2.5 KiB
PowerShell

param(
[string]$MetadataUrl = ""
)
$ErrorActionPreference = "Stop"
function Resolve-MetadataUrl {
if (-not [string]::IsNullOrWhiteSpace($MetadataUrl)) {
return $MetadataUrl
}
if (-not [string]::IsNullOrWhiteSpace($env:PUBLISHED_METADATA_URL)) {
return $env:PUBLISHED_METADATA_URL
}
throw "published metadata URL is required"
}
function Get-RequiredWebResponse([string]$Url) {
if ([string]::IsNullOrWhiteSpace($Url)) {
throw "missing required public URL"
}
return Invoke-WebRequest -UseBasicParsing -Uri $Url -Method Get
}
function Parse-JsonBody([string]$Body) {
if ([string]::IsNullOrWhiteSpace($Body)) {
throw "response body is empty"
}
$objectStart = $Body.IndexOf('{')
$arrayStart = $Body.IndexOf('[')
if ($objectStart -lt 0 -and $arrayStart -lt 0) {
throw "response body does not look like JSON"
}
if ($objectStart -ge 0 -and $arrayStart -ge 0) {
$start = [Math]::Min($objectStart, $arrayStart)
} elseif ($objectStart -ge 0) {
$start = $objectStart
} else {
$start = $arrayStart
}
return ($Body.Substring($start) | ConvertFrom-Json)
}
function Assert-PublicRangeReadable([string]$Url) {
if ([string]::IsNullOrWhiteSpace($Url)) {
throw "missing installer URL for public-read probe"
}
& curl.exe --ssl-no-revoke --fail --silent --show-error --location --range 0-0 --output NUL $Url
if ($LASTEXITCODE -ne 0) {
throw "public artifact probe failed for $Url"
}
}
$resolvedMetadataUrl = Resolve-MetadataUrl
$metadataResponse = Get-RequiredWebResponse $resolvedMetadataUrl
$metadata = Parse-JsonBody $metadataResponse.Content
$win = $metadata.platforms.win
if ($null -eq $win) {
throw "published metadata is missing platforms.win"
}
$metadataLinks = if ($null -ne $metadata.storage) { $metadata.storage } else { $metadata.r2 }
$platformLinks = if ($null -ne $win.storage) { $win.storage } else { $win.r2 }
$smallUrls = @(
[string]$resolvedMetadataUrl,
[string]$metadataLinks.versionMetadataUrl,
[string]$win.feed.latestUrl,
[string]$platformLinks.latestManifestUrl,
[string]$platformLinks.versionManifestUrl,
[string]$win.artifacts.installer.sha256Url
) | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | Select-Object -Unique
foreach ($url in $smallUrls) {
$response = Get-RequiredWebResponse $url
Write-Host "public ok: $url ($($response.StatusCode))"
}
Assert-PublicRangeReadable ([string]$win.artifacts.installer.url)
Write-Host "public ok: $($win.artifacts.installer.url) (range GET)"