pccomponentes/ganchudo

用于管理钩子的项目

v1.0.1 2018-09-20 08:30 UTC

This package is auto-updated.

Last update: 2024-08-29 04:03:43 UTC


README

这个库用于统一你的项目代码审查任务,便于与版本控制系统中的钩子集成。该库将按阶段执行此分析,打印所有失败的阶段,如果所有阶段都正确执行,则返回正信号(0),如果任何阶段出现问题,则返回负信号(1)。每个阶段对应于执行一个控制台命令,这是你喜欢的分析工具。建议使用配置文件(如果有的话),以将需要执行的控制台命令减少到最小。

配置

要配置 ganchudo,在任何项目文件夹中创建一个 YAML 格式的文件(建议在项目根目录),如下所述。建议将其命名为 ganchudo.yml.dist 并将其放置在根目录中,以与其他类似工具保持一致性。

示例

ganchudo:
    inspectors:
        -   name: 'Composer Validation'
            command: 'composer.phar validate --strict'
        -   name: 'Php Linter'
            command: 'php -l <iterator>'
            iterator:
                in: ['src', 'tests']
                exclude: []
                file: '*.php'
        -   name: 'Php Code Sniffer'
            command: 'vendor/bin/phpcs --standard=phpcs.xml.dist'
        -   name: 'PhpUnit'
            command: 'vendor/bin/phpunit --configuration phpunit.xml.dist --no-coverage --testdox --colors=always'
            timeout: 3600

格式

Ganchudo 区分两种检查器:简单检查器和迭代器检查器。用于执行命令的根目录是配置文件所在的目录。

简单检查器

正如其名所示,这是最简单的阶段类型。它包括执行一个单独的控制台命令,我们将用名称标识它。

  • name: 必须的。字符串,表示阶段的名称。
  • command: 必须的。字符串,表示要执行的控制台命令。
  • timeout: 可选的。以秒为单位的正整数,表示要执行的过程的超时时间。

迭代器检查器

这是一个比上一个稍微复杂一些的阶段。某些工具需要在项目的每个文件上直接执行,例如 PHP -l。为了满足这一需求,阶段被定义为与上一个阶段相同,但有一些不同

  • name: 必须的。字符串,表示阶段的名称。
  • command: 必须的。字符串,表示要执行的控制台命令,但在正确的位置插入 <iterator> 字符串,稍后将用以下要详细说明的选项替换。
  • iterator: 包含以下选项的数组
    • in: 必须的。源目录的数组。
    • file: 必须的。与文件名匹配的模式。接受 glob 模式和相对 in 的正则表达式模式。
    • exclude: 可选的。要排除的目录的数组,相对于 in 中指定的。

执行

要执行 ganchudo,创建一个 ganchudo 配置文件,然后在项目根目录的终端中写入

    $> vendor/bin/ganchudo ganchudo.yml.dist

如果一切顺利,进程将以信号 0 结束。如果任何阶段失败,它将以 1 结束。

与 GIT 钩子的集成

如果想要将此代码审查作为接受 git 提交的先决条件,只需在项目 .git\hooks 目录中创建一个名为 pre-commit 的文件,内容如下

#!/usr/bin/bash
SCRIPT=$(../../vendor/bin/ganchudo ../../ganchudo.yml.dist)
STATUS=$?
echo "$SCRIPT"
exit $STATUS

如果你有一个基于 docker-compose 的工作环境,脚本将看起来像这样

#!/usr/bin/bash
SCRIPT=$(docker-compose -f "<docker-compose-yml-file>" run --rm <service-name> sh -c "vendor/bin/ganchudo ganchudo.yml.dist" 2>&1)
STATUS=$?
echo "$SCRIPT"
exit $STATUS