# WillDo
Will do some work when the conditions are ripe!
It is a generic task manager for running jobs
with a directed acyclic graph (DAG) dependency resolution.
Configuration is loaded from simple yaml files:
```yaml
job: baking
script:
- echo oven 250
- echo insert yummy
- sleep 3600
- echo oven off
- echo take yummy
---
job: oops
when:
- done: baking
code:
min: 1 # that is non-zero, baking failed
script: echo alarm!
---
job: cleanup
when:
- any:
- done: baking # assuming 0 - success
- done: oops
script: echo tidy up
```
Jobs are effectively scheduled when their parent dependencies
(`when`) are satisfied. Dependencies can be conditional
with a simple code arithmetic conditions and combined
into complex rules (all/any). By default, all
dependencies must be satisfied.
Triggers (`then`) are opposite - child - relations.
The crate includes a subprocess commander behind a feature of same name,
so any shell or repl can be utilized immediately to run your scripts.
The default commander is `()` which does nothing.
You can configure an interpretter:
```yaml
interpretter: sh
provider: subprocess
executable: dash
---
job: making
runs: sh
script:
- test -f .skip && echo skipped || echo make
```
In order to discern the outcome of a script command,
the commander must provide feedback to send back
the numeric code of the last operation.
This is not easily done in a subprocess
and is achieved by printing a uniquely
stamped string that is parsed from child
process outputs.
# Usage
1. Use it as a crate in your project - see examples and docs to get started.
The `Graph` implements `Display` with a digraph output which can be rendered with graphviz
to visualize the state. You can provide your own `Commander` to interpret job scripts.
2. Build the examples that can run jobs as a CLI, you could install
the examples with cargo, but I would not recommend it at this stage
as the interfaces are not stable.
# TODO
- Pass resources between jobs, such as exit codes, outputs, variables.
- Preserve and load job state so we can pick up where we left off.
- An official and stable CLI.
- Later: other configuration sources.
- Later: fancy interactive TUI.
- Maybe: more ways to work with the graph.