NAME
Stepford - A vaguely Rake/Make/Cake-like thing for Perl - create steps and schedule them
VERSION
version 0.000001
SYNOPSIS
package My::Step::MakeSomething;
use Moose;
with 'StepFord::Role::Step::FileGenerator';
sub run {
# write some files somehow
}
package My::Runner;
use Stepford::Scheduler;
my @steps = (
My::Step::Step1->new(
name => 'step 1',
...
),
My::Step::Step2->new(
name => 'step 2',
...
),
My::Step::MakeSomething->new(
name => 'Generate a file',
dependencies => [ 'step 1', 'step 2' ],
),
);
my $target_step = $steps[-1];
# Runs all the steps needed to get to the $final_step.
Stepford::Scheduler->new(
steps => \@steps,
)->run($final_step);
DESCRIPTION
NOTE: This is some alpha ju^H^Hcode. You have been warned!
Stepford provides a framework for running a set of steps that are dependent on other steps. At a high level, this is a lot like Make, Rake, etc. However, the actual implementation is fairly different. Currently, there is no DSL, no Stepfile, etc.
With Stepford, each step is represented by a class you create. That class should consume either the StepFord::Role::Step::FileGenerator role (if it generates files) or the StepFord::Role::Step step (if it doesn't).
You then instantiate step objects for each step, giving each step a name and explicitly specifying its dependencies. Finally, you pass all these steps to a Stepford::Scheduler and tell it to run a given step. The scheduler runs all the dependent steps (and their dependencies and so on).
Each step can specify a last_run_time()
method (or get one from the StepFord::Role::Step::FileGenerator role). The scheduler uses this to skip steps that are up to date.
See Stepford::Scheduler, Stepford::Role::Step, and StepFord::Role::Step::FileGenerator for more details.
FUTURE FEATURES
There are several very obvious things that should be added to this framework:
Logging
The scheduler and steps should all accept some sort of optional log object and tell it what they're doing.
Dry runs
This requires logging, of course.
Parallel running
Since the scheduler know what steps depend on what other steps, it can also figure out when things can be run in parallel.
VERSIONING POLICY
This module uses semantic versioning as described by http://semver.org/. Version numbers can be read as X.YYYZZZ, where X is the major number, YYY is the minor number, and ZZZ is the patch number.
SUPPORT
Please report all issues with this code using the GitHub issue tracker at https://github.com/maxmind/Stepford/issues.
AUTHOR
Dave Rolsky <drolsky@maxmind.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by MaxMind, Inc..
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.