Создание пакета обновлений для ядра¶
Предупреждение
В статье описана работа с внутренним инструментом, который собирает пакеты обновлений для ядра CS-Cart.
Пакет обновлений — архив для обновления текущей версии проекта, содержащий в себе изменения между двумя релизами, а также включающий вспомогательные скрипты (валидация, миграция). Для автоматического создания такого архива был написан скрипт build_core.php (_tools/upgrade/).
Пример использования:
cd _tools/upgrade
php build_core.php release1.tgz release2.tgz
Где:
- release1.tgz - путь к архиву с предыдущим релизом, например cscart_v4.3.4.tgz.
- release2.tgz - путь к архиву с текущим релизом, например cscart_v4.3.5.tgz.
В результате выполнения скрипта в директории _tools/upgrade/ будет создана папка packs, в которой будет находиться запакованный upgrade пакет, с именем upgrade_[old_version]_[old_edition]-[new_version]_[new_edition].zip.
Папка upgrade — содержимое пакета обновлений в незапакованном виде. Эта директория понадобится в случае необходимости вручную внести изменения в пакет обновлений.
Важно
Сборку пакета обновлений необходимо осуществлять находясь в конечной релизной ветке. Например, если необходимо собрать пакет для CS-Cart Ultimate v4.3.5, то текущая git ветка должна быть 4.3.5. Это ограничение связанно, с тем, что вспомогательные скрипты находятся вне архива с релизом, соответственно эти скрипты будут получены с текущей версии репозитория.
Языки и языковые пакеты¶
В пакет обновления будут включены все доступные на текущий момент языковые пакеты (текущей ветки).
Миграции¶
По умолчанию миграции будут получены из директории _tools/migration/migrations/. Для установки другой директории можно воспользоваться методом setMigrationsPath
:
$builder->setMigrationsPath($tools_dir . '/migration/migrations');
Валидаторы¶
Файлы, позволяющие проверить состояние магазина, перед запуском обновления. Как пример: проверить текущую минимальную версию PHP и в случае не соответствий сообщить о проблеме до запуска обновления. Содержимым таких файлов должен быть php
класс, реализующий интерфейс TyghUpgradeCenterValidatorsIValidator и находящийся в пространстве имен TyghUpgradeCenterValidators. По умолчанию валидаторы будут получены из директории _tools/migration/validators/[NEW_VERSION]/, где:
- [NEW_VERSION] - новая версия, например 4.3.5.
Для установки другой директории можно воспользоваться методом setValidatorsPath
:
$builder->setValidatorsPath($tools_dir . '/migration/validators/' . $archive_to->getVersion());
PRE/POST скрипты¶
Работают по принципу миграций. Все PRE/POST скрипты ищутся в папке _tools/migration/scripts/[NEW_VERSION]/, где:
- [NEW_VERSION] - новая версия, например 4.3.5.
Имя скриптов должны содержать префиксы pre_
и post_
. Пример:
pre_create_folder.php
post_clear_garbage.php
Скрипты могут содержать любой PHP код.
Примечание При сборке пакета, в pre скрипт будет дописан код, для проверки статуса лицензии установленного магазина, таким образом, в upgrade пакете всегда присутствует pre скрипт.
Для установки другой директории можно воспользоваться методом setScriptsPath
:
$builder->setScriptsPath($tools_dir . '/migration/scripts/' . $archive_to->getVersion());
Extra¶
Иногда есть необходимость в автоматическом режиме изменять package.json файл (например, удалить файлы, которые не попали в список). Для этого можно создать файл в папке _tools/migration/extra/[NEW_VERSION]/extra.php.
Файл должен вернуть массив данными, которые добавятся package.json, например:
<?php
return array(
'files' => array(
"app/addons/tags/controllers/backend/pages.pre.php" => array(
"status" => "deleted",
"hash" => "3d9d910be344a8450f81a4618863595d"
),
"app/lib/vendor/robmorgan/phinx/README.mdown" => array(
"status" => "deleted",
"hash" => "2bd280684e096088e4ce7dbb89e77376"
),
)
);
Чтобы указать другой файл можно воспользоваться методом setExtraPath
:
$builder->setExtraPath($tools_dir . '/migration/extra/' . $archive_to->getVersion() . '/extra.php');
Исключение файлов и определенных расширений¶
При сборке пакета обновления можно указать, какие файлы или расширения необходимо пропустить. Для исключения определенных файлов или путей можно воспользоваться методом setExcludeFiles
:
$builder->setExcludeFiles(
array(
'customer_area_logo.gif',
'gift_cert_logo.gif',
'invoice_logo.gif',
'customer_screenshot.png',
'customer_area_logo.png',
'install.log',
),
array(
'customer_area_logo.gif',
'gift_cert_logo.gif',
'invoice_logo.gif',
'customer_screenshot.png',
'customer_area_logo.png',
'install.log',
'var/langs',
)
);
Для исключения определенных расширений можно воспользоваться методом setExcludeExtensions
:
$builder->setExcludeExtensions(array(), array('sql'));
Оба метода принимают два параметра:
- Исключения для новых или измененных файлов
- Исключения для удаленных файлов.
Исключение аддонов¶
Для исключения модулей из сборки обновления ядра, можно воспользоваться методом setExcludeAddons
:
$builder->setExcludeAddons(array(
'ebay',
'twigmo' => array(
'twigmo.functions.php',
'twigmo_ult_F306T401.php',
'twigmo_mve_F306T401.php',
)
));
Метод принимает один параметр — массив исключенных модулей. Для того, чтобы частично разрешить обновления файлов исключаемого модуля, можно указать аддон в виде addon_name => [разрешенные файлы]
, таким образом из пакета обновления будут исключены все файлы модуля addon_name
за исключением файлов переданных в массиве [разрешенные файлы]
.