juststeveking / workflow
This package is aimed to be a simplistic PHP workflow package that works in a similar fashion to GitHub Actions.
Requires
- php: ^8.0
- ramsey/uuid: ^4.2
- symfony/yaml: ^6.0
- tightenco/collect: ^8.68
Requires (Dev)
- pestphp/pest: ^1.21
- phpstan/phpstan: ^1.2
- spatie/ray: ^1.32
README
This package is aimed to be a simplistic PHP workflow package that works in a similar fashion to GitHub Actions.
Installation
To install this package, use the following composer command:
composer require juststeveking/workflow
Usage
To create a new Workflow Runner, all you need to do is build it. It will take an optional array of Workflows for you to pass in, or you can allow it to default to empty to programatically build it yourself.
Building a Workflow Runner without Workflows
use JustSteveKing\Workflow\WorkflowRunner; $runner = WorkflowRunner::build();
Building a Workflow Runner with a Workflow
use JustSteveKing\Workflow\WorkflowRunner; $runner = WorkflowRunner::build( workflows: [ WorkflowBuilder::make( payload: JsonLoader::load(__DIR__ . '/path/to/workflow.json') ) ] );
Building a Workflow
To build a workflow you can use either a YAML
file or a JSON
file:
Example YAML Workflow File
name: 'test' jobs: test: run: target: JustSteveKing\Workflow\Stubs\Test method: run args: - 'test' - 10 - true another: run: target: JustSteveKing\Workflow\Stubs\Test method: another args: - 'test'
Example JSON Workflow File
{ "name": "test", "jobs": { "test": { "run": { "target": "JustSteveKing\\Workflow\\Stubs\\Test", "method": "run", "args": [ "test", 10, true ] } }, "another": { "run": { "target": "JustSteveKing\\Workflow\\Stubs\\Test", "method": "another", "args": [ "test" ] } } } }
You can pass these files into a WorkflowBuilder using the following approaches:
JSON Workflow
use JustSteveKing\Workflow\WorkflowBuilder; use JustSteveKing\Workflow\Loaders\JsonLoader; $workflow = WorkflowBuilder::make( payload: JsonLoader::load(__DIR__ . '/path/to/workflow.json') );
YAML Workflow
use JustSteveKing\Workflow\WorkflowBuilder; use JustSteveKing\Workflow\Loaders\YamlLoader; $workflow = WorkflowBuilder::make( payload: YamlLoader::load(__DIR__ . '/path/to/workflow.yaml') );
Running a workflow
Once you have built up your Workflow runner - all you need to do is run it:
use JustSteveKing\Workflow\WorkflowRunner; $runner = WorkflowRunner::build( workflows: [ WorkflowBuilder::make( payload: JsonLoader::load(__DIR__ . '/path/to/workflow.json') ) ] ); $runner->run();
Each Job for each workflow anythings returned will be added to an internal log on the runner allowing you to check that they ran. This can be accessed using:
$runner->logs();