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.1 | 2022 年 9 月 18 日 |
#345 在 开发工具 中排名
每月 41 次下载
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 来可视化
当运行任务时,其脚本将作为单个元素附加到 interpreter
列表中,然后执行。
如果没有提供参数运行,Engage 将执行整个有向无环图(DAG),首先进入 "versions" 组,首先运行 "cargo" 任务的脚本,然后并行运行其他两个任务的脚本,最后退出组。
这种隐式并行性与必要时显式排序的结合使得 Engage 可以尽可能快地运行您的任务,从而加快您的工作流程。
行为
-
所有任务脚本都是以 Engage 文件位置的当前工作目录来执行的。
-
需要 Engage 文件的操作可以从中所在的目录或该目录的任何子目录中调用。
-
组和任务的依赖关系必须形成一个有向无环图。换句话说,不允许有依赖循环。
-
如果任务失败,任何依赖的任务将不会执行,并且 Engage 将以状态码
1
退出。 -
如果发生其他错误(例如配置错误),Engage 将以状态码
2
退出。 -
如果没有提供子命令,将根据它们的依赖关系调度和执行所有组和任务。
用法
- 运行
engage help
查看可用的命令及其描述。
脚注
[^1]: 建议使用名词作为组名,以确保单组调用语法的语法正确。
依赖关系
~6-13MB
~141K SLoC