Обнаружение рассинхрона версии пакета и файлов на диске - #624
Conversation
Persist ms3_version from the transport signature and warn in the manager when disk MiniShop3::$version drifts from the installed package.
|
Спасибо, механика верная — проверил по коду, не по описанию:
Тесты локально на ветке, смерженной с актуальной Три вещи прошу доработать. 1. Не покрыт сценарий, где каталога на диске нет вообщеБлок проверки стоит после гварда Кейс из #622 это не ломает — там каталог существовал со старыми файлами 1.4.0, сервис регистрировался. Но при первой установке с полным провалом копирования (в логе из issue не скопировалось 855 файлов Показательно, что твой же тест утверждает Предлагаю поднять блок выше гварда: case 'OnManagerPageBeforeRender':
$packageVersion = (string)$modx->getOption('ms3_version', null, '');
$diskVersion = $modx->services->has('ms3')
? (string)$modx->services->get('ms3')->version
: '';
// проверка здесь, с отдельным текстом для $diskVersion === ''
// («файлы компонента не найдены на диске»)
if (!$modx->services->has('ms3')) {
$modx->log(modX::LOG_LEVEL_ERROR, '[MiniShop3] Service not registered');
break;
}2. Ложные срабатывания при git/rsync-деплоеСравнение строгое в обе стороны ( Заодно просьба добавить в новый тест-файл ассерт, что 3.
|
Warn only when disk lags or is missing, surface total copy failure before the ms3 guard, throttle WARN logs, and harden resolver/health edge cases.
Ответ на ревьюУчтены три обязательных пункта и мелочи из комментария:
Также: Gate E: |
Описание
Обновление пакета может завершиться «успешно» в MODX, даже если файлы не скопировались на диск. В БД оказывается новая версия и миграции, а
core/components/minishop3/остаётся старым. Пользователь об этом не узнаёт.Этот PR:
ms3_versionиз signature транспортного пакета (resolver_09_version.php).OnManagerPageBeforeRenderсравнивает$ms3->version(диск) сms3_version(пакет) и показывает заметный баннер при расхождении.src/, чтобы проверка работала даже когда файлы на диске не обновились (плагины не static → код в БД).Health-эндпоинты
/api/mgr/healthи/api/v1/healthуже читаютms3_versionи начнут отдавать реальную версию после установки.Тип изменений
Связанные Issues
Closes #622
Как это было протестировано?
composer ci:php/composer test,npm run lint:ci,composer stan/ GitHub Actions CI)Конфигурация тестирования:
fix/issue-622-version-mismatch-checkСкриншоты (если применимо)
Чеклист
composer stan/ CI jobPHPStan)npm run lint:ciдля Vue) — Vue не затрагивалсяДополнительные заметки
ms3_version— обычный textfield вms3_main; значение выставляет резолвер. Ручное редактирование может скрыть или вызвать ложное предупреждение.PackageVersionкласс, оставлен contract-тест диск-независимости.