diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cd2cfae25..2fd2b6e2b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -169,16 +169,13 @@ desktop_windows: variables: SQLCIPHER_BUNDLED: "1" ELECTRON_CACHE: C:\electron-cache + ELECTRON_BUILDER_CACHE: C:\eb-cache script: - pnpm install --frozen-lockfile --filter element-desktop - # Electron-Binary vorab resumefaehig laden: der GitHub-CDN-Download riss zweimal - # mitten im Transfer ab (Jobs 415/416) und app-builder kann nicht fortsetzen. - # curl -C - nimmt nach jedem Abriss am letzten Byte wieder auf; das fertige Zip - # landet im persistenten ELECTRON_CACHE und wird nie erneut geladen. - - $ev = (& node -p "require('./apps/desktop/package.json').devDependencies.electron") -replace '[\^~]','' - - New-Item -ItemType Directory -Force $env:ELECTRON_CACHE | Out-Null - - $zip = "$env:ELECTRON_CACHE\electron-v$ev-win32-x64.zip" - - if (-not (Test-Path $zip)) { $ok=$false; foreach ($i in 1..8) { & curl.exe -sSL -C - -o "$zip.part" "https://github.com/electron/electron/releases/download/v$ev/electron-v$ev-win32-x64.zip"; if ($LASTEXITCODE -eq 0) { Move-Item -Force "$zip.part" $zip; $ok=$true; break }; Start-Sleep 5 }; if (-not $ok) { throw "electron-Download nach 8 Versuchen gescheitert" } } + # GitHub-CDN-Downloads (Electron-Binary, winCodeSign, NSIS) reissen im Gast + # reproduzierbar ab und app-builder kann nicht fortsetzen (Jobs 415/416/424) - + # das Skript laedt alles resumefaehig in die persistenten Caches vor. + - powershell -ExecutionPolicy Bypass -File apps\desktop\axion1337\prefetch-buildcache.ps1 - Copy-Item -Recurse apps/web/webapp apps/desktop/webapp - Copy-Item apps/desktop/axion1337/config.json apps/desktop/webapp/config.json -Force - cd apps/desktop diff --git a/apps/desktop/axion1337/prefetch-buildcache.ps1 b/apps/desktop/axion1337/prefetch-buildcache.ps1 new file mode 100644 index 000000000..827f6e940 --- /dev/null +++ b/apps/desktop/axion1337/prefetch-buildcache.ps1 @@ -0,0 +1,48 @@ +# 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 wie app-builder sie erwartet: \\-\ +$sevenZa = Join-Path $PSScriptRoot '..\..\..\node_modules\7zip-bin\win\x64\7za.exe' +function Get-EbArtifact([string]$Name, [string]$Version, [string]$SubDir) { + $dest = Join-Path $env:ELECTRON_BUILDER_CACHE (Join-Path $SubDir "$Name-$Version") + if (Test-Path $dest) { return } + $tmp = Join-Path $env:TEMP "$Name-$Version.7z" + Get-Resumable "https://github.com/electron-userland/electron-builder-binaries/releases/download/$Name-$Version/$Name-$Version.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; +# die nsis-Versionen sind seit Jahren stabil). Bei einem kuenftigen Mismatch laedt +# app-builder die richtige Version selbst und der Fehler nennt sie im Trace. +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"