Обновление сборок через Яндекс.Диск: инструкция для издателя

Обновление сборок — функция редакции Watchdog Про. Без действующего ключа вкладка «Обновления» в главном окне и группа «Удалённое обновление билдов (Яндекс.Диск)» в настройках заблокированы. Как получить ключ — в руководстве пользователя.

Новую версию приложения не обязательно возить на стенд на флешке. Издатель сборки — тот, кто выпускает новые версии приложения, — кладёт в публичную папку Яндекс.Диска два файла: архив сборки и небольшой указатель manifest.json. Стенды с Uniday Watchdog забирают их сами, проверяют контрольную сумму и подменяют работающее приложение. Если новая версия окажется плохой, стенд сам вернётся на предыдущую рабочую.

  • Папка на Яндекс.Диске
  • Стенды забирают сами
  • Апробация новой версии
  • Откат при сбое
Один zip и один manifest.json — и стенды обновились

Что нужно: аккаунт Яндекса (хватит бесплатного) и одна опубликованная папка. Чего не нужно: своего сервера, базы данных, открытых портов, белого IP, VPN и доменного имени. Стенд читает публичную папку анонимно — ни логина, ни токена в его настройках нет.

Как установить Uniday Watchdog и включить его функции, описано в инструкции по установке, а работа с вкладкой «Обновления» — в руководстве пользователя. Здесь — всё, что делает издатель.

Как настроить обновления

Шаг 1. Создать и опубликовать папку на Яндекс.Диске

  1. Создайте папку — например, museum-builds. Через сайт или приложение Яндекс.Диска, неважно.
  2. Опубликуйте папку целиком: правый клик → «Поделиться» → включить доступ по ссылке → скопировать ссылку вида https://disk.yandex.ru/d/AbC123XyZ. Эта ссылка целиком и вставляется в настройки Watchdog на стенде.
  3. Публикуется именно папка, а не отдельные файлы. Каждое следующее обновление сводится к тому, чтобы залить в неё новый zip и перезаписать манифест.

Аккаунт нужен только вам: заливка и публикация — это запись. Стендам учётная запись не нужна.

Раскладка внутри папки плоская, без подпапок. Стенды на Windows читают manifest.json, стенды на Linux — manifest-linux-x64.json, поэтому одна папка может обслуживать обе системы:

museum-builds/              ← её ссылка вставляется в Watchdog
  manifest.json             ← для стендов на Windows
  Chess-1.4.3.zip
  manifest-linux-x64.json   ← для стендов на Linux, если они есть
  Chess-1.4.3-linux.zip

Если приложений несколько, каждому нужна своя публичная папка: манифест читается всегда из корня папки.

Шаг 2. Собрать zip

Заархивируйте папку сборки. Годятся оба варианта — Watchdog сам выровняет структуру при распаковке:

# с обёрткой (корень zip = папка сборки) — обычное «Отправить → Сжатая папка»
Compress-Archive -Path .\Chess-1.4.3 -DestinationPath .\Chess-1.4.3.zip

# или плоско (в корне zip сразу exe и папка _Data)
Compress-Archive -Path .\Chess-1.4.3\* -DestinationPath .\Chess-1.4.3.zip

Сборку для Linux упакуйте так же, в zip: например, zip -r Chess-1.4.3-linux.zip Chess-1.4.3.

Правила:

  • в корне архива — после срезания одной обёрточной папки — должен лежать исполняемый файл сборки;
  • имя обёрточной папки не важно;
  • служебный мусор __MACOSX/, .DS_Store, Thumbs.db игнорируется — это важно, если архив собирали на macOS;
  • путь к исполняемому файлу в манифесте указывается без обёртки: Chess.exe, а не Chess-1.4.3/Chess.exe;
  • в сборке для Linux исполняемый файл — без .exe, например Chess.x86_64 у Unity. Права на запуск Watchdog выставит сам после распаковки, поэтому архив можно собирать и на Windows.

Если по указанному пути исполняемого файла в архиве нет, это ошибка структуры: обновление не применяется, а версия уходит в карантин. Повторное скачивание тут не поможет — нужно исправить архив или манифест.

Шаг 3. Сделать manifest.json

Манифест — указатель на актуальную версию. Файл небольшой:

{
  "version": "1.4.3",
  "name": "Chess",
  "path": "Chess-1.4.3.zip",
  "sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
  "sizeBytes": 734003200,
  "exeRelativePath": "Chess.exe",
  "rolloutAfter": ""
}

Поля манифеста:

ПолеОбязательноеЧто это
versionдаВерсия сборки. Уникальна для каждого релиза — именно по ней различаются версии
nameнетИмя продукта, идёт в имя папки на диске стенда. Пусто — выведется из имени исполняемого файла
pathдаИмя zip рядом с манифестом, не ссылка
sha256даКонтрольная сумма архива: 64 шестнадцатеричных символа в нижнем регистре. Сверяется до любого действия с приложением
sizeBytesдаРазмер архива в байтах
exeRelativePathдаПуть к исполняемому файлу от корня сборки, без обёрточной папки. В manifest-linux-x64.json — без .exe
rolloutAfterнетМомент в формате 2026-07-01T03:00:00Z (UTC): применять не раньше. Пусто — сразу

Uniday Watchdog манифест не создаёт: его готовит издатель своими средствами. Проще всего — небольшим скриптом рядом с архивом. Для сборки под Windows, в PowerShell:

$zip = '.\Chess-1.4.3.zip'
[ordered]@{
  version         = '1.4.3'
  name            = 'Chess'
  path            = (Split-Path $zip -Leaf)
  sha256          = (Get-FileHash $zip -Algorithm SHA256).Hash.ToLower()
  sizeBytes       = (Get-Item $zip).Length
  exeRelativePath = 'Chess.exe'
  rolloutAfter    = ''
} | ConvertTo-Json | Set-Content -Encoding utf8 .\manifest.json

Для сборки под Linux, в терминале Linux:

ZIP=Chess-1.4.3-linux.zip
cat > manifest-linux-x64.json <<EOF
{
  "version": "1.4.3",
  "name": "Chess",
  "path": "$ZIP",
  "sha256": "$(sha256sum "$ZIP" | cut -d' ' -f1)",
  "sizeBytes": $(stat -c %s "$ZIP"),
  "exeRelativePath": "Chess.x86_64",
  "rolloutAfter": ""
}
EOF

Те же шаги можно встроить в свой конвейер сборки — например, в скрипт, который запускается после сборки проекта Unity и архивации. Готового модуля для Unity или других движков в составе Uniday Watchdog нет: конвейер сборки — на стороне издателя.

Манифест проверяется до скачивания: контрольная сумма должна быть ровно 64 символа, размер — больше нуля, путь к исполняемому файлу — непустой и без ... Ошибочный манифест не приводит к скачиванию: в журнал уходит «манифест невалиден: <причина>» не чаще раза в час, а остальная работа продолжается. Так одна опечатка не заставит стенды качать многогигабайтный архив каждые 15 минут.

Шаг 4. Залить — сначала zip, манифест последним

ПОРЯДОК ЗАЛИВКИ:  1) zip   2) manifest.json — ПОСЛЕДНИМ

Манифест, который указывает на ещё не залитый архив, — это ошибка скачивания на каждом стенде до конца заливки. Старые архивы можно удалять, когда все стенды обновились.

Шаг 5. Включить обновления на стенде

Нужен действующий ключ Watchdog Про. На стенде:

  1. Настройки → вкладка «Обновления» → группа «Удалённое обновление билдов (Яндекс.Диск)» → флажок «Включить автообновление билдов». При необходимости поправьте «Опрос, мин», «Тиков апробации», «Хранить версий» и окно установки.
  2. Настройки → вкладка «Приложение» («Приложения» и выбрать нужное, если их несколько) → блок «Обновления билдов»:
    • вставьте публичную ссылку в поле «Публичная ссылка на папку Я.Диска»;
    • при необходимости измените «Папку для билдов»;
    • проверьте, что стоит флажок «Обновления включены».
  3. Нажмите «Проверить манифест». Ответ должен быть вида «Манифест найден: версия 1.4.3, 700 МБ, sha 9f86d081…, файл «Chess-1.4.3.zip».»
  4. Нажмите «Сохранить». Настройки применяются сразу, и проверка манифеста запускается немедленно — ждать интервал не нужно.

Качать сборки Watchdog начнёт, только если включены оба флажка: общий «Включить автообновление билдов» и «Обновления включены» у этого приложения.

Если стенд настраивается с нуля, проще пройти мастер первичной настройки: источник «Скачать с Яндекс.Диска» → вставить ссылку в поле «Ссылка на папку Яндекс.Диска» → «Проверить» → «Начать». Мастер сам скачает архив, сверит контрольную сумму, распакует сборку и настроит наблюдение за ней. Флажок «Автоматически обновлять с этой папки» в мастере включён по умолчанию. Если его снять, установка будет разовой, но ссылка сохранится — включить обновления позже можно в настройках, не вводя её заново.

Шаг 6. Что вы увидите

На вкладке «Обновления» главного окна строка новой версии пройдёт путь:

«В облаке» → «Качается 42%» → «Подтверждается 1/3 … 3/3» → «Активная» с меткой «текущая».

Вкладка «Обновления» во время апробации: новая версия уже текущая, у неё жёлтое кольцо, прежние версии на диске
Сразу после установки: новая версия уже текущая, жёлтое кольцо — идёт апробация («Подтверждается»), прежние версии лежат на диске
Вкладка «Обновления»: плашка «Доступно обновление», версии активная, на диске, в облаке и в карантине
Позже: текущая версия — активная, предыдущая — на диске для отката, следующая — в облаке, ещё не скачана; версия, не прошедшая апробацию, — в карантине

В журнале — на вкладке «Логи watchdog» и в файле журнала в папке logs:

  • «Скачивание обновления 1.4.3 (700 МБ)»
  • «Обновление 1.4.3 применено, идёт апробация»
  • «Обновление 1.4.3 подтверждено (рабочая версия)»

В папке для билдов на стенде появится папка версии, например Chess-1.4.3-9f86d0, а во время закачки — временная папка .staging.

Шаг 7. Выкатить следующую версию

  1. Поднимите version — она обязана быть новой и уникальной.
  2. Соберите и залейте новый zip.
  3. Обновите в манифесте version, path, sha256, sizeBytes и перезапишите манифест последним.

Следующая проверка на стендах установит версию сама. Предыдущая останется на диске со статусом «На диске» — для отката, пока её не вытеснит лимит «Хранить версий».

Если перезалить архив под той же версией с другим содержимым, стенд обновление не применит, а в диагностический журнал запишет предупреждение: версия опубликована повторно с другой контрольной суммой — поднимите версию. Версии сравниваются только на равенство: понятий «новее» и «старее» для сборок у Watchdog нет.

Шаг 8. Откатить все стенды

Один стенд откатывают из интерфейса: вкладка «Обновления» → правый клик по нужной версии → «Откатиться на эту» в автоматическом режиме (отвергнутая версия уйдёт в карантин) или «Перейти на эту версию» в ручном (без карантина).

Все стенды сразу — верните в манифест предыдущую версию: version, path, sha256 и sizeBytes от старого архива, сам архив должен лежать в папке. Версии сравниваются на равенство, поэтому стенды увидят «версия не совпадает с текущей» и перейдут на старую. Если она ещё лежит у них на диске, установка пройдёт без повторной закачки.

Оговорка: версия, которая раньше не прошла апробацию, лежит в карантине по контрольной сумме — её сначала придётся вручную снять с карантина.

Что происходит после установки

Апробация — испытательный срок

Новая версия сразу становится текущей, но считается непроверенной, пока не отработает 3 проверки подряд без проблем: процесс жив, окно отвечает, признаков зависания нет.

ПараметрПо умолчанию
Успешных проверок для подтверждения («Тиков апробации»)3
Интервал между проверкамиравен интервалу опроса мониторинга, по умолчанию 10 секунд
Итого испытательный срококоло 30 секунд
Предельный срок апробации30 минут

Апробацию проваливают сбой, перезапуск, зависание и срабатывание защиты от петли рестартов в это время. Преднамеренная остановка — ручная остановка или плановый перезапуск — её не проваливает: счёт проверок встаёт на паузу и продолжается после запуска. Так апробация не провалится из-за того, что стенд выключили на ночь.

Апробация не останавливает остальное: манифест по-прежнему проверяется, и более новая версия, вышедшая тем временем, скачивается на диск — её установка просто ждёт исхода.

Если ключ Watchdog Про перестал действовать во время установки, начатые замена, апробация и откат доводятся до конца, чтобы приложение не осталось между версиями. Новых проверок и закачек после этого нет.

Откат

Цель отката — последняя версия, которая работала. Её папка уже на диске, поэтому откат мгновенный и не требует сети. В журнале: «Откат с 1.4.5 на 1.4.4: апробация не пройдена».

Откат спасает от плохой сборки, а не от сломанного компьютера: если и предыдущая версия не запускается, работает обычный сценарий — пауза и сигнал человеку.

Карантин

Карантин блокирует содержимое: его ключ — контрольная сумма, а не номер версии.

  • назначается автоматически при провале апробации и при ошибке структуры архива; вручную — правый клик → «В карантин»;
  • снимается автоматически, как только в манифесте появляется другая контрольная сумма (вы выложили исправление), или вручную — «Снять карантин»;
  • сбой до установки (сеть, не совпала контрольная сумма) карантином не считается — это временная неудача, повтор на следующей проверке. Карантин назначается за сбой после установки.

Стенд не застревает: он пропускает плохую версию и спокойно установит следующую.

Ручной режим

Особо важный экспонат можно перевести в ручной режим: переключатель «Режим: Авто | Ручное» в шапке вкладки «Обновления».

КарантинРучной режим
На что действуетодна версиявсё приложение
Закачказаблокированаработает
Установказаблокированатолько вручную
Возврат в нормуавтоматически при новой версиитолько действием оператора

В ручном режиме новые версии всё равно скачиваются на диск и ждут команды «Перейти на эту версию». Наблюдение при этом не меняется: если закреплённая сборка упала, Watchdog перезапустит её как обычно. Ручной режим сохраняется после перезапуска Watchdog и отключения питания. При возврате в «Авто» стенд сверится с манифестом и перейдёт на ту версию, которая в нём сейчас; карантины при этом не сбрасываются.

Переключать режим безопасно в любой момент: во время закачки архив докачается и останется на диске, во время апробации она доиграет до конца. Блокируются только будущие установки.

Окно установки

Чтобы стенд не перезапускался при посетителях, установку можно ограничить по времени. Для этого есть два независимых способа:

  • «Применять обновления только в окне» в настройках стенда — интервал «с ЧЧ:мм по ЧЧ:мм», может переходить через полночь. По умолчанию выключено, обновление применяется сразу; при включении поля заполнены значениями 03:00 и 06:00;
  • rolloutAfter в манифесте — «не раньше такого-то момента», задаётся издателем для конкретного релиза.

Окно ограничивает только установку. Архив всё равно скачивается и ложится на диск, а устанавливается на первой проверке после открытия окна — без повторной закачки.

Когда установка откладывается

Закачка и установка — независимые половины. Новая версия ложится на диск всегда: в ручном режиме, на паузе мониторинга, при закрытом окне установки и даже пока другая версия проходит апробацию. Ждать может только установка, и вот когда:

  • включён ручной режим;
  • идёт апробация другой версии;
  • окно установки закрыто;
  • мониторинг на паузе, а процесс приложения ещё работает — оператор приостановил Watchdog, оставив экспонат посетителям. Такой процесс не завершается: установка ждёт снятия паузы, а снятие паузы сразу запускает проверку.

Если процесс не запущен, а мониторинг на паузе (обычный ночной случай), версия устанавливается сразу, но свою паузу Watchdog не снимает: новая сборка запустится утром кнопкой ▶.

Указатель текущей версии переключается последним одной операцией. Поэтому при отключении питания на диске всегда либо старая версия, либо новая — «половины» не бывает.

Действия со строкой версии

Правый клик по строке или кнопка «⋮» в конце строки:

ДействиеДля какого статусаЧто делает
Откатиться на эту«На диске», в автоматическом режимеПереключает на эту версию; отвергнутая версия уходит в карантин. Всегда спрашивает подтверждение
Перейти на эту версию«На диске», в ручном режимеОбычный переход: без карантина и без апробации, ручной режим закрепляется за новой версией
Считать рабочей«Подтверждается»Засчитать апробацию вручную — например, если стенд держали выключенным
Скачать сейчас«В облаке»Обойти окно установки; в ручном режиме — скачать без установки
В карантин«Активная», «В облаке»Пометить версию плохой вручную
Снять карантин«В карантине»Разрешить новую попытку
Удалить с дискалюбая неактивнаяОсвободить место. Всегда спрашивает подтверждение
Открыть папкулюбая версия на дискеОткрывает папку сборки

Тексты подтверждений: «Откатиться на версию X? Текущая версия уйдёт в карантин, экспонат перезапустится.» · «Перейти на версию X? Текущая версия останется на диске (без карантина), экспонат перезапустится.» · «Удалить версию X с диска? Откатиться на неё будет нельзя.»

«Перейти на эту версию» спрашивает подтверждение, только когда есть что перезапускать: если приложение не запущено, версия переключается сразу. Исключение — мониторинг на паузе, а процесс работает: тогда подтверждение спрашивается всегда.

Статусы версий

СтатусЧто значит
В облакеМанифест указывает на эту версию, её ещё не скачивали
Качается 42%Идёт загрузка
Подтверждается 2/3Установлена как текущая, проходит апробацию
АктивнаяТекущая рабочая версия — её запускает и наблюдает Watchdog
На дискеСкачана и лежит на диске: для мгновенного отката или ручного перехода
В карантинеНе прошла апробацию, эта сборка заблокирована

Строка активной версии выделена подложкой, полоской слева и меткой «текущая». В шапке таблицы справа — дата последней проверки и кнопка, которая запускает проверку немедленно.

Что настраивается и где

Общее для всех приложений — Настройки → вкладка «Обновления» → группа «Удалённое обновление билдов (Яндекс.Диск)»:

НастройкаПо умолчаниюДиапазон
«Включить автообновление билдов»выключено—
«Опрос, мин»151…1440
«Тиков апробации»31…60
«Хранить версий»2 (текущая и одна для отката)1…20
«Применять обновления только в окне»выключенополя 03:00–06:00

Своё у каждого приложения — Настройки → вкладка «Приложения» → блок «Обновления билдов»: публичная ссылка на папку, папка для билдов (по умолчанию ./builds/<id> внутри папки Watchdog), флажок «Обновления включены». Свои у приложения и история версий, апробация, карантины: обновление одного экспоната не затрагивает соседний.

На диске хранится столько рабочих версий, сколько задано в «Хранить версий». Версия, не прошедшая апробацию, удаляется сразу, а текущая рабочая при чистке всегда защищена.

Типичные ошибки

СимптомПричинаЧто делать
«Скачивание обновления X не удалось (повтор позже): контрольная сумма не совпала»Архив перезалили, а sha256 и sizeBytes в манифесте не обновилиПересчитать сумму и размер, перезаписать манифест. После трёх неудач подряд с одной суммой закачка уходит в часовую паузу
«Файл билда … не найден на Я.Диске (манифест ссылается на отсутствующий zip)»Манифест залит раньше архива или архив перезалит под другим именемСоблюдать порядок: сначала zip, манифест последним. Проверить поле path
«структура архива: …», версия в карантинеПуть к исполняемому файлу в манифесте не совпадает с тем, что лежит в архивеУказать имя файла от корня сборки, без обёрточной папки. Исправить манифест и поднять версию
«манифест невалиден: …»Ошибка в манифестеПересоздать манифест скриптом из шага 3
«В папке есть только сборка для Windows — нет manifest-linux-x64.json»Стенд на Linux, а в папке только манифест для WindowsВыложить сборку для Linux и manifest-linux-x64.json
«exeRelativePath «Chess.exe» — программа Windows; в manifest-linux-x64.json нужен исполняемый файл Linux без .exe …»В манифест для Linux попал путь к файлу WindowsУказать исполняемый файл Linux-сборки, например Chess.x86_64
Ничего не скачиваетсяПапка не опубликована; вставлена не та ссылка; выключен один из двух флажков; в манифесте та же версия, что уже стоитПроверить по очереди
Вкладка «Обновления» затемнена, на ней значок «ПРО»На стенде нет действующего ключа Watchdog ПроАктивировать ключ — руководство пользователя, п. 10.4
Апробация не проходит на заведомо рабочей сборкеПриложению нужно проработать около 30 секунд и отвечать, то есть иметь окно. Консольная программа без окна может считаться «не отвечает»Проверить, что сборка открывает окно
«недостаточно места: нужно ~1400 МБ, свободно 900 МБ»Нужно не меньше двух размеров архива: сам zip и распакованная копияОсвободить место или вынести папку для билдов на другой диск
SmartScreen или антивирус задерживает скачанный exeОбычное поведение WindowsДобавить папку для билдов в исключения антивируса

Чеклист издателя

Со стороны издателя от обновлений нужно немного: поднимать версию на каждый релиз и класть рядом с архивом правильный манифест.

  • версия сборки поднята и уникальна для этого релиза;
  • в корне архива (после срезания одной обёрточной папки) лежит исполняемый файл;
  • путь к нему в манифесте — без обёрточной папки, для Linux — без .exe;
  • контрольная сумма и размер посчитаны по тому самому архиву, который заливаете;
  • манифест лежит рядом с zip: manifest.json для Windows, manifest-linux-x64.json для Linux;
  • в папку Яндекс.Диска сначала уходит zip, манифест — последним.

Ограничения, о которых лучше знать заранее:

  • частичных обновлений нет — каждый раз скачивается весь архив целиком;
  • цепочек миграций между версиями нет — сборки считаются самодостаточными, перескакивать через версии можно. Если сборке нужна пошаговая миграция сохранений, эта схема не подойдёт;
  • очереди версий нет — манифест это указатель, а не история. Если между проверками стендов вы перезаписали манифест дважды, промежуточную версию стенд не увидит и устанавливать не будет.

Обновление самого Watchdog

Сам Watchdog обновляется не из вашей папки, а из папки релизов Uniday, и настраивать для этого ничего не нужно. Самообновление есть в обеих редакциях. Как оно работает, как его отключить и как вернуть предыдущую версию — в руководстве пользователя, п. 9.2 и в инструкции по установке, раздел 8. Установка пакетом на Linux сама себя не обновляет — подробности на странице «Установка на Linux».

Ограничения

  • Источник обновлений — только Яндекс.Диск. Другие облака, S3 и свой веб-сервер не поддерживаются.
  • Публичная папка — значит, сборка доступна любому, у кого есть ссылка. Это цена отказа от сервера и токенов. Ссылку не индексируют, но защиты содержимого нет — для чувствительных сборок способ не годится.
  • Суточный лимит скачиваний. Яндекс включает его, когда файл скачивают много раз за сутки; точный порог не публикуется. При сборке в полтора гигабайта и большом числе стендов в него реально упереться — скачивание будет завершаться ошибкой Яндекс.Диска о превышении лимита. Помогают тариф Яндекс 360 на аккаунте-владельце, обновление стендов по очереди или другое хранилище для сборок. Манифест маленький, на лимит он не влияет.
  • Ограничения публичной папки: до 50 ГБ и до 10 000 файлов.
  • Заливка на Яндекс.Диск — вручную. Автоматической загрузки архива и манифеста нет.
  • Одному приложению — одна публичная папка. Подпапки для разных экспонатов в одной папке не поддерживаются.
  • Каждое приложение обновляется независимо: своя папка для билдов, своя история версий, свои апробация и карантины.

Дальше

© UNIDAY, 2014-2025

ООО «Юнидэй»
г. Саратов, ул. Бахметьевская 44/64, оф. 72
ИНН: 6454142737
КПП: 645401001
ОКВЭД: 62.01 Разработка компьютерного программного обеспечения.
Код вида деятельности: 22.01

© UNIDAY, 2014-2025

ООО «Юнидэй»
г. Саратов, ул. Бахметьевская 44/64, оф. 72
ИНН: 6454142737
КПП: 645401001
ОКВЭД: 62.01 Разработка компьютерного программного обеспечения.
Код вида деятельности: 22.01

© UNIDAY, 2014-2025

ООО «Юнидэй»
г. Саратов, ул. Бахметьевская 44/64, оф. 72
ИНН: 6454142737
КПП: 645401001
ОКВЭД: 62.01 Разработка компьютерного программного обеспечения.
Код вида деятельности: 22.01