From 285a1a966764acbbba075cca14ea2a5be7065dfc Mon Sep 17 00:00:00 2001 From: Ivan Fontosh Date: Thu, 14 May 2026 00:16:33 +0800 Subject: [PATCH] fix(update): disable differential download for Gitea generic feed (Range 400) Co-authored-by: Cursor --- app/main/update/installAutoUpdater.ts | 10 ++++++++++ docs/GITEA_AUTO_UPDATE.md | 2 ++ 2 files changed, 12 insertions(+) diff --git a/app/main/update/installAutoUpdater.ts b/app/main/update/installAutoUpdater.ts index 93c4e2a..cd78621 100644 --- a/app/main/update/installAutoUpdater.ts +++ b/app/main/update/installAutoUpdater.ts @@ -77,6 +77,7 @@ function registerUpdaterHandlers(register: RegisterFn, licenseService: LicenseSe /** * Проверка обновлений: только упакованное приложение, только при активной лицензии. * Канал и URL задаются при сборке (`publish` → `app-update.yml` внутри установки). + * Дифференциальное скачивание (HTTP Range / blockmap) по умолчанию **выключено**: за nginx у Gitea raw часто **400** на multi-Range, updater всё равно уходит в полный файл. Включить снова: **`DND_UPDATE_ENABLE_DIFFERENTIAL=1`** (имеет смысл только если на сервере починили Range). */ export function installAutoUpdater(licenseService: LicenseService, register: RegisterFn): void { registerUpdaterHandlers(register, licenseService); @@ -89,6 +90,15 @@ export function installAutoUpdater(licenseService: LicenseService, register: Reg autoUpdater.setFeedURL({ provider: 'generic', url }); } + // Дифференциальное обновление (multi-Range по blockmap) часто ломается на Gitea raw за nginx (HTTP 400); + // electron-updater тогда и так падает на полный файл — отключаем лишний шум и лишний round-trip. + const enableDiff = process.env.DND_UPDATE_ENABLE_DIFFERENTIAL?.trim().toLowerCase(); + autoUpdater.disableDifferentialDownload = !( + enableDiff === '1' || + enableDiff === 'true' || + enableDiff === 'yes' + ); + autoUpdater.autoDownload = true; autoUpdater.autoInstallOnAppQuit = true; diff --git a/docs/GITEA_AUTO_UPDATE.md b/docs/GITEA_AUTO_UPDATE.md index 551b48e..38ab95c 100644 --- a/docs/GITEA_AUTO_UPDATE.md +++ b/docs/GITEA_AUTO_UPDATE.md @@ -325,6 +325,8 @@ sudo journalctl -u gitea-act-runner -f - **Базовый дистрибутив для бинарников:** сборка на **Ubuntu 22.04 (glibc 2.35)** — совместимость с «максимумом» настольных дистрибутивов с glibc не старее целевого; **Alpine/musl** без отдельной сборки не гарантируется. - **Запуск AppImage:** на части систем нужен **FUSE** (например `libfuse2` для старых форматов / документация дистрибутива). Подпись пакетов в первом варианте **не** используется (как договорённость по проекту). - Правила **electron-updater** в приложении те же: упакованная сборка и **активная лицензия** (`installAutoUpdater.ts`). +- **Дифференциальное обновление** (запросы с несколькими HTTP `Range` по blockmap) на **Gitea raw** за nginx часто даёт **`400 Bad Request`** (`content-length: 18` — короткий текст ошибки); updater переходит на **полную** загрузку — обновление всё равно доходит. В коде по умолчанию **`disableDifferentialDownload: true`**, чтобы не делать лишний шаг (меньше шума в логе). Включить дифф снова: переменная **`DND_UPDATE_ENABLE_DIFFERENTIAL=1`** при запуске приложения — имеет смысл только если на сервере разрешили корректные Range / multi-range для raw. +- Сообщения вида **`duplicated in blockmap`** в консоли — предупреждение electron-updater, на работоспособность обычно не влияют. ---