Phpstan с gitlab-ci не может найти srcApp_KernelDevDebugContainer.xml, потому что он находится в gitignore?
Это мой phpstan.neon
parameters:
checkMissingIterableValueType: false
checkGenericClassInNonGenericObjectType: false
symfony:
container_xml_path: '%rootDir%/../../../var/cache/dev/srcApp_KernelDevDebugContainer.xml'
bootstrap: '%rootDir%/../../../vendor/autoload.php'
Это мой фрагмент кода gitlab-ci
commit:
stage: analysis
variables:
APP_ENV: dev
cache:
untracked: true
paths:
- Source/var/cache/dev/
before_script:
- cd Source
- cp .env.example .env
- composer install --no-interaction --optimize-autoloader --classmap-authoritative
script:
- composer commit
only:
- merge_requests
И я получаю следующую ошибку:
In XmlServiceMapFactory.php line 29:
[PHPStan\Symfony\XmlContainerNotExistsException]
Container /builds/Mehlichmeyer/heracles-mvp-symfony/Source/vendor/phpstan/p
hpstan/../../../var/cache/dev/srcApp_KernelDevDebugContainer.xml does not e
xist
Проблема в том, что в моем контейнере gitlab-ci нет файла srcApp_KernelDevDebugContainer.xml, поскольку он находится в моем.gitignore (/var/ is). Есть идеи обходного пути?
2 ответа
Хорошо, я наконец нашел проблему. Я обновил свой Symfony с 4.x до 5.x, и мне пришлось настроить свой phpstan.neon
container_xml_path: '%rootDir%/../../../var/cache/dev/App_KernelDevDebugContainer.xml'
Локально это никогда не приводило к ошибке, потому что я не запускал bin / console cache:clear, поэтому старый container_xml_path работал нормально.
Чтобы получить этот файл, вы должны сгенерировать кеш для среды разработки с активированной отладкой. Думаю, это можно сделать в разделе "before_script":
before_script:
- cd Source
- cp .env.example .env
- composer install --no-interaction --optimize-autoloader --classmap-authoritative
- php bin/console cache:warmup --env=dev
Твой .env
файл должен иметь флаг отладки:
###> symfony/framework-bundle ###
APP_ENV=dev
APP_DEBUG=1
APP_SECRET=APP_SECRET
###< symfony/framework-bundle ###
Я не знаю gitlab-ci, но я сделал это с помощью github-actions, и он хорошо работает.