#!/bin/bash # # (c) Copyright codcodog # # PHP 语法检查以及代码规范检查 # # 依赖: # - php-cs-fixer # - php-parallel-lint set -e PHP='php' CODE_STYLE_CHECK='vendor/bin/php-cs-fixer fix --dry-run --diff --diff-format=udiff -vvv' CODE_SYNTAX_CHECK='vendor/bin/parallel-lint -j 10' # 若在 `docker` 则需要设置其项目路径 # 路径是相对 `php` 容器的工作目录路径而言 # 设置格式如:osp/, 绝对路径为:/data/www/osp/, /data/www 是容器的工作目录路径 # 注意最后是带 `/` # 若不是在 `docker` 则留空即可 prefix='osp/' files=$(git diff --cached --name-only) # 若 host 没有安装 PHP # 则使用 docker 环境的 PHP is_docker_php() { if ! command -v $PHP > /dev/null 2>&1; then PHP='docker exec php php' CODE_STYLE_CHECK="$PHP $prefix$CODE_STYLE_CHECK" CODE_SYNTAX_CHECK="$PHP $prefix$CODE_SYNTAX_CHECK" fi } is_php() { file_extension="${1##*.}" if [[ "$file_extension" == 'php' ]]; then return 0 fi return 1 } check_syntax() { if ! $CODE_SYNTAX_CHECK "$1" > /dev/null 2>&1; then $CODE_SYNTAX_CHECK "$1" exit 1 fi } check_style() { if ! $CODE_STYLE_CHECK "$1" > /dev/null 2>&1; then $CODE_STYLE_CHECK "$1" exit 1 fi } main() { is_docker_php for f in $files; do if is_php "$f"; then check_syntax "$prefix$f" check_style "$prefix$f" fi done } main exit 0