#build #job #yaml #templating #parameters #language

app zinn

管理YAML文件中项目的构建任务

3个不稳定版本

0.2.1 2024年7月16日
0.2.0 2024年7月15日
0.1.0 2024年7月10日

#49 in 模板引擎

MIT 许可证

47KB
1K SLoC

Zinn

Zinn(来自德语“Sinn machen”,意为“有意义”)是一个类似于 make 的构建工具,但基于 YAMLHandlebars 模板语言。

它支持 作业参数文件跟踪 以及一个可视化显示当前进度的命令行界面。示例代码可在 ./examples/cproj 中找到。

请注意:这目前是我个人的一个实验性项目,不适合用于生产。文件格式可能随时更改。

Zinnfile

Zinnfile描述了应该运行的作业。它使用 YAML 标记语言Handlebars 模板语言 来描述应该运行的作业。默认情况下,Zinn会查找名为 zinn.yaml 的文件,但也可以手动指定路径。

一个简单的C项目的基本Zinnfile可能如下所示

constants:
  CC: gcc
  CFLAGS: -std=c11 -pedantic -Wall -Werror -D_XOPEN_SOURCE=700
jobs:
  object:
    args: [path]
    inputs: "{{path}}"
    outputs: "{{subst path '.c' '.o'}}"
    run: "{{CC}} {{CFLAGS}} -c {{path}}"

  binary:
    requires:
      - job: object
        with:
          path: math.c
      - job: object
        with:
          path: output.c
      - job: object
        with:
          path: main.c
    inputs: math.c output.c main.c
    outputs: program
    run: "{{CC}} {{CFLAGS}} -o program"

  clean:
    run: |
      rm -rf *.o
      rm -rf program

  default:
    requires:
      - job: binary

有关可用选项的更多信息,请参阅 源文档

模板函数

Zinn为模板语言提供了自定义函数

  • cat <s1> <s2>...:连接所有参数
  • joinlines <var>:将行连接起来,并用正则空白字符连接它们
  • lst <s1> <s2>...:从所有输入参数创建空格分隔的列表
  • lst-prefix <prefix> <list>:向空格分隔列表中的每个元素添加前缀
  • lst-re <list> <pattern> <replacement>:对空格分隔的列表中的每个项目应用正则表达式替换操作
  • lst-suffix <prefix> <list>:向空格分隔的列表中的每个元素添加后缀
  • lst-without <list> <remove1> <remove2>...:创建一个不包含某些元素的空格分隔列表的副本
  • re <base> <pattern> <replacement>:对输入字符串应用正则表达式替换操作
  • shell <cmd>:从shell命令的输出创建字符串
  • subst <base> <pattern> <replacement>:替换所有子字符串的出现

Nix 支持

如果 Nix 已安装 并且 Flakes 已启用,则可以在 Zinnfile 的 nix.packages 字段中指定构建依赖项。然后所有作业都在包含这些包的环境中运行。可以使用 nix.nixpkgs 字段更改默认的 nixpkgs flake 引用。

请注意,Flakes 目前是 Nix 中的一个不稳定功能,因此此功能也应被视为不稳定。

安装

您可以直接从 crates.io 安装 Zinn

  1. 确保您有可用的 Rust 安装
  2. 使用 cargo 安装 crate
  3. 将路径(例如 ~/.cargo/bin)添加到您的 $PATH 变量(例如在 .profile.bashrc 中)。您可能需要注销或重启以应用更改。

依赖关系

~6–14MB
~174K SLoC