13 个版本
0.0.13 | 2021 年 10 月 25 日 |
---|---|
0.0.12 | 2021 年 1 月 13 日 |
0.0.11 | 2020 年 12 月 21 日 |
0.0.10 | 2020 年 10 月 14 日 |
#225 在 Cargo 插件
40 每月下载量
64KB
1.5K SLoC
cargo-task
超轻量级无依赖 Rust Cargo 任务运行器。
- 平台无关 - 在任何 cargo 运行的平台上运行。
- 无依赖 - 任务管理器本身几乎可以立即安装。
- Rust 任务逻辑 - 停止编写单独的 bash 和 powershell 脚本。
- 请查看此仓库中的 '.cargo-task' 目录 中的示例。
cargo install -f cargo-task
cargo help task
创建 cargo-task
自动化任务。
cargo task ct-init
cd .cargo-task
cargo new --bin my-task
cd ..
cargo task my-task
cargo task ct-init
- 创建.cargo-task
目录和.gitignore
。cargo task my-task
- 运行在.cargo-task
目录中定义的名为my-task
的包。
就这么简单!
脚本式单文件任务。
如果您不想提交整个目录 / Cargo.toml 等,您可以指定 cargo-task 任务为单文件。
只需在您的 .cargo-task
目录中创建一个名为 my-task.ct.rs
的文件,并像编写 main.rs
一样编写它。
这也会创建一个 my-task
cargo 任务。您甚至可以通过 AtAt 指令指定 cargo 包依赖项(见下文)。
自定义任务执行方式。
cargo-task
使用一种名为 AtAt 的元数据格式 - 因为它使用了 @
符号。
/*
@ct-default@ true @@
@ct-task-deps@
one
two
@@
*/
关于AtAt的一些了解
- 协议:
@key@ value @@
。 - 作为键的第一个
@
必须是行首的第一个字符。 - 值以两个
@@
结尾。 - 值可以包含换行符,也可以单独一行。
- 你可能希望将其放在Rust的注释块中 : )
这些指令将在解析 .cargo-task
软件包时从你的 main.rs
文件中读取。
默认任务。
/*
@ct-default@ true @@
*/
如果 cargo task
调用中任务列表为空,则将执行默认任务。
引导任务。
/*
@ct-bootstrap@ true @@
*/
引导任务将 始终 在任何任务列表任务之前执行。此外,在执行引导任务后,将重新加载 cargo-task 元数据。您可以使用此功能下载/安装/配置其他任务。
Cargo 依赖。
/*
@ct-cargo-deps@
num_cpus = "1"
serde = { version = "1", features = [ "derive" ] }
@@
*/
像在您的 Cargo.toml 中一样编写它们。
任务依赖。
/*
@ct-task-deps@
my-first-dependency
my-second-dependency
@@
*/
一个由空格分隔的任务列表,必须在当前任务之前运行。可以是单行或多行。
最低 cargo-task 版本。
/*
@ct-min-version@ 0.0.7 @@
*/
如果依赖功能,则要求至少达到最低版本的 cargo-task,以提示用户升级。注意,此指令与 @ct-bootstrap@
结合使用时效果良好。
神奇的 cargo_task_util
依赖。
此模块将在构建时作为您的软件包根目录可用。要包含它,只需在您的 main.rs
文件中添加一个 mod
指令。具有与此模块相同的 pub 内容的软件包依赖项将在运行时可用。此依赖项将自动添加到脚本类型任务中。
要将其添加到软件包类型任务,只需在您的 Cargo.toml 中包含此依赖项。
[dependencies]
cargo_task_util = "*"
/*
@ct-default@ true @@
*/
use cargo_task_util::*;
fn main() {
// cargo task metadata env helper
let env = ct_env();
// print out some cool cargo-task metadata
// (this does the same thing as `cargo task ct-meta`)
println!("{:#?}", env);
// also includes cargo-task special log helpers
ct_warn!("ahh, a warning! {:?}", std::time::SystemTime::now());
}
配置任务和 cargo_task_util
软件包以进行直接执行。
因此,您想直接运行 cargo 任务?cargo_task_util
软件包被生成到您的 .cargo-task 目录中,但通过 .cargo-task/.gitignore
文件被 git 忽略。您可以通过删除 .gitignore 中的行来将软件包检入版本控制。
由于 Windows 路径的一个奇怪之处,我们需要使用工作区级别的 [patch]
指令来使此依赖项正常工作。
如果您想有一个根工作区 Cargo.toml
,您可以在项目的根目录中创建一个,并包含所有您的软件包和任务软件包。
如果您想要将任务软件包保留在单独的工作区中,您可以在 .cargo-task
目录中放置一个工作区 Cargo.toml
文件。(您还需要从您的 .cargo-task/.gitignore
中删除该行)
此示例针对 .cargo-task/Cargo.toml
工作区。如果您的软件包根目录是不同的目录,您将需要调整路径。
[workspace]
members = [
"cargo_task_util",
"my_task_crate",
]
[patch.crates-io]
cargo_task_util = { path = "cargo_task_util" }
导出环境变量以配置其他任务。
cargo_task_util::CTEnv
还包括导出环境变量的实用程序。
如果您只使用rust的std::env::set_var
函数,变量将只对当前任务执行设置,但其他任务将看不到它。
相反,您可以使用cargo_task_util::CTEnv::set_env
函数。
您可能想在“引导”任务中这样做,以便它对后来运行的其它任务可用。
/*
@ct-bootstrap@ true @@
*/
mod cargo_task_util;
use cargo_task_util::*;
fn main() {
// cargo task metadata env helper
let env = ct_env();
// set a variable that will be available in other tasks.
env.set_env("MY_VARIABLE", "MY_VALUE");
}