Обновление встроенных модулей¶
Для встроенных модулей, так же как для третьесторонних, имеется возможность организации обновления, отдельного от ядра. В этом документе будут описаны особенности, связанные с обновлением таких аддонов.
Структура обновляемого модуля¶
Предполагается, что подобные модули не будут обновляться вместе с ядром и соответсвенно все вспомогательные скрипты, такие как миграции и валидаторы, должны быть отделены от скриптов ядра. Скрипт сборки пакета ожидает следующую структуру:
├── app
│ └── addons
│ └── [sample]
│ ├── addon.xml
│ ├── config.php
│ ├── func.php
│ ├── Tygh
│ │ └── UpgradeCenter
│ │ └── Connectors
│ │ └── [Sample]
│ │ └── Connector.php
│ └── upgrades
│ ├── [version1]
│ │ ├── migrations
│ │ │ ├── 467676233_migration1.php
│ │ │ └── 467676233_migration2.php
│ │ │
│ │ ├── validators
│ │ │ ├── validator1.php
│ │ │ └── validator2.php
│ │ │
│ │ ├── scripts
│ │ │ ├── pre_script.php
│ │ │ └── post_script.php
│ │ │
│ │ ├── extra_files
│ │ │ ├── extra_file1.php
│ │ │ └── extra_file2.php
│ │ │
│ │ └── extra
│ │ └── extra.php
│ │
│ │
│ └── [version2]
│ ├── migrations
│ │ ├── 467676233_migration1.php
│ │ └── 467676233_migration2.php
│ │
│ ├── validators
│ │ ├── validator1.php
│ │ └── validator2.php
│ │
│ ├── scripts
│ │ ├── pre_script.php
│ │ └── post_script.php
│ │
│ ├── extra_files
│ │ ├── extra_file1.php
│ │ └── extra_file2.php
│ │
│ └── extra
│ └── extra.php
│
Где:
- [sample] — название модуля.
- [version1] — версия, например 1.0.0.
- [version2] — версия, например 2.0.0.
- app/addons/upgrades/[version]/migrations — папка с миграциями.
- app/addons/upgrades/[version]/validators — папка с валидаторами.
- app/addons/upgrades/[version]/scripts — папка с PRE/POST скриптами.
- app/addons/upgrades/[version]/extra_files — папка с дополнительными файлами.
- app/addons/upgrades/[version]/extra/extra.php — файл для расширения package.json пакета обновления.
Файлы и директории в app/addons/upgrades/[version] не являются обязательными, например, если в новой версии не было изменения в БД, то нет необходимости создавать app/addons/upgrades/[version]/migrations, скрипт сборки пакета в таком случае просто сообщит, что миграций нет.
Добавляем коннектор¶
Коннектор (т.н. “upgrade connector”) позволяет “Центру обновлений” запрашивать с сервера обновлений необходимые обновления. Для внутренних модулей сервером обновлений будет являться helpdesk. Для облегчения написания коннектора в ядре подготовлен базовый класс коннектора TyghUpgradeCenterConnectorsBaseAddonConnector. Необходимо создать файл app/addons/[ADDON_NAME]/Tygh/UpgradeCenter/Connectors/Upgrade/Connector.php.
namespace Tygh\UpgradeCenter\Connectors\[ADDON_NAME];
use Tygh\Addons\AXmlScheme;
use Tygh\Addons\SchemesManager;
use Tygh\Registry;
use Tygh\UpgradeCenter\Connectors\BaseAddonConnector;
/**
* Class Connector
* @package Tygh\UpgradeCenter\Connectors\Ebay
*/
class Connector extends BaseAddonConnector
{
/** @inheritdoc */
public function __construct()
{
parent::__construct();
/** @var AXmlScheme $addon_scheme */
$addon_scheme = SchemesManager::getScheme('[ADDON_NAME]');
$this->addon_id = '[ADDON_NAME]';
$this->license_number = '';
$this->product_edition = '[ADDON_NAME]_EDITION';
$this->product_name = $addon_scheme->getName();
$this->product_version = $addon_scheme->getVersion();
$this->product_build = '';
$this->notification_key = 'upgrade_center:addon_[ADDON_NAME]';
}
}
Где:
addon_id
— символьный код модуля.license_number
— лицензия модуля.product_edition
— редакция модуля, должна быть равна значению редакции в соответствующем товаре в helpdesk.product_name
— название модуля.product_version
— текущая версия модуля.product_build
— номер сборки.notification_key
— ключ для нотификаций об upgrade пакете.
Создание релиза модуля¶
Для автоматической генерации архива с модулем был реализован скрипт _tools/upgrade/release_addon.php
.
Пример использования:
php release_addon.php addon_name
Где:
addon_name
- название модуля.
В результате выполнения скрипта в папке _tools/upgrade будет создан файл: addon_name_version.tgz (например: ebay_2.1.0.tgz).
Создание пакета обновления¶
Для автоматической генерации upgrade пакета был написан скрипт _tools/upgrade/build_addon.php
.
Пример использования:
php build_addon.php old_release.tgz new_release.tgz
Где:
- old_release.tgz — tgz-архив текущей версии модуля (релиз старой версии).
- new_release.tgz — tgz-архив новой версии модуля (новый релиз).
Скрипт работает по тому же принципу, что и соответствующий скрипт для генерации пакета обновления ядра, и поддерживает все те же возможности. Вспомогательные скрипты (валидаторы, миграции), будут браться из релиза модуля.
После выполнения скрипта в папке _tools/upgrade/packs будет создана папка upgrade и файл с архивом (например: upgrade_2.1.0_ebay–2.1.1_ebay.zip). Созданный архив можно добавлять в HelpDesk в соответствующий товар в табе updates.