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 构建实用工具
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