1. Backend и база

  1. Создайте backup production-базы.
  2. Примените проверенные миграции.
  3. Разверните backend/frontend.
  4. Проверьте OAuth, Authlib и S3 health flow.

2. Игровая сборка

  1. Подготовьте чистый каталог клиента.
  2. Запустите Manifest Builder.
  3. Создайте/обновите profile.json.
  4. Увеличьте release.generation и задайте новый неизменяемый release.id.
  5. Запустите wraithbound-publisher publish: он загрузит files, JSON manifest и signed envelope в S3.
  6. Publisher установит envelope через приватный admin gRPC только после успешной S3-транзакции. Прямой доступ CI к volume или каталогу launcher-server не используется.
  7. Вызовите PublishBuild с выбранными buildId и releaseId. Control-plane повторно проверит подпись и сам обновит активный указатель.
  8. Войдите тестовым аккаунтом и выполните полную подготовку клиента.
  9. Повторите запуск: update должен скачаться снова, updateVerify — остаться valid.

3. Native

Соберите и протестируйте все изменённые Rust-модули. Скопируйте release binaries в launcher resources до Electron build.

4. Launcher

  1. Увеличьте версию.
  2. Экспортируйте WB_LAUNCHER_TRUSTED_KEYS_FILE с публичным registry текущих active/retiring ключей. При необходимости передайте WB_HAWK_TOKEN через secret-хранилище CI.
  3. Выполните typecheck, lint и build. build:win/release:win сами проверят наличие trust registry до упаковки.
  4. Проверьте unpacked artifact и подпись полученного manifest envelope.
  5. Опубликуйте release в Wraithbound-Development/launcherRelease.
  6. Убедитесь, что release содержит latest.yml, installer и blockmap.
  7. Проверьте auto-update с предыдущей версии.
Не обновляйте profile/manifest неатомарно во время активной раздачи. Сначала загрузите files, затем manifest, последним — profile или version pointer.