NAME
App::Dothe - YAML-based task runner
VERSION
version 0.0.1
DESCRIPTION
Task runner heavily inspired by Task (https://github.com/go-task/task). Basically, I wanted Task
, but with a foreach
construct.
See perldoc App::DoThe
for the syntax of the Dothe.yml file.
DOTHE SYNTAX
The configuration file is in YAML. It follows, by and large, the format used by Task.
By default, `dothe` looks for the file `Dothe.yml`.
Where entries can be templates, they are evaluated via Text::Template. Basically, that means that in a template all that is surrounded by double curley braces is evaluated as Perl code. Those code snippets are evaluated within the App::Dothe::Sandbox
namespace, and have all the vars
variables accessible to them.
code
section
Takes an array. Each item will be eval'ed in the namespace used by the template code.
For example, to have access to Path::Tiny's path
:
code:
- use Path::Tiny;
tasks:
import-all:
sources:
- /home/yanick/work/blog_entries/**/entry
foreach: sources
cmds:
- task: import
vars: { dir: '{{ path($item)->parent }}' }
vars
section
Takes a hash of variable names and values. Those are variables that will be accessible to all tasks.
E.g.,
vars:
entries_file: ./content/_shared/entries.md
blog_entries_root: /home/yanick/work/blog_entries
tasks
section
Takes a hash of task names and their definitions.
E.g.,
tasks:
something:
sources: [ ./src/foo.source ]
generates: [ ./dest/foo.dest ]
foreach: sources
cmds:
- ./tools/process_entry.pl {{$item}}
task
Defines a specific task.
vars
Hash of variable names and values to be made accessible to the task and its subtasks.
Variable values can be templates, which have visibility of previously declared variables.
A locally defined variable will mask the definition of a global variable.
deps
Array of task dependencies. If present, Dothe will build the graph of dependencies (via Graph::Directed) and run them in their topological order.
deploy:
deps: [ clean, build, test ]
cmds:
- dzil release
sources
Array of files. Can take glob patterns that will be expanded using Path::Tiny::Glob. The result is accessible via the sources
variable.
foo:
sources: [ './lib/**/*.pm' ]
foreach: sources
cmds:
- perl -c {{$item}}
generates
Array of files. If sources
and generates
are both given, the task will only be run if any of the sources (or the Dothe.yml file itself) has been modified after the generates
files.
Can take glob patterns that will be expanded using Path::Tiny::Glob. The result is accessible via the generates
variable.
foreach
Takes the name of a variable that must hold an array. If presents, the cmds
will be run for each value of that variable, which will be accessible via $item
.
cmds
List of shell commands to run. The entries can be templates. As soon as one command fails, the task aborts.
deploy:
vars:
important_test: ./xt/test.t
cmds:
- dzil build
- perl {{ $important_test }}
- dzil release
A command can also be a subtask, with potentially some associated variables:
stuff:
cmds:
- task: other_stuff
vars:
foo: bar
baz: quux
AUTHOR
Yanick Champoux <yanick@babyl.ca>
COPYRIGHT AND LICENSE
This software is copyright (c) 2019 by Yanick Champoux.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.