Функция автоматического обновления программы OsEngine предназначена в первую очередь для пользователей, которые хранят своих роботов в папке Custom или пользуются только встроенными роботами. Раньше, чтобы обновить работающий терминал, надо было скачать весь код проекта с сайта Github в виде zip-архива, распаковать, перенести туда папки Data, Engine, Custom, запоминать версию, с которой ушёл, и испытывать прочие неудобства.

Сейчас предлагается упрощённый способ обновления: нажатием пары кнопок закачать свежие файлы программы в старое расположение и через несколько секунд продолжить торговлю.
После скачивания архива с версией OsEngine, содержащей модуль обновления, начальное окно после запуска будет выглядеть так:
Новая кнопка должна сообщить об актуальности версии программы сообщением «Обновить (0)», то есть с момента последнего изменения файла сборки OsEngine.exe на Github не добавлено ещё ни одного коммита.
При первом запуске OsEngine с модулем обновления в папке Debug\Engine создаётся папка Updater, в которой будут содержаться все ресурсы, относящиеся к процессу обновления.
В ней создаётся файл LastUpdatesInfo.txt, куда записывается время последнего коммита для фиксации времени версии программы. Это будет отправляться серверу, который сообщит об изменившихся файлах и коммитах, сделанных позже этого времени.
Также создаётся файл FilesVersionsTime.txt — со списком файлов папки Debug и временем их последнего изменения. В последующем по нему будут сравниваться файлы и определяться их статус.
В проекте появится новое мини-приложение Updater.exe, которое будет непосредственно обновлять файлы.
Чтобы узнать об изменениях, в момент запуска OsEngine связывается со специальным сервером, и, если ему это не удастся, на кнопке в скобках отобразится знак «?».
Если с момента последнего обновления в проект были внесены какие-либо изменения, кнопка будет в активированном состоянии и будет показывать, сколько коммитов уже пропущено:
После нажатия кнопки откроется окно модуля обновлений:

Окно содержит элементы управления обновлением и информационные таблицы:
1) Кнопка «Запросить статус обновлений» — предназначена для отправки запроса на сервер, чтобы получить самую свежую информацию об обновлениях в репозитории OsEngine на Github.
2) Панель с вкладками, в которых имеются информационные таблицы и кнопки управления.
3) Область с лог-сообщениями работы модуля.
Вкладка «Обновление»
Содержит таблицу со списком файлов в папке Debug. Файлы, которые изменились, либо были удалены, либо вновь добавлены в проект, выделены красным цветом. Имя файла представлено в виде пути относительно папки Debug. Также имеются колонки с указанием размера файла, временем создания новой версии и временем текущей версии на ПК пользователя, и состояние файла. У файла может быть 4 состояния:
1) Actual — файл не изменился.
2) Obsolete — файл устарел, требует замены.
3) New — файл был впервые добавлен в папку Debug.
4) Removed — файл был удалён из папки Debug.
Внизу вкладки имеется кнопка «Обновить», которая запускает процесс обновления.
Вкладка «Коммиты»
Содержит таблицу с названием коммита и временем его добавления в репозиторий. Время в этой таблице, а также в первой таблице с файлами указано в формате UTC, который используется на Github.
Вкладка «Версии»
Содержит таблицу, указывающую на хранилище файлов папки Debug, которые были записаны во время предыдущих сеансов обновления. Имеется колонка с временем записи, колонка с относительным путём к папке с файлами и колонки с кнопками «Открыть» и «Откатить».
Кнопка «Открыть» открывает папку, указанную в выбранной строке.
Кнопка «Откатить» запускает процесс возврата к выбранной версии OsEngine.
Процесс обновления
После нажатия кнопки «Обновить» появляется предупреждение о том, что могут быть утеряны скрипты, входящие в текущую сборку OsEngine.
При нажатии «Принять» происходят следующие действия:
В папке Updater создаются:
— резервная копия папки Debug в подпапке Builds;
— папка Temp, куда скачиваются изменённые и новые файлы, записываются служебные файлы Files_For_Delete.txt со списком файлов для удаления, LastUpdatesInfo.txt с временем последнего коммита для фиксации времени версии, на которую мы обновляемся, и FilesVersionsTime.txt с новыми версиями файлов.
Если среди изменённых файлов окажется файл приложения Updater.exe, он обновится первым.
Затем произойдёт завершение работы программы OsEngine и запустится приложение Updater.exe, появится консоль, отображающая ход процесса обновления файлов.
Процесс занимает несколько секунд, и после этого программа OsEngine автоматически перезапускается.
Окно консоли будет на экране ещё 20 секунд, чтобы можно было убедиться, что всё прошло без ошибок. Если нужно сразу закрыть его, нажимаем клавишу Y, если необходимо ещё время — нажимаем клавишу N.
Также все лог-сообщения по процессу обновления записываются в файл UpdaterLog_[дата].txt в папке Engine\Log.
Если всё прошло штатно, кнопка в главном окне программы покажет 0 коммитов.
В окне модуля обновлений статус файлов также обновится:
Если обновление завершилось с ошибкой, необходимо выполнить откат, поскольку часть файлов могла измениться.
Важные ограничения модуля обновления
1) Если вы обновите с помощью модуля клонированный проект, который вы ранее обновляли средствами Git, у вас в ветке master появятся незафиксированные изменения:
Их лучше отменить и обновиться через Git.
2) Модуль обновления следит только за папкой Debug. Если вы активно программируете в кодовой базе проекта, храните там своих роботов и обновитесь через модуль, файлы, которые не в папке Debug, останутся прежними, но при запуске нового файла OsEngine.exe ваши роботы не будут обнаруживаться ни в тестере, ни в торговом модуле. Придётся откатывать версию или делать свою сборку проекта.
Откат к предыдущей версии
Функция отката к предыдущим версиям запускается нажатием кнопки «Откатить» в строке с выбранной папкой в таблице «Версии»:
Появляется предупреждение:
После нажатия кнопки «Принять» программа закрывается и запускается Updater.exe, все файлы возвращаются на прежнее место. Если до этого были добавлены новые файлы, они удаляются.
OsEngine перезапускается и получает от сервера информацию об обновлениях со времени версии, на которую мы откатились.
Особенность отката версий
Откатываться лучше на ближайшую версию. Если есть несколько резервных сборок и надо откатиться на более раннюю версию, то лучше откатывать по порядку, начиная от ближайшей.
Удачных алгоритмов

https://smart-lab.ru/company/os_engine/blog/1024149.php
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Канал Научный трейдинг (Bad Quant): https://t.me/bad_quant