Aus artifactDownloader.go + binDownload.js verifiziert: Schluessel ist <release>-<release>, Unterverzeichnis = Namensteil vor dem ersten Bindestrich (nsis-resources daher unter nsis\). Job 431 traf winCodeSign im Cache, scheiterte aber am nsis-Miss mit einfachem Namen. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
53 lines
2.8 KiB
PowerShell
53 lines
2.8 KiB
PowerShell
# Laedt die Build-Artefakte resumefaehig vor, die app-builder sonst selbst (ohne
|
|
# Resume) von GitHub laedt: das CDN (185.199.109.x) reisst im Lab-Gast groessere
|
|
# Transfers reproduzierbar mitten im Stream ab (Jobs 415/416/424, wsarecv-Reset).
|
|
# curl -C - setzt nach jedem Abriss am letzten Byte fort; einmal geladen liegen
|
|
# die Artefakte in den persistenten Caches (ELECTRON_CACHE/ELECTRON_BUILDER_CACHE)
|
|
# und werden nie erneut geholt.
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
function Get-Resumable([string]$Url, [string]$Out) {
|
|
foreach ($i in 1..8) {
|
|
& curl.exe -sSL -C - -o $Out $Url
|
|
if ($LASTEXITCODE -eq 0) { return }
|
|
Start-Sleep 5
|
|
}
|
|
throw "Download nach 8 Versuchen gescheitert: $Url"
|
|
}
|
|
|
|
# --- 1. Electron-Binary -> ELECTRON_CACHE ------------------------------------
|
|
$pkg = Join-Path $PSScriptRoot '..\package.json'
|
|
$ev = (& node -p "require(process.argv[1]).devDependencies.electron" $pkg) -replace '[\^~]', ''
|
|
New-Item -ItemType Directory -Force $env:ELECTRON_CACHE | Out-Null
|
|
$zip = Join-Path $env:ELECTRON_CACHE "electron-v$ev-win32-x64.zip"
|
|
if (-not (Test-Path $zip)) {
|
|
Get-Resumable "https://github.com/electron/electron/releases/download/v$ev/electron-v$ev-win32-x64.zip" "$zip.part"
|
|
Move-Item -Force "$zip.part" $zip
|
|
}
|
|
|
|
# --- 2. electron-builder-Werkzeuge -> ELECTRON_BUILDER_CACHE -----------------
|
|
# Zielstruktur laut app-builder-Quellcode (artifactDownloader.go) + electron-builder
|
|
# 26.9.1 (binDownload.js): der Cache-Schluessel ist "<release>-<dateiname-ohne-ext>",
|
|
# also GEDOPPELT (z.B. nsis-3.0.4.1-nsis-3.0.4.1), und liegt unter dem Teil des
|
|
# Namens VOR dem ersten Bindestrich als Unterverzeichnis - nsis-resources landet
|
|
# deshalb ebenfalls unter nsis\. Job 431 bewies den Miss mit einfachem Namen.
|
|
$sevenZa = Join-Path $PSScriptRoot '..\..\..\node_modules\7zip-bin\win\x64\7za.exe'
|
|
function Get-EbArtifact([string]$Release, [string]$SubDir) {
|
|
$dest = Join-Path $env:ELECTRON_BUILDER_CACHE (Join-Path $SubDir "$Release-$Release")
|
|
if (Test-Path $dest) { return }
|
|
$tmp = Join-Path $env:TEMP "$Release.7z"
|
|
Get-Resumable "https://github.com/electron-userland/electron-builder-binaries/releases/download/$Release/$Release.7z" $tmp
|
|
New-Item -ItemType Directory -Force $dest | Out-Null
|
|
& $sevenZa x -y "-o$dest" $tmp | Out-Null
|
|
if ($LASTEXITCODE -ne 0) { Remove-Item -Recurse -Force $dest; throw "Entpacken gescheitert: $tmp" }
|
|
}
|
|
|
|
# Versionen passend zu electron-builder 26.9.1 (winCodeSign aus dem Job-424-Trace,
|
|
# nsis/nsis-resources samt Checksummen aus nsisUtil.js). Bei einem kuenftigen
|
|
# Mismatch laedt app-builder selbst und der Fehler nennt die richtige Version.
|
|
Get-EbArtifact 'winCodeSign-2.6.0' 'winCodeSign'
|
|
Get-EbArtifact 'nsis-3.0.4.1' 'nsis'
|
|
Get-EbArtifact 'nsis-resources-3.4.1' 'nsis'
|
|
|
|
Write-Output "prefetch ok: electron v$ev + winCodeSign/nsis in den Caches"
|