NAME Stepford - A vaguely Rake/Make/Cake-like thing for Perl - create steps and schedule them VERSION version 0.000002 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 . 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 . AUTHOR Dave Rolsky 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.