Портативную упаковку — отдельным шагом (build.py python3 = Store-заглушка)

build.py зовёт `python3 generate.py`, на GUSIK-PC это Store-заглушка ->
падал, хотя клиент уже собран. Теперь build.py --skip-portable-pack,
установщик пакуем реальным python -> dist/rustdesk-<tag>-install.exe.
Стоковый flutter 3.24.5 engine собрал Windows без кастомной подмены.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 15:34:22 +03:00
parent a09ae6b913
commit bd7d1f6837
2 changed files with 32 additions and 13 deletions
+11 -4
View File
@@ -59,10 +59,17 @@ RUSTC_BOOTSTRAP=1 нужен, т.к. cargo-expand требует nightly-фич,
`generated_bridge.dart`/`.freezed.dart` нет → flutter build падает `EventToUI_Event/RustdeskImpl isn't a type`. `generated_bridge.dart`/`.freezed.dart` нет → flutter build падает `EventToUI_Event/RustdeskImpl isn't a type`.
Поэтому проверять надо dart-файлы, не только rust. Поэтому проверять надо dart-файлы, не только rust.
### Открытый вопрос (решить при первой сборке) ### Грабля: portable-pack и python3-заглушка (GUSIK-PC)
Апстрим для Windows-x64 подменяет flutter-engine кастомным `windows-x64-release.zip` (ради Win7). `build.py --flutter` в конце зовёт `python3 ./generate.py` для сборки портативного установщика. На
Для таргета Win10/11, вероятно, можно оставить стоковый engine 3.24.5 и пропустить подмену — проверить, GUSIK-PC `python3` = Microsoft Store-заглушка (реальный только `python` = 3.12) → шаг падает
не падает ли `flutter build windows` без неё. («Python Error occurred when executing generate.py»), хотя **клиент к этому моменту уже собран** в
`flutter/build/windows/x64/runner/Release/`. Поэтому `build-windows.ps1` зовёт `build.py --skip-portable-pack`,
а установщик пакует отдельным шагом реальным `python generate.py``target/release/rustdesk-portable-packer.exe`
→ копия в `dist/rustdesk-<tag>-install.exe`.
### Разрешённый вопрос: flutter-engine
Стоковый Flutter 3.24.5 x64 engine отработал — `flutter build windows` собрался БЕЗ кастомного
`windows-x64-release.zip` (тот нужен апстриму только для Win7). Для Win10/11 подмена не требуется.
## Android toolchain (VM 118, позже) ## Android toolchain (VM 118, позже)
Flutter 3.24.5, NDK r28c, cargo-ndk 3.1.2, Rust android-таргеты, vcpkg android-триплеты Flutter 3.24.5, NDK r28c, cargo-ndk 3.1.2, Rust android-таргеты, vcpkg android-триплеты
+21 -9
View File
@@ -127,18 +127,30 @@ Push-Location $src
if ($LASTEXITCODE) { Pop-Location; throw "vcpkg install упал ($LASTEXITCODE)" } if ($LASTEXITCODE) { Pop-Location; throw "vcpkg install упал ($LASTEXITCODE)" }
Pop-Location Pop-Location
# --- сборка --- # --- сборка клиента (без портативной упаковки: её build.py делает через `python3`,
Write-Host "python build.py --flutter..." -ForegroundColor Cyan # а на GUSIK-PC python3 = Store-заглушка -> падает; пакуем отдельно реальным python) ---
Write-Host "python build.py --flutter --skip-portable-pack..." -ForegroundColor Cyan
Push-Location $src Push-Location $src
python build.py --flutter python build.py --flutter --skip-portable-pack
$rc = $LASTEXITCODE $rc = $LASTEXITCODE
Pop-Location Pop-Location
if ($rc) { throw "build.py упал ($rc)" } if ($rc) { throw "build.py упал ($rc)" }
$rel = 'flutter/build/windows/x64/runner/Release'
if (-not (Test-Path "$src/$rel/rustdesk.exe")) { throw "клиент не собран: нет $rel/rustdesk.exe" }
# --- артефакт --- # --- портативный установщик (generate.py реальным python) ---
Write-Host "Упаковка портативного установщика (generate.py)..." -ForegroundColor Cyan
Push-Location "$src\libs\portable"
python -m pip install -q -r requirements.txt
python generate.py -f "../../$rel/" -o . -e "../../$rel/rustdesk.exe"
$genRc = $LASTEXITCODE
Pop-Location
if ($genRc) { throw "generate.py упал ($genRc)" }
# --- артефакт в dist ---
New-Item -ItemType Directory -Force $dist | Out-Null New-Item -ItemType Directory -Force $dist | Out-Null
$out = Get-ChildItem -Path $src -Filter 'rustdesk-*-install.exe' -EA SilentlyContinue | Select-Object -First 1 $packer = "$src\target\release\rustdesk-portable-packer.exe"
if (-not $out) { $out = Get-ChildItem -Path $src -Recurse -Filter 'rustdesk*.exe' -EA SilentlyContinue | if (-not (Test-Path $packer)) { throw "не найден rustdesk-portable-packer.exe после generate.py" }
Where-Object { $_.FullName -match 'Release' } | Select-Object -First 1 } $outExe = Join-Path $dist "rustdesk-$TAG-install.exe"
if ($out) { Copy-Item $out.FullName (Join-Path $dist $out.Name) -Force; Write-Host "ГОТОВО: $(Join-Path $dist $out.Name)" -ForegroundColor Green } Copy-Item $packer $outExe -Force
else { Write-Host "Сборка ок, но .exe не найден — глянь $src (rustdesk-*-install.exe) и $src\flutter\build." -ForegroundColor Yellow } Write-Host "ГОТОВО: $outExe ($([math]::Round((Get-Item $outExe).Length/1MB,1)) MB)" -ForegroundColor Green