Почему возникает ошибка PHPStan на Gitlab-pipeline для WordPress-проекта?
Есть Wordpress-проект на Bedrock, докеризован, локально ядро WP тянется как composer-зависимость
В числе зависимостей есть PHPStan, локально отрабатывает корректно (No Errors), как только запускается Gitlab-pipeline - падает в красное с множеством ошибок вида
Function add_filter invoked with 2 parameters, 0 required |
Function add_filter invoked with 2 parameters, 0 required
- хотя и согласно спецификации, и согласно упоминаниям в ядре все вызовы функций корректные. Чем может быть вызвано подобное падение?
p.s. Иногда получается "позеленить" пайплайн пересборкой образа и повторным запуском джобы с PHPStan - без дополнительных коммитов, т.е. проблема не в коде
Дополнительно:
версия php локально и в CI одинаковая?
Проблему удалось решить. Пока я был в отпуске выяснилось две вещи:
- Наши девопсы обновили гитлаб-раннеры с версии 15.8.* до 15.11.*, в связи с чем PHPStan приобрёл довольно странную особенность поведения (п2):
- Теперь PHPStan привередлив к синтаксису поля scanDirectories и не поддерживает формат директорий вида ./directory/, но поддерживает directory/
Так что решение проблемы было в замене содержимого конфиг-файла phpstan.neon с:
parameters: scanDirectories: - ./wp-content/mu-plugins/ - ./wp-content/plugins/ |
parameters: scanDirectories: - ./wp-content/mu-plugins/ - ./wp-content/plugins/
на:
parameters: scanDirectories: - wp-content/mu-plugins/ - wp-content/plugins/ |
parameters: scanDirectories: - wp-content/mu-plugins/ - wp-content/plugins/
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

PHPStan на GitLab pipeline для WordPress-проекта чаще всего падает не из-за GitLab, а из-за того, что в CI нет полного окружения WordPress: не установлены зависимости Composer, не подключены stubs для WordPress/WooCommerce/ACF, другой PHP version, другой autoload или анализируется код, который локально подгружается через WordPress hooks.
Типовые причины:
Function get_field not found,Class WC_Product not found— нет stubs для плагинов.Call to undefined function add_action— не подключены WordPress stubs.vendor/autoload.php.Для WordPress обычно ставят
szepeviktor/phpstan-wordpressи подключают его вphpstan.neon:composer require --dev phpstan/phpstan szepeviktor/phpstan-wordpress
includes: - vendor/szepeviktor/phpstan-wordpress/extension.neon parameters: level: 5 paths: - wp-content/themes/your-theme - wp-content/plugins/your-plugin excludePaths: - */vendor/* - */node_modules/*
В
.gitlab-ci.ymlважно сначала установить зависимости и запускать ту же команду, что локально:phpstan: image: php:8.2-cli script: - apt-get update && apt-get install -y git unzip - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - php composer-setup.php --install-dir=/usr/local/bin --filename=composer - composer install --no-interaction --prefer-dist - vendor/bin/phpstan analyse -c phpstan.neon
Правильная диагностика: взять точный текст ошибки из GitLab job log и воспроизвести команду локально в чистой папке после
composer install. Если ошибка только в CI, сравните PHP version, переменные окружения, working directory и список установленных dev-зависимостей.