engage

A task runner with DAG-based parallelism


Features

Introduction

A simple Engage file might look like this:

```toml interpreter = ["/usr/bin/env", "sh", "-euo", "pipefail", "-c"]

[[task]] name = "cargo" group = "versioner" script = "cargo --version"

There's no side effect that the following tasks depend on caused by the

previous task, but this is just an example, and you wouldn't do this for real.

[[task]] name = "cargo fmt" group = "versioner" script = "cargo fmt --version" depends = ["cargo"]

[[task]] name = "cargo clippy" group = "versioner" script = "cargo clippy --version" depends = ["cargo"] ```

This creates a group called "versioner"[^1] with three tasks: "cargo fmt" and "cargo clippy", which depend on "cargo". This can be visualized by running engage self dot and feeding the output to Graphviz:

DAG of the example Engage file

When it's time to run a task, its script will be appended as a single element to the interpreter list, which will then be executed.

When run with no arguments, Engage will execute the entire DAG, starting by entering the "versioner" group, running the "cargo" task's script first, then the other two tasks' scripts in parallel, and finally exiting the group.

This implicit parallelism with explicit ordering when required allows Engage to run your tasks as fast as possible, speeding up your workflows.

Behavior

Usage

Footnotes

syntax grammatically correct.