#task-runner #build-tool #bake #make #env-var

nightly build bake-cli

比 make 更美味的任务运行器

5 个不稳定版本

0.3.0 2024年2月28日
0.2.0 2024年2月27日
0.1.2 2024年2月21日
0.1.1 2024年2月9日
0.1.0 2024年2月9日

#384 in 构建实用工具

Apache-2.0

97KB
2K SLoC

🍪 bake 🍪

又一个任务运行器。这一次,它更美味。

Bake 是一个任务运行器,旨在比 Make 更简单,并满足复杂项目中管理依赖的构建、测试和部署任务的一些需求。它能够并行运行任务,并根据每个食谱的输入(如文件或环境变量)缓存输出。

安装

Homebrew

brew install trinio-labs/tap/bake

Cargo

cargo install bake-cli

一个 bake 项目

bake 项目由一个根 bake.yml 配置文件、食谱集食谱 组成。食谱集是一组共享某些上下文的食谱的集合,而每个食谱是一个独立任务,可以由 bake 运行和缓存。

一个典型的项目看起来像这样


├── foo
   ├── src
   │   └── main.rs
   ├── cargo.toml
   └── cookbook.yml
├── bar
   ├── src
   │   └── index.js
   ├── package.json
   └── cookbook.yml
└── bake.yml

Bake 可以快速扫描目录以找到 cookbook.yml 文件,以查找项目中的食谱集。然后它为所有食谱构建依赖关系图并相应地运行它们。

食谱集

食谱集包含通常共享相同上下文的食谱。通常,一个食谱集是一个单仓包的一部分,但它并不局限于这种逻辑分离。

可以通过以下示例中的 cookbook.yml 文件来配置一个食谱集

name: foo
recipes:
  build:
    inputs:
      - "./src/**/*.rs"
    outputs:
      - "./target/foo"
    run: |
      echo "Building foo"
      ./build.sh
    dependencies:
      - "test"
      - "bar:build"
  test:
    run: |
      cargo test
    inputs:
      - "./src/**/*.rs"
    outputs:
      - lcov.info

一个食谱集可以包含任意数量的食谱,未来将能够包含常见的食谱配置。

食谱

如上所示,每个食谱至少必须有一个 run 属性,它定义了如何烘焙它。它还可以通过使用食谱的全名或部分名称来声明它依赖于哪些食谱(如果它们都属于同一个食谱集)。一个食谱还可以通过在 inputs 属性中指定哪些文件应被视为缓存来指定。输入配置为相对于食谱集根目录的 glob 模式。

有关配置文件的更详细说明,请参阅 配置

烘焙食谱

默认情况下,如果不带任何参数调用,bake会运行所有cookbook中的所有recipes。

如果您希望更具体一些,可以传递一个模式来过滤要运行的recipes,并调用bake。模式始终采用以下形式:<cookbook>:<recipe>

例如,要从foo cookbook运行build recipe,请运行

bake foo:build

您也可以运行foo cookbook中的所有recipes

bake foo:

或者运行任何cookbook中名为build的所有recipes

bake :build

缓存

默认情况下,bake将在名为.bake/cache的目录中本地缓存运行。bake将使用recipes的所有输入的合并哈希、依赖项的哈希以及其运行命令来创建缓存键。这允许recipes被缓存,并且只有在依赖项或recipes本身发生变化时才会重新运行。bake还可以配置为使用远程存储来缓存recipes,例如S3或GCS。

有关如何配置缓存的更多信息,请参阅缓存

依赖项

~46–62MB
~1M SLoC