vadimcontenthunter / git-scripts
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-05-26 08:04:19 UTC
README
Идея этого проекта заключается в реализации последовательного запуска задач, перед отправкой в удаленный репозиторий.
Примеры
Пример 1. Линейная цепочка задач
-
Создадим точку входа для вызова скрипта, где будут реализованы задачи. В качестве точки входа будет файл git-scripts.php
-
Реализуем Git hook 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 hook 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. Вторая задача не будет выполнена в случае успешной 1 задачи из ветки 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);