For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /ru/docs/desktop/updates.md (or send Accept: text/markdown).
Автообновления и каналы релизов
Подписанные фиды обновлений, канал stable/beta и поставляемый релизный процесс.
Сгенерируйте пару ключей апдейтера один раз
Апдейтер проверяет подписи minisign на скачанных артефактах. Сгенерируйте пару ключей подписантом Tauri и храните закрытый ключ как TAURI_SIGNING_PRIVATE_KEY с паролем в TAURI_SIGNING_PRIVATE_KEY_PASSWORD, оба в вашем хранилище секретов — никогда в репозитории. Сборки, создающие артефакты апдейтера, излучают сайдкар .sig рядом с каждым установщиком; открытый ключ уходит клиентам, закрытый остаётся в CI.
corepack pnpm --filter @supastack/desktop exec tauri signer generate -w ~/.tauri/product.keyНастройте апдейтер во время сборки
tauri.conf.json поставляет блок-сентинел апдейтера с пустыми endpoints и pubkey — сохраните его, потому что плагин апдейтера не может инициализироваться без присутствующих ключей. Реальные значения глубоко сливаются во время сборки через оверлей JSON --config или переменную окружения TAURI_CONFIG; check:release-config печатает точный оверлей для вставки, когда установлены SUPASTACK_UPDATER_ENDPOINT и SUPASTACK_UPDATER_PUBKEY.
Устанавливайте оба или ни одного: оверлей только с endpoints оставляет pubkey пустым, поэтому проверки кажутся работающими, пока каждая установка падает на проверке подписи. URL эндпоинта несёт плейсхолдеры {{target}}, {{arch}} и {{current_version}} — слот версии обязателен — плюс необязательный сегмент пути {{channel}}, включающий каналы релизов.
# check:release-config prints this overlay for tauri build --config:
# {"plugins":{"updater":{"endpoints":["https://releases.example.com/{{channel}}/{{target}}/{{arch}}/{{current_version}}"],"pubkey":"<base64 public key>"}}}
# SUPASTACK_UPDATER_ENDPOINT=
# SUPASTACK_UPDATER_PUBKEY=Публикация фида latest.json
Каждый эндпоинт отвечает манифестом latest.json — version, notes, pub_date и картой platforms, покрывающей darwin-aarch64, darwin-x86_64, windows-x86_64, windows-aarch64, linux-x86_64 и linux-aarch64, — где каждая запись сопрягает URL установщика с его signature.
Собирайте его скриптом release:manifest: он сканирует каталог бандла на артефакты .app.tar.gz, -setup.exe (предпочтительнее .msi) и .AppImage — у каждого должен быть сосед .sig — и пишет или сливает манифест. Флаги покрывают --version, --base-url, --bundle-dir с --platform, --merge для накопления платформ между запусками, --notes, --pub-date и --out.
corepack pnpm --filter @supastack/desktop release:manifest -- \
--version 1.2.0 \
--base-url https://releases.example.com/stable \
--bundle-dir src-tauri/target/release/bundle \
--platform windows-x86_64 \
--merge latest.jsonКаналы stable и beta
Когда эндпоинт содержит плейсхолдер {{channel}}, меню приложения включает флажок «Beta Updates», переключающий фид между stable и beta. Выбор сохраняется в файле update-channel рядом с конфигурацией приложения; SUPASTACK_UPDATE_CHANNEL переопределяет его на запуск — нераспознанное игнорируется с предупреждением, — а stable является умолчанием. Без плейсхолдера переключатель остаётся отключённым, и проверяется только фид stable.
Когда проверяются обновления
Одна тихая фоновая проверка запускается при старте и показывает диалог, только когда обновление существует; пункт меню «Check for Updates…» сообщает каждый исход. Проверки сериализуются — второй параллельный запрос отбрасывается. Доступное обновление предлагает «Install and Restart», который скачивает, устанавливает и перезапускает приложение; ненастроенные сборки отвечают, что обновления не настроены, а сбои всплывают как диалоги, а не повторные попытки.
Поставляемый релизный процесс
.github/workflows/desktop-release.yml собирает матрицу — macOS на обеих архитектурах, Windows и Ubuntu — по тегам desktop-v* или ручному запуску с версией и каналом. Он штампует версию манифеста из тега (релиз, пропустивший это, предлагает себя как обновление вечно), сливает манифесты по платформам и создаёт черновой релиз GitHub, несущий latest.json плюс каждый установщик и подпись — помеченный prerelease для каналов beta.
Ему нужны SUPASTACK_APP_URL и SUPASTACK_UPDATER_ENDPOINT как переменные репозитория и SUPASTACK_UPDATER_PUBKEY плюс закрытый ключ подписи и его пароль как секреты; креденшелы подписи Apple — опциональное дополнение. Полный ранбук живёт в docs/desktop-updates.md в репозитории.
Проверка и устранение неполадок
Установите сборку, опубликуйте более новый манифест в тестовый фид и подтвердите, что диалог обновления приходит при следующей проверке и приложение перезапускается в новую версию. Затем переключитесь на beta и подтвердите, что ответ канального фида меняется.