Files
senboost/electron-builder.yml
T
maeneko 2df1c00516
CI / Линт и типы (push) Canceled after 0s
CI / Сборка (Windows) (push) Canceled after 0s
CI / Сборка (Linux) (push) Canceled after 0s
Версия 0.5.3
Добавлена сборка под Linux: nfqws + правила nftables (NFQUEUE) вместо
socks-прокси или службы Windows. Повышение прав — pkexec на каждое
включение/выключение, без службы и без автозапуска.

Стратегии переиспользуют существующий набор Flowseal (strategies.win32.generated.ts):
--wf-tcp/--wf-udp уходят в правила nftables, остальное — в nfqws как есть.
Все правила nftables держат bypass, поэтому упавший или выключенный демон
не рвёт пользователю сеть.

Помощник (resources/linux-helper/rknboost-helper.sh) и бинарник nfqws перед
каждым запуском копируются в userData: root не может прочитать файлы внутри
AppImage (FUSE-примонтирован без allow_other), а обычная файловая система
на диске ему доступна независимо от прав.

Заодно:
- починен баг генератора стратегий (^! не разэкранировался в !, ломало
  fake-tls-auto и на Windows тоже);
- карточка обхода теперь показывает текст ошибки независимо от state;
- счётчик auto-hostlist в настройках больше не привязан к !isWindows;
- CI: отдельная джоба сборки под Linux на ubuntu-latest.
2026-09-04 10:26:00 +03:00

164 lines
8.7 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
appId: com.rknboost.app
productName: RKNboost
directories:
buildResources: build
output: release
# releaseType: release — публиковать релиз сразу, без черновика (draft — поведение по
# умолчанию у electron-builder). С черновиком параллельная загрузка нескольких файлов иногда
# создаёт два черновика с одним и тем же тегом вместо одного релиза.
#
# publishAutoUpdate: false — не заливать latest.yml. Это метаданные для electron-updater,
# которого в приложении нет (обновляется пользователь вручную, скачивая новый инсталлятор
# со страницы релиза) — файл был бы мёртвым грузом в ассетах.
publish:
provider: github
releaseType: release
publishAutoUpdate: false
files:
- '!**/.vscode/*'
- '!src/*'
- '!electron.vite.config.{js,ts,mjs,cjs}'
- '!{.eslintcache,eslint.config.mjs,.prettierignore,.prettierrc.yaml,README.md}'
- '!{.env,.env.*,.npmrc,pnpm-lock.yaml,yarn.lock}'
- '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}'
- '!.github/*'
# zapret и linux-helper идут отдельно через extraResources ниже — не дублировать их в app.asar.
- '!resources/zapret/**'
- '!resources/linux-helper/**'
asarUnpack:
- 'resources/**'
# Бинарники zapret (npm run zapret:fetch) кладём рядом с приложением, а не в asar —
# это исполняемые файлы, которые main-процесс запускает через spawn.
#
# Общие для всех платформ куски (списки, fake-пакеты, лицензии zapret/Flowseal) — здесь;
# платформенные бинарники — в extraResources соответствующего раздела (win/mac/linux) ниже.
# extraResources платформы ДОБАВЛЯЕТСЯ к этому списку, а не заменяет его (проверено по
# исходникам electron-builder, app-builder-lib/fileMatcher.js) — так Windows-сборка не везёт
# nfqws и Mach-O tpws, а Linux-сборка не везёт WinDivert и winws.exe.
extraResources:
- from: resources/zapret/lists
to: zapret/lists
- from: resources/zapret/fakes
to: zapret/fakes
- from: resources/zapret
to: zapret
filter:
- 'LICENSE.zapret.txt'
- 'LICENSE.flowseal.txt'
win:
executableName: RKNboost
# Приложение запрашивает права администратора при КАЖДОМ запуске (манифест exe).
# Внимание на компромисс: установка при этом остаётся per-user, то есть exe лежит в
# %LocalAppData%\Programs\RKNboost — папке, доступной на запись обычному пользователю.
# Значит подмена этого exe даёт злоумышленнику администратора с подтверждения самого
# пользователя. Это осознанный выбор владельца проекта; безопасный вариант — вернуть
# perMachine: true, чтобы exe лежал в защищённом от записи Program Files.
requestedExecutionLevel: requireAdministrator
target:
# arm64 не собираем: WinDivert (драйвер для winws — src/main/zapret/engine.win32.ts)
# не имеет подписанной сборки под arm64, только x64 через эмуляцию (docs/windows.md
# в поставке zapret) — arm64-инсталлятор был бы заведомо нерабочим.
- target: nsis
arch: [x64]
extraResources:
- from: resources/zapret/win32
to: zapret/win32
- from: resources/zapret
to: zapret
filter:
- 'LICENSE.WinDivert.txt'
nsis:
# Быстрая установка per-user, без UAC и без мастера: ставится в %LocalAppData%, куда
# обычный пользователь и так пишет без повышения прав. Раньше здесь стоял perMachine —
# это была защита от того, что служба (LocalSystem) ссылалась бы на winws.exe прямо
# в папке установки. Теперь вместо этого при первом включении обхода приложение сама
# копирует winws.exe в защищённый ACL'ом каталог в %ProgramData% (см. applyServiceConfig
# в src/main/zapret/service.win32.ts) — сама установка приложения per-user безопасна.
oneClick: true
perMachine: false
# Без electron-updater (см. publishAutoUpdate выше) differential-обновления не нужны —
# differentialPackage: false отключает генерацию .blockmap, который иначе всегда
# заливался бы в ассеты релиза рядом с инсталлятором.
differentialPackage: false
# Удалять %APPDATA%\rknboost (списки сайтов, метка первого запуска) вместе с приложением.
# По умолчанию electron-builder этого НЕ делает, и данные оставались бы в системе после
# удаления. Обновление приложения под это не попадает — в шаблоне деинсталлятора стоит
# проверка `ifNot isUpdated`, так что отредактированные списки переживают обновление.
deleteAppDataOnUninstall: true
include: build/installer.nsh
artifactName: ${name}-${version}-setup-${arch}.${ext}
shortcutName: ${productName}
uninstallDisplayName: ${productName}
createDesktopShortcut: always
mac:
category: public.app-category.productivity
target:
- target: dmg
arch: [x64, arm64]
- target: zip
arch: [x64, arm64]
entitlements: build/entitlements.mac.plist
entitlementsInherit: build/entitlements.mac.plist
hardenedRuntime: true
# tpws — сторонний Mach-O внутри .app; hardened runtime требует, чтобы electron-builder
# подписал и его тем же Developer ID, иначе Gatekeeper убьёт процесс при первом spawn.
binaries:
- Contents/Resources/zapret/darwin/tpws
# Подпись и нотаризация выключены: без Apple Developer ID сборка иначе падает.
# Как включить — см. раздел «Подпись» в README.md.
notarize: false
extraResources:
- from: resources/zapret/darwin
to: zapret/darwin
dmg:
artifactName: ${name}-${version}-${arch}.${ext}
linux:
executableName: rknboost
# desktopName в package.json + syncDesktopName — иначе Electron не свяжет открытые окна
# с .desktop-записью (app_id/WM_CLASS), и часть окружений не покажет иконку в панели задач.
syncDesktopName: true
target:
- target: AppImage
arch: [x64]
- target: deb
arch: [x64]
maintainer: RKNboost
category: Network
synopsis: Обход блокировок через zapret
extraResources:
- from: resources/zapret/linux
to: zapret/linux
# rknboost-helper.sh — привилегированный помощник (nfqws.linux.ts зовёт его через
# pkexec). Не из resources/zapret: тот качает fetch-zapret.mjs, а этот файл — свой,
# лежит в репозитории (см. src/main/zapret/paths.ts:bundledHelperPath()).
- from: resources/linux-helper
to: linux-helper
appImage:
artifactName: ${name}-${version}-${arch}.${ext}
deb:
artifactName: ${name}-${version}-${arch}.${ext}
# electron-builder ЗАМЕНЯЕТ этим списком свои дефолтные зависимости Electron, а не
# дополняет их (проверено по исходникам, app-builder-lib/targets/FpmTarget.js) — потерять
# хотя бы одну из первых девяти значило бы получить .deb, который ставится и не запускается.
# nftables и polkit — уже наши, для nfqws/pkexec.
depends:
- libgtk-3-0
- libnotify4
- libnss3
- libxss1
- libxtst6
- xdg-utils
- libatspi2.0-0
- libuuid1
- libsecret-1-0
- nftables
- policykit-1
npmRebuild: false