#cargo-toml #cargo #cargo-build #cargo-workspace #workspace-hack #dependencies #guppy

bin+lib cargo-hakari

管理 workspace-hack 包,以加速大型工作空间中的构建

29 个版本

0.9.30 2024年7月29日
0.9.29 2024年2月5日
0.9.28 2023年10月4日
0.9.27 2023年7月29日
0.9.9 2021年11月29日

#154Cargo 插件

Download history 2719/week @ 2024-05-01 2923/week @ 2024-05-08 3082/week @ 2024-05-15 2494/week @ 2024-05-22 2636/week @ 2024-05-29 2655/week @ 2024-06-05 2612/week @ 2024-06-12 2772/week @ 2024-06-19 2408/week @ 2024-06-26 2544/week @ 2024-07-03 2598/week @ 2024-07-10 2691/week @ 2024-07-17 3111/week @ 2024-07-24 3865/week @ 2024-07-31 3770/week @ 2024-08-07 4039/week @ 2024-08-14

每月15,211 次下载

MIT/Apache

1MB
13K SLoC

cargo-hakari

cargo-hakari on crates.io Documentation (latest release) Documentation (main) License License

cargo hakari 是一个命令行应用程序,用于管理 workspace-hack 包。通过它,您可以通过 15-95% 的速度提高本地的 cargo buildcargo check 命令,累积起来可以提升 20-25% 或更多

有关 workspace-hack 包是什么以及它们如何使您的构建更快的说明,请参阅 about 模块

示例

cargo-guppy 仓库使用由 cargo hakari 管理的 workspace-hack 包。 查看生成的 Cargo.toml

平台支持

  • Unix 平台:Hakari 可以正常工作并且受到支持。
  • Windows:Hakari 可以正常工作并且以正斜杠为路径输出文件路径,以与 Unix 保持一致。不支持 workspace-hack 的 Cargo.toml 中的 CRLF 行结束符。在 Git 仓库中,cargo hakari init 会自动为您执行此操作。 这是手动执行此操作的方法。 (欢迎通过拉取请求改进此功能。)

安装

发布版本二进制文件

发布版本二进制文件可在 GitHub 发布 上找到,通过 cargo binstall 使用。

cargo binstall cargo-hakari

在 GitHub Actions CI 中,使用 taiki-e/install-action,它底层使用 cargo binstall

- name: Install cargo-hakari
  uses: taiki-e/install-action@v2
   with:
     tool: cargo-hakari

从源安装

要安装或更新 cargo-hakari,运行

cargo install cargo-hakari --locked

如果 $HOME/.cargo/bin 在您的 PATH 中,则 cargo hakari 命令将可用。

用法

入门

为了使 cargo hakari 正确工作,您必须采取以下四个步骤。

1. 检查您的 Cargo.lock

为了使 hakari 正确工作,您必须将您的 Cargo.lock 添加到版本控制中,即使您没有任何二进制crate也是如此。这是因为依赖项的补丁版本提升可能会添加或删除功能,甚至整个传递依赖项。

2. 初始化工作区-hack

在工作区路径 my-workspace-hack 处初始化工作区-hack crate

cargo hakari init my-workspace-hack

3. 生成 Cargo.toml

生成或更新工作区-hack crate 的内容

cargo hakari generate

4. 将依赖项添加到工作区-hack

将工作区-hack crate 作为依赖项添加到所有其他工作区 crate 中

cargo hakari manage-deps

使 hakari 工作良好

以下是一些并非绝对必要做的事情,但会使 cargo hakari 工作得更好。

1. 更新 hakari 配置

打开 .config/hakari.toml,然后

  • 取消注释或添加常用的开发者平台
  • 阅读关于解析器的说明,并强烈考虑在您的 Cargo.toml 中设置 resolver = "2"

记住在更改配置后运行 cargo hakari generate

2. 在 CI 中保持工作区-hack 的最新状态

在 CI 中运行以下命令

cargo hakari generate --diff  # workspace-hack Cargo.toml is up-to-date
cargo hakari manage-deps --dry-run  # all workspace crates depend on workspace-hack

如果这些命令中的任何一个以非零状态退出,您可以选择使 CI 失败或生成警告消息。

有关示例,请参阅 此 GitHub action,用于 cargo-guppy

所有 cargo hakari 命令都接受一个 --quiet 选项来抑制输出,尽管在 CI 中显示 diff 输出通常很有用。

3. 考虑一个 patch 指令

如果您的 workspace 作为 Git 或路径依赖项被依赖,强烈建议您遵循 patch 指令部分 中的说明。

关于工作区-hack 的信息

本节中的命令提供了关于工作区-hack 组件的信息。

为什么工作区中有一个依赖项?

打印出关于为什么在工作区中存在依赖的信息

cargo hakari explain <dependency-name>

工作区-hack 是否确保每个依赖项仅使用一个功能集进行构建?

cargo hakari verify

如果某些依赖项使用多个功能集进行构建,此命令将打印有关它们的详细信息。这始终是一个错误——如果您遇到这种情况,请提交包含更多信息的错误报告将非常感谢!

发布 crate

如果您向 crates.io 或其他注册表发布 crate,请参阅 publishing 模块

禁用和卸载

通过从 Cargo.toml 中删除生成的行来暂时禁用 workspace-hack crate。(通过运行 cargo hakari generate 来重新启用。)

cargo hakari disable

从所有其他工作区 crate 中删除 workspace-hack crate 作为依赖项

cargo hakari remove-deps

配置

cargo hakari 通过工作区根目录下的 .config/hakari.toml 进行配置。运行 cargo hakari init 将在此位置创建一个新文件。

示例配置

# The name of the package used for workspace-hack unification.
hakari-package = "workspace-hack"
# Cargo resolver version in use -- version 2 is highly recommended.
resolver = "2"

# Format for `workspace-hack = ...` lines in other Cargo.tomls. Version 2 requires cargo-hakari
# 0.9.8 or above.
dep-format-version = "2"

# Add triples corresponding to platforms commonly used by developers here.
# https://doc.rust-lang.net.cn/rustc/platform-support.html
platforms = [
    # "x86_64-unknown-linux-gnu",
    # "x86_64-apple-darwin",
    # "x86_64-pc-windows-msvc",
]

# Write out exact versions rather than specifications. Set this to true if version numbers in
# `Cargo.toml` and `Cargo.lock` files are kept in sync, e.g. in some configurations of
# https://dependabot.com/.
# exact-versions = false

有关更多选项,包括如何排除输出中的 crate,请参阅 config 模块

稳定性保证

cargo-hakari 遵循语义版本控制,其中公共 API 是命令行界面。

在给定系列中,命令行界面将被视为可追加的。

除非添加了新的配置选项,否则生成的 Cargo.toml 将保持不变,或者

  • 涉及错误修复。
  • 涉及错误修复。

贡献

有关如何帮助的详细信息,请参阅 CONTRIBUTING 文件。

许可

本项目可在 Apache 2.0 许可证MIT 许可证 的条款下使用。

依赖项

~15–26MB
~393K SLoC