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
31KB
705 行(不含注释)
🌈 Dors 更多功能,与 Dorsfiles 一起使用 🌂
这是什么?
为 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: 欢迎联系!
依赖
~2–11MB
~102K SLoC