vadimcontenthunter / git-scripts
v1.0.4
2022-12-26 04:44 UTC
Requires
- psr/log: ^3.0
Requires (Dev)
- phpunit/phpunit: ^9.5.16
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-09-26 08:36:33 UTC
README
这个项目的想法在于实现任务在发送到远程仓库之前的顺序执行。
示例
示例 1. 线性任务链
-
创建一个脚本的入口点,用于实现任务。入口点将是 git-scripts.php 文件。
-
实现 Git 钩子 pre-push,在其中启动入口点 git-scripts.php
#!/usr/bin/sh php 'git-scripts.php'
-
在 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. 分支任务链
-
创建一个脚本的入口点,用于实现任务。入口点将是 git-scripts.php 文件。
-
实现 Git 钩子 pre-push,在其中启动入口点 git-scripts.php
#!/usr/bin/sh php 'git-scripts.php'
-
创建另一个脚本 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);
-
在 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);