#task-runner #task #shell-completion #ci #runner #parallel #command-line

app engage

基于有向无环图(DAG)并行性的任务运行器

7 个版本

0.2.0 2023 年 9 月 20 日
0.1.3 2023 年 9 月 10 日
0.1.2 2023 年 2 月 10 日
0.1.1 2023 年 1 月 28 日
0.1.0-alpha.12022 年 9 月 18 日

#345开发工具 中排名

每月 41 次下载

MIT/Apache

56KB
954 代码行

engage

基于有向无环图(DAG)并行性的任务运行器


特性

  • 使用任何解释器(通常是 shell,如 sh
  • 任务可以依赖于其他任务(同一组内)
  • 组可以依赖于其他组
  • 通过将它们视为图来查看任务和组的概览
  • 运行任务和组的一个子集
    • 运行单个组(及其依赖项)
    • 运行该组中的单个任务(及其依赖项)
  • 列出可用的组和任务
  • Shell 补全

简介

一个简单的 Engage 文件可能看起来像这样

interpreter = ["bash", "-euo", "pipefail", "-c"]

[[task]]
name = "cargo"
group = "versions"
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 = "versions"
script = "cargo fmt --version"
depends = ["cargo"]

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

这创建了一个名为 "versions" 的 ,其中包含三个 任务:"cargo fmt" 和 "cargo clippy",它们依赖于 "cargo"。这可以通过运行 engage dot 并将输出传递给 Graphviz 来可视化

Graph of the example Engage file

当运行任务时,其脚本将作为单个元素附加到 interpreter 列表中,然后执行。

如果没有提供参数运行,Engage 将执行整个有向无环图(DAG),首先进入 "versions" 组,首先运行 "cargo" 任务的脚本,然后并行运行其他两个任务的脚本,最后退出组。

这种隐式并行性与必要时显式排序的结合使得 Engage 可以尽可能快地运行您的任务,从而加快您的工作流程。

行为

  • 所有任务脚本都是以 Engage 文件位置的当前工作目录来执行的。

  • 需要 Engage 文件的操作可以从中所在的目录或该目录的任何子目录中调用。

  • 组和任务的依赖关系必须形成一个有向无环图。换句话说,不允许有依赖循环。

  • 如果任务失败,任何依赖的任务将不会执行,并且 Engage 将以状态码 1 退出。

  • 如果发生其他错误(例如配置错误),Engage 将以状态码 2 退出。

  • 如果没有提供子命令,将根据它们的依赖关系调度和执行所有组和任务。

用法

  • 运行 engage help 查看可用的命令及其描述。

脚注

[^1]: 建议使用名词作为组名,以确保单组调用语法的语法正确。

依赖关系

~6-13MB
~141K SLoC