#task-runner #build-tool #command-line #task-automation

app runme

基于 shell 脚本的任务运行器

5 个版本 (破坏性更新)

0.5.0 2023年3月15日
0.4.0 2023年3月13日
0.3.0 2022年11月13日
0.2.0 2022年9月29日
0.1.0 2022年9月24日

#1582命令行工具

每月下载量 33

MIT/Apache

24KB
355

Runme

CI Crates

基于 shell 脚本的任务运行器。

demo

安装

使用 cargo

cargo install --force runme

适用于 macOS、Linux、Windows 的二进制文件

Github Releases 下载,解压缩并将 runme 添加到您的 $PATH。

GitHub Actions

extractions/setup-crate 可以用于在 GitHub Actions 工作流程中安装。

- uses: extractions/setup-crate@v1
  with:
    owner: sigoden
    name: runme

入门

首先,运行 runme --runme-create build test 以快速创建样板 Runmefile.sh

#!/usr/bin/env bash

# @cmd build project
# @alias b
build() {
    echo Run build
}

# @cmd test project
test() {
    echo Run test
}

eval "$(runme --runme-eval "$0" "$@")"

要定义一个新任务,只需创建 bash 函数并在其上方添加 @cmd任务就是函数

$ runme -h
USAGE: Runmefile.sh <COMMAND>

COMMANDS:
  build  build project [aliases: b]
  test   test project

$ runme test
Run test
$ runme b
Run build

Runme 使用 argc 来解析 Runmefile。

特性

跨平台

runme 二进制文件适用于 Linux、macOS 和 Windows。

runme 依赖于已内置到 Linux/macOS 中的 bash。在 Windows 上,runme 自动定位并使用默认随 git 一起安装的 bash。

bash 提供了 GNU 工具,如 lsrmgrepsedawk 等,因此您可以在 Runmefile 中自由自信地使用它们。

任务参数

使用 注释标签 来定义任务参数。

  • @arg: 定义位置参数
  • @option: 定义选项参数
  • @flag: 定义标志参数
# @cmd Download a file
# @alias    d
# @flag     -f --force              Override existing file
# @option   -t --tries <NUM>        Set number of retries to NUM
# @arg      source!                 Url to download from
# @arg      target                  Save file to
download() {
    echo "cmd:                      download"
    echo "flag:   --force           $argc_force"
    echo "option: --tries           $argc_tries"
    echo "arg:    source            $argc_source"
    echo "arg:    target            $argc_target"
}
$ runme download -h
Download a file

USAGE: Runmefile.sh download [OPTIONS] <SOURCE> [TARGET]

ARGS:
  <SOURCE>  Url to download from
  [TARGET]  Save file to

OPTIONS:
  -f, --force        Override existing file
  -t, --tries <NUM>  Set number of retries to NUM
  -h, --help         Print help information
$ runme download  -f --tries 3 from.txt to.txt
cmd:                      download
flag:   --force           1
option: --tries           3
arg:    source            from.txt
arg:    target            to.txt

您还可以使用 shell 变量来访问任务参数。

# @cmd
run() {
  echo $2 $1 $#
}
$ runme run foo bar
bar foo 2

任务别名

# @cmd
# @alias t,tst
test() {
  echo "Test..."
}
$ runme t
Test...

任务依赖关系

依赖关系通过函数调用建立。

# @cmd
bar() { foo;
  echo bar
baz; }

# @cmd
foo() {
  echo foo
}

# @cmd
baz() { 
  echo baz
}
$ runme bar
foo
bar
baz

任务分组

可以使用 _-@.: 等符号将任务语义分组。

# @cmd
test@unit() {}
# @cmd
test@bin() {}

# @cmd
app.build() {}
# @cmd
app.test() {}

默认任务

当不指定任务名称调用 runme 时,它会运行 main 函数。如果 main 函数不存在,runme 将打印帮助信息。

main() { 
  foo
}

# @cmd
foo() {
  echo foo
}
$ runme
foo

高级主题

自动补全

提供了适用于 bash/zsh/fish/powershell 的 Shell 自动补全脚本

自定义 shell 路径

您可以使用环境变量 RUNME_SHELL 来自定义 shell 路径。

RUNME_SHELL="C:\\Program Files\\Git\\bin\\bash.exe"

自定义脚本名称

默认情况下,runme 搜索以下脚本文件:

  • Runmefile.sh 或 Runmefile
  • runmefile.sh 或 runmefile
  • RUNMEFILE.sh 或 RUNMEFILE

您可以使用环境变量 RUNME_SCRIPT 来自定义脚本名称。

RUNME_SCRIPT=taskfile.sh

许可证

版权所有 (c) 2022 runme-developers。

runme 可在 MIT 许可证或 Apache 许可证 2.0 的条款下提供,由您选择。

有关许可证详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT 文件。

依赖项

~7–16MB
~210K SLoC