From bd7d1f6837e44d46aaae7cdc0bb829a97c4b9ec9 Mon Sep 17 00:00:00 2001 From: gusadmin Date: Tue, 14 Jul 2026 15:34:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=80=D1=82=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=BD=D1=83=D1=8E=20=D1=83=D0=BF=D0=B0=D0=BA=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D1=83=20=E2=80=94=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=BC=20=D1=88=D0=B0=D0=B3=D0=BE=D0=BC=20(build.py?= =?UTF-8?q?=20python3=20=3D=20Store-=D0=B7=D0=B0=D0=B3=D0=BB=D1=83=D1=88?= =?UTF-8?q?=D0=BA=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit build.py зовёт `python3 generate.py`, на GUSIK-PC это Store-заглушка -> падал, хотя клиент уже собран. Теперь build.py --skip-portable-pack, установщик пакуем реальным python -> dist/rustdesk--install.exe. Стоковый flutter 3.24.5 engine собрал Windows без кастомной подмены. Co-Authored-By: Claude Opus 4.8 --- docs/CODEMAP.md | 15 +++++++++++---- scripts/build-windows.ps1 | 30 +++++++++++++++++++++--------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/docs/CODEMAP.md b/docs/CODEMAP.md index 3119ac2..3286918 100644 --- a/docs/CODEMAP.md +++ b/docs/CODEMAP.md @@ -59,10 +59,17 @@ RUSTC_BOOTSTRAP=1 нужен, т.к. cargo-expand требует nightly-фич, `generated_bridge.dart`/`.freezed.dart` нет → flutter build падает `EventToUI_Event/RustdeskImpl isn't a type`. Поэтому проверять надо dart-файлы, не только rust. -### Открытый вопрос (решить при первой сборке) -Апстрим для Windows-x64 подменяет flutter-engine кастомным `windows-x64-release.zip` (ради Win7). -Для таргета Win10/11, вероятно, можно оставить стоковый engine 3.24.5 и пропустить подмену — проверить, -не падает ли `flutter build windows` без неё. +### Грабля: portable-pack и python3-заглушка (GUSIK-PC) +`build.py --flutter` в конце зовёт `python3 ./generate.py` для сборки портативного установщика. На +GUSIK-PC `python3` = Microsoft Store-заглушка (реальный только `python` = 3.12) → шаг падает +(«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--install.exe`. + +### Разрешённый вопрос: flutter-engine +Стоковый Flutter 3.24.5 x64 engine отработал — `flutter build windows` собрался БЕЗ кастомного +`windows-x64-release.zip` (тот нужен апстриму только для Win7). Для Win10/11 подмена не требуется. ## Android toolchain (VM 118, позже) Flutter 3.24.5, NDK r28c, cargo-ndk 3.1.2, Rust android-таргеты, vcpkg android-триплеты diff --git a/scripts/build-windows.ps1 b/scripts/build-windows.ps1 index e23160f..f7d1626 100644 --- a/scripts/build-windows.ps1 +++ b/scripts/build-windows.ps1 @@ -127,18 +127,30 @@ Push-Location $src if ($LASTEXITCODE) { Pop-Location; throw "vcpkg install упал ($LASTEXITCODE)" } Pop-Location -# --- сборка --- -Write-Host "python build.py --flutter..." -ForegroundColor Cyan +# --- сборка клиента (без портативной упаковки: её build.py делает через `python3`, +# а на GUSIK-PC python3 = Store-заглушка -> падает; пакуем отдельно реальным python) --- +Write-Host "python build.py --flutter --skip-portable-pack..." -ForegroundColor Cyan Push-Location $src -python build.py --flutter +python build.py --flutter --skip-portable-pack $rc = $LASTEXITCODE Pop-Location 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 -$out = Get-ChildItem -Path $src -Filter 'rustdesk-*-install.exe' -EA SilentlyContinue | Select-Object -First 1 -if (-not $out) { $out = Get-ChildItem -Path $src -Recurse -Filter 'rustdesk*.exe' -EA SilentlyContinue | - Where-Object { $_.FullName -match 'Release' } | Select-Object -First 1 } -if ($out) { Copy-Item $out.FullName (Join-Path $dist $out.Name) -Force; Write-Host "ГОТОВО: $(Join-Path $dist $out.Name)" -ForegroundColor Green } -else { Write-Host "Сборка ок, но .exe не найден — глянь $src (rustdesk-*-install.exe) и $src\flutter\build." -ForegroundColor Yellow } +$packer = "$src\target\release\rustdesk-portable-packer.exe" +if (-not (Test-Path $packer)) { throw "не найден rustdesk-portable-packer.exe после generate.py" } +$outExe = Join-Path $dist "rustdesk-$TAG-install.exe" +Copy-Item $packer $outExe -Force +Write-Host "ГОТОВО: $outExe ($([math]::Round((Get-Item $outExe).Length/1MB,1)) MB)" -ForegroundColor Green