#任务运行器 #cargo 命令 #cargo #cargo 工作空间 #命令 #运行命令 #运行

bin+lib dors

为 cargo 量身定制的无烦恼工作空间友好型任务运行器

8 个版本

0.0.8 2020 年 6 月 5 日
0.0.7 2020 年 5 月 22 日
0.0.6 2020 年 4 月 11 日
0.0.5 2020 年 3 月 31 日

Cargo 插件 中排名 #592

MIT/Apache 许可

31KB
705 行(不含注释)

🌈 Dors 更多功能,与 Dorsfiles 一起使用 🌂

crates.io Build Status

这是什么?

为 Rust 和 cargo 生态系统提供的任务运行器。

特别针对具有大型 cargo 工作空间的环境,如嵌入式或基于云的环境,这些环境通常包含多个目标、Rust 生态系统外的工具、复杂的部署脚本和 CI 管道。

设计理念是让简单的事情变得简单,而复杂的事情变得可行。

示例

# ./Dorsfile.toml
[task.do-tests]
command = "cargo test --target x86_86-unknown-linux-gnu -- --nocapture"
$ dors do-tests

安装

$ cargo install dors

功能

在工作空间的成员上运行任务

# ./Dorsfile.toml
[task.test]
command = "echo Hello, World! from $PWD"
run-from = "members"

设置特定 crate 的环境变量

# ./member-1/Dorsfile
[[env]]
CARGO_TARGET_DIR = "../target-member-1"

Dors 将自动为您分配 CARGO_WORKSPACE_ROOT$PWD$HOME 和其他环境变量按预期工作。

使用 bash 分配环境变量

[[env]]
MY_SPECIAL_ENV_VAR = "$(ls)"
ANOTHER_ENV_VAR = "$HOME/.cargo/bin"

查看所有可用任务

$ cargo dors -l
my-special-task
load
deploy

还支持任务的自动补全!

传递参数

[task.say-hi]
command = 'echo Hello, "$@"!'
$ cargo dors say-hi -- Fellow Human
Hello, Fellow Human!

运行多行 bash 脚本

# ./Dorsfile.toml
[task.play-go]
command = '''
url="igs.joyjoy.net 6969"
telnet $url
'''

通过继承任务来减少重复

# ./Dorsfile.toml
[task.check]
command = "cargo check --all-targets"
$ cd shared_code && cargo dors check

在运行其他任务之前或之后调用任务

#./Dorsfile.toml
[task.play-go]
before = ["install-telnet"]
command = "telnet igs.joyjoy.net 6969"
after = ["congratulate"]

[task.install-telnet]
command = "sudo apt-get install -y --no-install-recommends telnet"

[task.congratulate]
command = "echo 'I hope you played well!'"

在运行任务之前/之后,按从左到右的顺序进行。如果树中重复了任务,则只会运行一次。

为单个工作空间成员覆盖工作空间任务

#./Dorsfile.toml
[task.build]
command = "cargo build"
run-from = "members"
#./embedded_device/Dorsfile.toml
[task.build]
command = "cargo build --features debug-logs"

跳过特定的成员

#./Dorsfile.toml
[task.test]
command = "cargo test"
run-from = "members"
skip-members = ["embedded_device"]

[task.clippy]
command = "cargo clippy"
run-from = "members"
only-members = ["shared_code"]

在工作空间根目录上运行成员 crate 的命令

# ./embedded_device/Dorsfile.toml
[task.pre-build]
run-from = "workspace-root"
command = "echo interestingstuff > target/special-file"

从任意路径运行命令

# ./Dorsfile.toml
[task.run-other-project]
run-from = { path = "../random_node_project" }
command = "npm run"

...还有更多!🎩

常见问题解答

问:这会自动提供标准 cargo 命令吗?
答:不,一个空的 Dorsfile 就是一个空的 Dorsfile。构建它取决于你。

问:这适用于生产吗?
答:这目前处于 alpha 版。使用时请自行承担风险。

问:你怎么发音?
A: 就像“马”一样

Q: 你不应该在结尾加上一个“e”吗?比如“dorse”?
A: 从不。不。去你的房间。直到你学到了教训再出来 🙃

Q: 我必须在使用工作空间时使用这个吗?
A: 你可以用这个crate,无论你的crate是否是工作空间。

Q: 改进的下一步是什么?
A: 可能是错误信息。想要什么?开一个issue!

Q: 你会接受PR吗?
A: 当然会!

Q: 我的提问在这里没有找到答案
A: 欢迎联系!

An open book

依赖

~2–11MB
~102K SLoC