#bash #markdown #shell #script #command #compile #tags

app bashtestmd

将.md文件中的shell命令编译成用于测试的Bash脚本

3个不稳定版本

0.4.1 2024年3月26日
0.4.0 2024年2月8日
0.3.0 2024年2月8日

文本处理 中排名第 93

Download history 160/week @ 2024-04-13 201/week @ 2024-04-20 192/week @ 2024-04-27 159/week @ 2024-05-04 229/week @ 2024-05-11 192/week @ 2024-05-18 111/week @ 2024-05-25 148/week @ 2024-06-01 166/week @ 2024-06-08 162/week @ 2024-06-15 172/week @ 2024-06-22 171/week @ 2024-06-29 209/week @ 2024-07-06 117/week @ 2024-07-13 249/week @ 2024-07-20 219/week @ 2024-07-27

每月下载量 805

MIT/Apache

14KB
242

Bashtestmd

crates.io

将包含Bash代码块的Markdown文件编译成单个Bash脚本,用于CI测试目的。

基本用法

以下命令解析输入Markdown文件中的所有代码块,并生成一个包含所有标记为指定 TAG_NAME 的块的脚本。

bashtestmd --input {PATH_TO_INPUT_FILE} --output {OUTPUT_FILE_NAME} --tag {TAG_NAME}`.

例如,bashtestmd --input README.md --output demo-readme.sh --tag test-ci 将查找所有此类代码块并生成一个运行它们的脚本,每个命令都必须以状态码 0 退出。

```sh,test-ci
$ echo "This is a demo"
```

请注意,bashtestmd 只解释以 $ 开头的行作为命令。这允许将输出包含在片段中,而不会损害生成的脚本。

```sh,test-ci
$ echo "This is a demo"
This is a demo
```

支持的标签

bashtestmd 支持以下代码块的可选标签

  1. bashtestmd:compare-output
  2. bashtestmd:exit-code-ignore
  3. bashtestmd:exit-code="{EXPECTED_CODE}"
  4. bashtestmd:long-running
  5. bashtestmd:wait-until="{TEXT}"

比较输出

标签 bashtestmd:compare-output 会导致生成的脚本检查命令输出是否与Markdown文件中的输出匹配。

例如,如果服务器在响应对 localhost:80/hello 的查询时返回 "goodbye" 而不是预期的 "hello, world",则此命令将失败。

```sh,test-ci,bashtestmd:compare-output`
$ curl localhost:80/hello
"hello, world"
```

忽略退出代码

标签 bashtestmd:exit-code-ignore 使得 bashtestmd 忽略命令的退出码,而不是强制代码必须是 0

退出码

标签 bashtestmd:exit-code="{CODE}" 使得 bashtestmd 检查命令的退出码是否与提供的值匹配

```sh,test-ci,bashtestmd:exit-code="1"`
$ rm this_file_does_not_exist.txt
rm: this_file_does_not_exist.txt: No such file or directory
```

长时间运行

标签 bashtestmd:long-running 使得命令在后台运行,并等待 120 秒以完成任务完成。强烈建议将 long-runningwait-until 结合使用,以覆盖此默认行为。

例如,以下命令编译为 cargo run &; sleep 120

```sh,test-ci,bashtestmd:long-running`
$ cargo run
```

等待直到

标签 bashtestmd:wait-until={SOME_TEXT} 将导致脚本在继续之前等待进程输出预期的文本,而不是简单地睡眠两分钟。请注意,此命令 需要 long-running 标签才能生效。

```sh,test-ci,bashtestmd:long-running,bashtestmd:wait-until="Finished release"`
$ cargo build --release
```

本地安装

为本地开发设置 bashtestmd

  1. git clone https://github.com/Sovereign-Labs/bashtestmd.git
  2. cargoinstall --pathbashtestmd/

依赖关系

~3MB
~62K SLoC