vadimcontenthunter/git-scripts

v1.0.4 2022-12-26 04:44 UTC

This package is auto-updated.

Last update: 2024-09-26 08:36:33 UTC


README

这个项目的想法在于实现任务在发送到远程仓库之前的顺序执行。

示例

示例 1. 线性任务链

  1. 创建一个脚本的入口点,用于实现任务。入口点将是 git-scripts.php 文件。

  2. 实现 Git 钩子 pre-push,在其中启动入口点 git-scripts.php

    #!/usr/bin/sh
    
    php 'git-scripts.php'
    
  3. git-scripts.php 文件中实现任务列表 new Tasks(),添加任务 phpcs 以执行

    <?php
    
    declare(strict_types=1);
    
    require_once __DIR__ . "/vendor/autoload.php";
    
    use vadimcontenthunter\GitScripts\Tasks;
    use vadimcontenthunter\GitScripts\model\StandardTask;
    use vadimcontenthunter\MyLogger\MyLogger;
    use vadimcontenthunter\MyLogger\modules\ConsoleLogger;
    use vadimcontenthunter\MyLogger\formatters\BaseFormatter;
    
    $myLogger = new MyLogger(new ConsoleLogger(BaseFormatter::class));
    
    (new Tasks())
        ->addTaskList(
            (new StandardTask($myLogger))
                ->setTitle('phpcs')
                ->setExecutionPath('./vendor/bin/phpcs')
        )
        ->start() ? exit(0) : exit(1);

示例 2. 分支任务链

  1. 创建一个脚本的入口点,用于实现任务。入口点将是 git-scripts.php 文件。

  2. 实现 Git 钩子 pre-push,在其中启动入口点 git-scripts.php

    #!/usr/bin/sh
    
    php 'git-scripts.php'
    
  3. 创建另一个脚本 branch-search.php,用于判断指定的分支是否为活动分支。如果分支是活动的,则脚本将使用代码 0 结束。

    <?php
    
    declare(strict_types=1);
    
    if (!isset($argv[1])) {
        print_r(PHP_EOL . 'Аргумент не указан! Укажите ветку для поиска.' . PHP_EOL);
        exit(2);
    }
    
    $desired_branch = $argv[1];
    $output = null;
    $retval = null;
    
    exec('git branch', $output, $retval);
    
    foreach ($output as $key => $branch) {
        if (preg_match('~^\*\s' . $desired_branch . '~iu', $branch)) {
            echo "Ветка выбрана ($branch)" . PHP_EOL;
            exit(0);
        } else {
            echo "Ветка НЕ выбрана ($branch)"  . PHP_EOL;
        }
    }
    
    echo "Указанная ветка ($desired_branch) не выбрана."  . PHP_EOL;
    exit(1);
  4. git-scripts.php 文件中实现任务列表 new Tasks(),添加任务 branch-search,参数为要搜索的分支 dev-vadim。如果成功执行,则创建新的任务列表,在这种情况下添加一个任务 phpcs。第二个任务不会在成功执行第一个任务(分支 branch-search 的第一个任务)的情况下执行,因为它使用命令 exit(0); 结束工作。

    <?php
    
    declare(strict_types=1);
    
    require_once __DIR__ . "/vendor/autoload.php";
    
    use vadimcontenthunter\GitScripts\Tasks;
    use vadimcontenthunter\GitScripts\model\StandardTask;
    use vadimcontenthunter\MyLogger\MyLogger;
    use vadimcontenthunter\MyLogger\modules\ConsoleLogger;
    use vadimcontenthunter\MyLogger\formatters\BaseFormatter;
    
    $myLogger = new MyLogger(new ConsoleLogger(BaseFormatter::class));
    
    (new Tasks())
        ->addTaskList(
            (new StandardTask($myLogger))
                ->setTitle('branch-search')
                ->setExecutionPath('.\branch-search.php')
                ->addArgumentsAsString('dev-vadim')
                ->setWhenExecuteValue(function (StandardTask $thisTask, int $result) use ($myLogger) {
                    if($result === 0){
                        $myLogger->info('Началась ветвь от [' . $thisTask->getTitle() . ']');
                        (new Tasks())
                            ->addTaskList(
                                (new StandardTask($myLogger))
                                    ->setTitle('phpcs 1')
                                    ->setExecutionPath('./vendor/bin/phpcs')
                            )
                            ->result(function ($result) {
                                if ($result) {
                                    exit(0);
                                }
                            });
                    }
                })
        )
        ->addTaskList(
            (new StandardTask($myLogger))
                ->setTitle('phpcs 2')
                ->setExecutionPath('./vendor/bin/phpcs')
        )
        ->start() ? exit(0) : exit(1);

    результат работы

    如果在上面的示例中将任务 phpcs 1 替换为,则可以继续执行主要任务链

    (new StandardTask($myLogger))
        ->setTitle('ScriptReturn5Fake')
        ->setExecutionPath('.\tests\src\fakes\ScriptReturn5Fake.php')

    ScriptReturn5Fake 文件的实现

    <?php
    
    exit(5);

    результат работы