Описание функции
Gating PR через GitHub Actions: PHP lint/smoke-тесты и lint vueManager. Сейчас .github/workflows/release.yml только собирает релиз по тегу — регрессии не ловятся автоматически.
Проблема, которую решает
В core/components/minishop3/tests/ лежат standalone PHP-скрипты (DirectFilterKeys, EmailVerificationUrl, Phinx*, ProductCatalogService, UtilsParseImportedOptionValue). Их нет в CI. Vue Manager: npm run lint локально, на PR не обязателен.
Аудит: почти нулевое покрытие горячих путей (Cart/Order/auth/ImportCSV/OrdersController).
Предлагаемое решение
Минимальный Viable Gate (без большого rewrite):
- Workflow
ci.yml на pull_request + push в основные ветки.
- PHP:
composer install в core/components/minishop3, php -l по изменённым/всем src/, прогон существующих tests/*.php с ненулевым exit code при fail.
- Vue:
npm ci && npm run lint в vueManager/ (Node 18+).
- Позже (отдельным PR): PHPUnit/Pest + пара unit-тестов на чистые функции (
Utils::parseImportedOptionValue уже почти готов).
Не тащить полный e2e MODX в первый PR.
Альтернативные варианты
- Только
php -l без прогона tests — слабее, но лучше нуля.
- PHPUnit сразу на всё — дороже; сначала обернуть существующие скрипты.
Примеры использования
# локально до push
cd core/components/minishop3 && php tests/ProductCatalogServiceTest.php
cd vueManager && npm run lint
Критерии приёмки
Дополнительный контекст
Источник: аудит техдолга Jul 2026. F.I.R.S.T.: начать с Fast/Independent скриптов, которые уже есть.
Описание функции
Gating PR через GitHub Actions: PHP lint/smoke-тесты и lint vueManager. Сейчас
.github/workflows/release.ymlтолько собирает релиз по тегу — регрессии не ловятся автоматически.Проблема, которую решает
В
core/components/minishop3/tests/лежат standalone PHP-скрипты (DirectFilterKeys, EmailVerificationUrl, Phinx*, ProductCatalogService, UtilsParseImportedOptionValue). Их нет в CI. Vue Manager:npm run lintлокально, на PR не обязателен.Аудит: почти нулевое покрытие горячих путей (Cart/Order/auth/ImportCSV/OrdersController).
Предлагаемое решение
Минимальный Viable Gate (без большого rewrite):
ci.ymlнаpull_request+pushв основные ветки.composer installвcore/components/minishop3,php -lпо изменённым/всемsrc/, прогон существующихtests/*.phpс ненулевым exit code при fail.npm ci && npm run lintвvueManager/(Node 18+).Utils::parseImportedOptionValueуже почти готов).Не тащить полный e2e MODX в первый PR.
Альтернативные варианты
php -lбез прогона tests — слабее, но лучше нуля.Примеры использования
Критерии приёмки
integrationи optional).Дополнительный контекст
Источник: аудит техдолга Jul 2026. F.I.R.S.T.: начать с Fast/Independent скриптов, которые уже есть.