> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Автообновления и каналы релизов

Подписанные фиды обновлений, канал 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 и подтвердите, что ответ канального фида меняется.

[Сборка и выпуск](https://supastack.dev/ru/docs/desktop/release.md)

[Подпись кода](https://supastack.dev/ru/docs/desktop/signing.md)


## Вперёд

[Внутри десктопной оболочки](https://supastack.dev/ru/docs/desktop/internals.md)
