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.