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/darwin-helper идут отдельно через extraResources ниже — не # дублировать их в app.asar. - '!resources/zapret/**' - '!resources/linux-helper/**' - '!resources/darwin-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 # utunws (форк nfqws под utun+BPF, см. src/main/zapret/engine.darwin.ts) собран под # -target …-macos14.0 в самом релизе Flowseal/zapret-mac-discord-youtube — на более # старой системе он не запустится, минимум объявляем и на уровне инсталлятора. minimumSystemVersion: '14.0' target: - target: dmg arch: [x64, arm64] - target: zip arch: [x64, arm64] entitlements: build/entitlements.mac.plist entitlementsInherit: build/entitlements.mac.plist hardenedRuntime: true # utunws — сторонний Mach-O внутри .app; hardened runtime требует, чтобы electron-builder # подписал и его тем же Developer ID, иначе Gatekeeper убьёт процесс при первом spawn. binaries: - Contents/Resources/zapret/darwin/utunws # Подпись и нотаризация выключены: без Apple Developer ID сборка иначе падает. # Как включить — см. раздел «Подпись» в README.md. notarize: false extraResources: - from: resources/zapret/darwin to: zapret/darwin # install.sh/stop.sh/daemon.sh/watchdog.sh/autostart.sh — привилегированные скрипты, # запускаются через osascript "with administrator privileges" (elevate.darwin.ts). # Не из resources/zapret: тот качает fetch-zapret.mjs, а этот каталог — свой, лежит # в репозитории (см. src/main/zapret/paths.ts:bundledDarwinHelperDir()). - from: resources/darwin-helper to: darwin-helper 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