1 个不稳定版本
0.1.0 | 2019 年 7 月 31 日 |
---|
#13 在 #make
22KB
400 行
RUMAKE
rumake
是一个用 Rust 编写的作业运行器,它试图保持与壳的接近。它不是用来替换 make
的。
主要特性包括
- 不与运行时耦合。
- 简单的语法(YAML)。
- 可以将参数传递给指令。
- 任务与变量依赖。
- 检查无限递归声明。
安装
cargo install --git https://github.com/letaron/rumake.git
快速入门
此工具使用 tasks
和 variables
。您运行可以使用变量的任务。
假设您有这个配置
# rumake.yaml
dkcr: docker-compose run --rm
hello: "echo 🐄: hello $from !"
me:
- "@hello"
- echo "I\'m $USER and time is $(date)"
$from: world
您可以使用它像这样
rumake dkcr node bash # docker-compose run --rm node bash
rumake me
# 🐄: hello world !
# I'm ... and time is ...
用法
调用 rumake
非常直接
rumake TASK [ARGS]
ARGS
将用于任务的指令。
任务引用
您可以通过 @
-name 引用任务。
task1: echo "baz"
task2:
- echo "foo"
- "@task1"
用法
rumake task2
# foo
# baz
传递参数
您可以从 CLI 将参数传递给任务的指令,并选择哪个指令将接收它以及在哪里。使用参数转发,不需要重复目标以进行微小的差异,您可以分解任务。
默认行为
如果任务只包含一个指令,CLI 参数将被附加到末尾。
使用此配置
dkcr: docker-compose run --rm
将像这样使用
rumake dkcr node bash # will run docker-compose run --rm node bash
当任务有多个指令时,您需要放置参数。它允许更多用例,请参见下文。
放置参数
rumake
使用 CLI 参数替换特殊参数 $RUMAKE_ARGS
。
使用此配置
shell: docker-compose run $RUMAKE_ARGS bash
将像这样使用
rumake dkcr shell node # will run docker-compose run node bash
并且当引用时,原则相同
pizza: echo \"Let\'s go for a pizza with $RUMAKE_ARGS 🍕\"
pizza_super: "@pizza super $RUMAKE_ARGS"
pizza_extra:
- ["echo hmmm...", "echo I love $RUMAKE_ARGS"]
- "@pizza_super extra $RUMAKE_ARGS !"
您可以使用它像这样使用
rumake pizza cheese # will output: Let's go for a pizza with cheese ! 🍕
rumake pizza_extra cheese # will output:
# hmmm...
# I love cheese
# Let's go for a pizza with super extra cheese ! 🍕
当引用任务时,传递给任务的参数是在引用任务中声明的,就像一个新的直接调用一样,而不是“全局”的。
转义
请注意引号转义。如果指令需要引号,它需要首先从 YAML 中出来。
task: echo It\\\'s a test # after YAML parsing: It\'s a test
# or
task: echo \"It\'s a test\" # after YAML parsing: "It's a test"
# will echo: It's a test
每个任务指令都是由
sh -e -u -c ...
启动的。
配置
查看完整的配置示例这里。
使用的配置文件
加载优先级(不进行合并)
- 如果工作目录中存在
rumake.yaml
,则将使用它。 - 如果工作目录中存在
rumake.yaml.dist
,则将使用它。
任务定义
- 任务名称可以是任何不以
$
开头的值。 - 任务由指令组成。
- 指令可以是字符串数组或字符串。
- 如果指令仅是字符串,则会转发CLI参数。
- 任务可以通过在名称前加上
@
来引用另一个任务。
task1: instruction1
task2:
- instruction1
- instruction2 $foo
- ["@task1 with param", "instruction3"]
- for file in $(ls); do
echo $file;
done
# ...
变量定义
- 变量名称以
$
开头。 - 变量可以通过其名称来引用其他变量。
$foo: foo
$bar: bar baz${foo}51 # computes to "bar bazfoo51"
Shell补全
支持Bash的Shell补全。将fixtures/rumake-completion.bash
移动到$XDG_CONFIG_HOME/bash_completion
或/etc/bash_completion.d/
,例如。
cp fixtures/rumake-completion.bash ${XDG_CONFIG_HOME:-/etc/bash_completion.d/}/rumake
为什么?
我们需要一个接近操作系统且不需要特定语言(Python、PHP、Node等)的工具。
由于不是用解释性语言编写的,我们可以摆脱运行时限制并简化与其他工具的接口。
为什么不使用
make
?
make
过于分散,无法提供所需的功能,但它是一个构建工具,而不是任务运行器。我们感觉Makefile
语法可能难以操作。
另请参阅
依赖关系
~4–13MB
~127K SLoC