NetTraceдокументация

Выпуск версий и обновления

NetTrace распространяется через GitHub Releases. Установленные копии сами находят новую версию, предлагают её установить и перезапускаются. Сервер не нужен.

Как выпустить новую версию

  1. Опишите изменения в CHANGELOG.md в разделе ## [Unreleased]. Этот текст увидят пользователи в окне «Обновление NetTrace» и на странице релиза.
  2. Закоммитьте всё в main.
  3. Выполните в apps/desktop:

    npm run release -- 1.0.1
    

    (или из корня: node scripts/release.mjs 1.0.1)

Скрипт проверяет, что дерево чистое, ветка main не отстаёт от GitHub, тега ещё нет, версия больше текущей и раздел Unreleased не пустой. Затем он обновляет версию в Cargo.toml, Cargo.lock, package.json, package-lock.json, tauri.conf.json, проверяет Cargo.lock через cargo metadata --locked, переносит заметки под заголовок ## [1.0.1] - дата, делает коммит и тег v1.0.1 и отправляет их на GitHub. Если что-то пошло не так до отправки, файлы, коммит и тег откатываются.

Дальше всё делает GitHub Actions (.github/workflows/release.yml), тремя задачами:

  1. preflight — тег стоит на коммите из main, совпадает с версией во всех файлах, есть заметки к версии и секреты подписи;
  2. build — тесты Rust и фронтенда, clippy и сборка установщика NSIS. Эта задача не видит ключ подписи: ни один скрипт сборки зависимостей не может его прочитать (обновляемые артефакты отключены в tauri.release.conf.json);
  3. sign-publish — проверяет хэш установщика, подписывает его одним шагом (tauri signer sign --app-version; ключ есть только в этом шаге), пишет latest.json (scripts/release-ci.mjs latest) и загружает в черновик релиза NetTrace_X.Y.Z_x64-setup.exe, .sig и latest.json;
  4. проверяет latest.json: версия, ссылка на этот релиз, подпись сделана ключом, которому доверяет приложение, и подписана именно эта версия;
  5. только после этого публикует релиз.

Если сборка упала, релиз остаётся черновиком (пользователи его не видят). Собранный установщик хранится между задачами одни сутки: перезапуск только задачи подписи (Re-run failed jobs) возможен в этот срок, позже — весь workflow. Исправьте причину и либо перезапустите workflow (Actions → Re-run jobs), либо удалите черновик и тег (git push --delete origin vX.Y.Z, git tag -d vX.Y.Z) и выпустите следующую версию.

Ход сборки: https://github.com/Focusniks/NetTrace-desktop/actions (≈15–25 минут). Как только релиз опубликован, установленные копии предложат обновиться при следующем запуске (или через «Помощь → Проверить обновления»).

Опции скрипта: --no-push — только локальный коммит и тег; --no-git — только правка файлов (для локальных тестовых сборок).

Ключ подписи обновлений

Каждый пакет обновления подписывается ключом minisign. Публичный ключ встроен в приложение (plugins.updater.pubkey в tauri.conf.json), поэтому подменённый или повреждённый файл не установится.

  • Закрытый ключ: %USERPROFILE%\.tauri\nettrace-updater.key
  • Пароль: сгенерирован в %USERPROFILE%\.tauri\nettrace-updater.password.txt. Перенесите его в менеджер паролей и удалите этот файл: ключ зашифрован паролем, и хранить их рядом — всё равно что не шифровать.
  • В GitHub: Settings → Environments → release → Environment secrets — TAURI_SIGNING_PRIVATE_KEY (содержимое файла ключа) и TAURI_SIGNING_PRIVATE_KEY_PASSWORD. Окружение release доступно только запускам для тегов v*, поэтому workflow из другой ветки секретов не получит. Секретов с этими именами на уровне репозитория быть не должно.

Сохраните ключ и пароль в надёжном месте (менеджер паролей, офлайн-копия). Если ключ потерян, уже установленные копии больше не смогут обновиться: пользователям придётся вручную скачать установщик с новым ключом. Никогда не коммитьте ключ в репозиторий (*.key в .gitignore).

Приложение принимает обновление, только если версия записана в саму подпись (requireSignedVersion), поэтому подменённый latest.json не может подсунуть старую уязвимую сборку под видом новой.

Если ключ скомпрометирован: сгенерируйте новый (npx tauri signer generate), выпустите версию с новым pubkey, подписанную ещё старым ключом, — после обновления копии будут доверять только новому. Затем замените секреты.

Рекомендуемые настройки репозитория (Settings):

  • Rules → Rulesets: защитить теги v* от удаления и перезаписи;
  • Code security: включить Secret scanning и Push protection;
  • по желанию — включить в Environment release обязательное подтверждение (тогда каждый релиз нужно одобрить кнопкой).

Установщик

  • NSIS, установка для текущего пользователя в %LOCALAPPDATA%\NetTrace без прав администратора; обновления ставятся без запроса UAC.
  • Языки: русский и английский — по языку Windows. Окна выбора языка нет: оно блокировало бы тихую установку обновлений.
  • Оформление: apps/desktop/src-tauri/installer/ — header.bmp, sidebar.bmp генерируются python apps/desktop/scripts/gen-installer-images.py (Pillow).
  • Лицензия: installer/LICENSE.txt (MIT или Apache 2.0).
  • installer/hooks.nsh: после обычной установки, если нет драйвера Npcap, предлагает открыть npcap.com. Npcap нельзя включать в установщик по его бесплатной лицензии. При тихой установке и обновлениях вопрос не задаётся.
  • Установщик не подписан сертификатом Authenticode, поэтому при первом запуске Windows SmartScreen может показать предупреждение: «Подробнее» → «Выполнить в любом случае». Обновления это не затрагивает.

Локальная сборка установщика

cd apps/desktop
npm run tauri -- build --config src-tauri/tauri.release.conf.json

Ключ для сборки не нужен. Результат: target/release/bundle/nsis/. Подписать установщик вручную (для своих тестов обновления):

npx tauri signer sign --app-version X.Y.Z -f путь/к/ключу target/release/bundle/nsis/NetTrace_X.Y.Z_x64-setup.exe

Проверка зависимостей

Dependabot обновляет GitHub Actions, Rust-крейты и npm-пакеты (Tauri — вручную: версии крейта и npm-пакета должны совпадать). В CI задача «Dependency audit» запускает cargo audit и npm audit --omit=dev при каждом изменении и раз в неделю.

Конфиденциальность

Приложение обращается к сети только для проверки обновлений: скачивание файла latest.json с GitHub; сведения о пользователе, системе и захватах не передаются. Проверку при запуске можно отключить в меню «Помощь». Телеметрии нет.