#task-runner #task #runner #make #yaml-config

app rumake

rumake 是一个接近壳的作业运行器。它使用 YAML 配置,具有任务引用和变量处理。

1 个不稳定版本

0.1.0 2019 年 7 月 31 日

#13#make

无许可证

22KB
400

RUMAKE

Build Status

rumake 是一个用 Rust 编写的作业运行器,它试图保持与壳的接近。它不是用来替换 make 的。

主要特性包括

  • 不与运行时耦合。
  • 简单的语法(YAML)。
  • 可以将参数传递给指令。
  • 任务与变量依赖。
  • 检查无限递归声明。

安装

cargo install --git https://github.com/letaron/rumake.git

快速入门

此工具使用 tasksvariables。您运行可以使用变量的任务。

假设您有这个配置

# 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 ... 启动的。

配置

查看完整的配置示例这里

使用的配置文件

加载优先级(不进行合并)

  1. 如果工作目录中存在rumake.yaml,则将使用它。
  2. 如果工作目录中存在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