This is a library to simplify setup workflow for your applications. Features:
- Every setup step is defined in its own class.
- Supports dependencies between setup steps via
dependsOn()
andmustRunBefore()
- Well-defined interfaces and simple reporting with the
SetupStepResult()
class - PSR-4 and PSR-12 compliant
Via Composer
$ composer require caseyamcl/setterupper
The tl;dr version:
File: StepA.php
use SetterUpper\SetupStep;
use SetterUpper\SetupStepResult;
class StepA implements SetupStep
{
public static function dependsOn(): iterable
{
return [];
}
public static function mustRunBefore(): iterable
{
return [];
}
public function __invoke(): SetupStepResult
{
$alreadySetup = false;
if (! $alreadySetup) {
// Do stuff here...
return SetupStepResult::succeed('message here');
} else {
return SetupStepResult::skip('already setup message');
}
}
public function __toString() : string{
return 'describe what StepA does';
}
}
File: StepB.php
use SetterUpper\SetupStep;
use SetterUpper\SetupStepResult;
class StepB implements SetupStep
{
public static function dependsOn(): iterable
{
return [StepA::class];
}
public static function mustRunBefore(): iterable
{
return [StepC::class];
}
public function __invoke(): SetupStepResult
{
$alreadySetup = false;
$wasRequired = true;
if (! $alreadySetup) {
try {
return SetupStepResult::succeed('message here');
} catch (\Throwable $e) {
return SetupStepResult::fail('fail message here', $wasRequired);
}
} else {
return SetupStepResult::skip('already setup message');
}
}
public function __toString() : string{
return 'describe what StepB does';
}
}
File: SetupRunner.php
use SetterUpper\SetterUpper;
$su = new SetterUpper();
$su->add(new StepA(), new StepB(), new StepC());
$report = $su->runAll();
- TODO: Mention that if you try to add the same class twice, a name collision exception will be thrown
- TODO: Mention that this library does not handle exceptions thrown in SetupSteps
Please see CHANGELOG for more information on what has changed recently.
$ composer test
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
If you discover any security related issues, please email caseyamcl@gmail.com instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.