Создание пакета обновлений для ядра

Предупреждение

В статье описана работа с внутренним инструментом, который собирает пакеты обновлений для ядра 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 за исключением файлов переданных в массиве [разрешенные файлы].