GitHub Actions中PHPStan/PHPMD无报告但本地有问题求助
我在GitHub Actions工作流中运行PHPStan和PHPMD,本地环境能正常返回代码问题列表,但在GitHub Actions里完全没有问题报告。已经通过ls和pwd命令确认过路径正确,不知道该从哪入手排查。
环境信息
本地环境
- Laravel Sail
- PHP版本:8.2.12
- PHPStan版本:1.10.47
- PHPMD版本:2.14.1(使用PHAR版本避免Laravel相关错误)
GitHub Actions环境
- 运行器:ubuntu-latest
- PHP版本:8.2(工作流中配置)
- PHPMD版本:2.14.1(使用PHAR版本避免Laravel相关错误)
工作流配置
- name: Run PHPStan run: | ./vendor/bin/phpstan analyse --error-format=raw --no-progress --memory-limit=1G --configuration=./phpstan.neon | reviewdog -f=phpstan -name="PHPStan" -reporter=github-pr-review -level=warning - name: Run PHPMD run: | php /usr/local/bin/phpmd.phar ./app/Exceptions,./app/Http,./app/Models,./app/Contracts,./app/Repositories,./app/Services,./routes,./tests checkstyle ./phpmd.xml | reviewdog -f=checkstyle -name="PHPMD" -reporter=github-pr-review -level=warning
GitHub Actions日志
PHPStan执行日志
Run ./vendor/bin/phpstan analyse --error-format=raw --no-progress --memory-limit=1G --configuration=./phpstan.neon | reviewdog -f=phpstan -name="PHPStan" -reporter=github-pr-review -level=warning ./vendor/bin/phpstan analyse --error-format=raw --no-progress --memory-limit=1G --configuration=./phpstan.neon | reviewdog -f=phpstan -name="PHPStan" -reporter=github-pr-review -level=warning shell: /usr/bin/bash -e {0} env: COMPOSER_PROCESS_TIMEOUT: 0 COMPOSER_NO_INTERACTION: 1 COMPOSER_NO_AUDIT: 1 REVIEWDOG_GITHUB_API_TOKEN: ***
PHPMD执行日志
Run php /usr/local/bin/phpmd.phar ./app/Exceptions,./app/Http,./app/Models,./app/Contracts,./app/Repositories,./app/Services,./routes,./tests checkstyle phpmd.xml | reviewdog -f=checkstyle -name="PHPMD" -reporter=github-pr-review -level=warning php /usr/local/bin/phpmd.phar ./app/Exceptions,./app/Http,./app/Models,./app/Contracts,./app/Repositories,./app/Services,./routes,./tests checkstyle phpmd.xml | reviewdog -f=checkstyle -name="PHPMD" -reporter=github-pr-review -level=warning shell: /usr/bin/bash -e {0} env: COMPOSER_PROCESS_TIMEOUT: 0 COMPOSER_NO_INTERACTION: 1 COMPOSER_NO_AUDIT: 1 REVIEWDOG_GITHUB_API_TOKEN: ***
排查方向
1. 单独执行工具,排除reviewdog干扰
当前命令将工具输出通过管道传给reviewdog,可能是reviewdog处理输出时出现问题。先在工作流中单独执行PHPStan和PHPMD,直接查看原始输出:
- name: Test PHPStan raw output run: ./vendor/bin/phpstan analyse --error-format=raw --no-progress --memory-limit=1G --configuration=./phpstan.neon - name: Test PHPMD raw output run: php /usr/local/bin/phpmd.phar ./app/Exceptions,./app/Http,./app/Models,./app/Contracts,./app/Repositories,./app/Services,./routes,./tests checkstyle ./phpmd.xml
如果单独执行能看到问题,说明是reviewdog的配置或权限问题;如果还是无输出,再排查工具本身。
2. 检查工具配置文件一致性
确认GitHub Actions环境中的phpstan.neon和phpmd.xml是否与本地完全一致,可能存在CI环境中配置文件被覆盖或未同步的情况。可以在工作流中添加步骤查看配置文件内容:
- name: Check PHPStan config run: cat ./phpstan.neon - name: Check PHPMD config run: cat ./phpmd.xml
3. 验证依赖安装完整性
本地使用Laravel Sail,依赖可能安装更完整,而GitHub Actions中composer install可能跳过了dev依赖。检查工作流中的composer命令是否添加--dev参数,确保PHPStan所需的dev依赖已安装:
- name: Install dependencies run: composer install --no-interaction --prefer-dist --dev
4. 对比PHP扩展差异
本地与CI环境的PHP扩展可能不一致,比如PHPStan需要的php-ast扩展、PHPMD需要的tokenizer扩展等。在工作流中添加步骤查看已安装的扩展:
- name: Check PHP extensions run: php -m
对比本地php -m的输出,确保CI环境安装了所有必要扩展。
5. 确认代码文件完整性
虽然用ls确认了路径,但要注意CI环境拉取的代码是否完整,比如本地存在但.gitignore忽略的文件在CI中缺失,或者分支代码不一致。可以在工作流中添加步骤查看当前分支和文件状态:
- name: Check git status run: | git branch git status ls -la ./app
6. 调整工具输出模式
比如PHPStan可以去掉--error-format=raw,用默认格式输出;PHPMD可以换用text输出格式直接查看结果:
- name: Run PHPMD with text output run: php /usr/local/bin/phpmd.phar ./app/Exceptions,./app/Http,./app/Models,./app/Contracts,./app/Repositories,./app/Services,./routes,./tests text ./phpmd.xml
内容的提问来源于stack exchange,提问作者ryo-kozin

