用于检查 PHP 代码覆盖率和 Symfony 代码嗅探器的预提交挂钩

Pre commit hook to check PHP code coverage and code sniffer for Symfony

如何为 PHP Symfony 代码做一个预提交挂钩来分析代码覆盖率和代码嗅探器报告?我应该使用哪些命令和工具?

截至目前,我可以使用三叶草格式的 PHPUnit 生成代码覆盖率报告:

#!/bin/bash

echo "##################################################################################################"
echo "Starting PHPUnit tests : "`date "+%y-%m-%d %H-%M-%S"`
echo "##################################################################################################"

php app/console -e=dev doctrine:database:drop --force
php app/console -e=dev doctrine:database:create
php app/console -e=dev doctrine:schema:create
php app/console -e=dev -n doctrine:fixtures:load
#phpunit -c app --coverage-html build/html
phpunit -c app --log-junit build/unit.xml
'[' -f build/coverage.xml ']'
phpunit -c app --coverage-clover build/coverage.xml
php app/console -e=dev doctrine:schema:drop --force
php app/console -e=dev doctrine:database:drop --force
echo "Finishing Cron at "`date "+%y-%m-%d %H-%M-%S"`
echo "Cron Task Complete"
echo "##################################################################################################"

如果您的 bash 脚本按预期工作,您只需将其命名为 pre-commit 并将其放入 git 挂钩:/path/to/repo/.git/hooks。您将在此目录中找到一些示例。

有关 git 钩子的更多信息:https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

那么,对于代码嗅探器,我推荐https://github.com/squizlabs/PHP_CodeSniffer

还有 https://github.com/phpro/grumphp 可以为您做所有事情。

当您可以使用客户端 git 挂钩轻松完成时,无需使用 grumphp。下面的示例 运行s php-cs-fixer 并在您 运行 git push origin ......

时防止将损坏的代码推送到 github 存储库

your_project_folder/.git/hooks/pre-push

#!/bin/sh

if [ -f ./bin/php-cs-fixer ]
then
    ./bin/php-cs-fixer fix --dry-run --verbose --diff src
    if [ $? -ne 0 ]
    then
        printf "\n\t3[1;31m[PHP-CS-Fixer] Push Aborted\n\n3[0m"

        return 1
    fi
fi

授予权限

chmod +x .git/hooks/pre-push

测试

git push origin .....

参见 example here