19 个版本 (8 个稳定版)

使用旧 Rust 2015

1.5.0 2020年1月21日
1.4.0 2019年5月22日
1.3.0 2019年1月24日
1.2.1 2018年12月13日
0.3.1 2018年10月7日

#80Cargo 插件

Download history 6401/week @ 2024-03-04 7247/week @ 2024-03-11 7960/week @ 2024-03-18 8533/week @ 2024-03-25 8322/week @ 2024-04-01 8917/week @ 2024-04-08 8139/week @ 2024-04-15 8897/week @ 2024-04-22 8558/week @ 2024-04-29 10364/week @ 2024-05-06 10019/week @ 2024-05-13 8685/week @ 2024-05-20 7492/week @ 2024-05-27 7235/week @ 2024-06-03 6731/week @ 2024-06-10 6710/week @ 2024-06-17

28,886 每月下载
260 个包中使用了 (257 个直接使用)

自定义许可证

12KB
283

Husky for Cargo 🐶

Crates.io Build Status on Linux/macOS Build status on Windows

cargo-husky 是一个由 cargo 管理的 Rust 项目包。简而言之,cargo-husky 是 husky 的 Rust 版本。

cargo-husky 是一个开发工具,用于在 cargo test 上自动设置 Git 钩。通过挂钩 pre-push 并自动运行 cargo test,它可以防止有问题的代码被推送到远程仓库。

使用方法

请将 cargo-husky 包添加到项目的 [dev-dependencies] 部分。

[dev-dependencies]
cargo-husky = "1"

然后在项目目录中运行测试。

$ cargo test

检查 Git 钩是否在 .git/hooks/pre-push 中生成。cargo-husky 默认会生成一个钩子脚本,该脚本会运行 cargo test

例如:

#!/bin/sh
#
# This hook was set by cargo-husky v1.0.0: https://github.com/rhysd/cargo-husky#readme
# Generated by script /path/to/cargo-husky/build.rs
# Output at /path/to/target/debug/build/cargo-husky-xxxxxx/out
#

set -e

echo '+cargo test'
cargo test

注意:cargo-husky 在以下情况下不会执行 cargo test

  • 钩子脚本已经被同一版本的 cargo-husky 生成
  • 其他人已经放置了另一个钩子脚本

要卸载 cargo-husky,请从您的 [dev-dependencies] 中移除 cargo-husky,并从 .git/hooks 中移除钩子脚本。

日本博客文章

自定义行为

可以通过 cargo-husky 包的特征标志来自定义 cargo-husky 的行为。您可以在 Cargo.toml[dev-dependencies.cargo-husky] 部分中指定它们,而不是将其添加到 [dev-dependencies] 部分。

例如:

[dev-dependencies.cargo-husky]
version = "1"
default-features = false # Disable features which are enabled by default
features = ["precommit-hook", "run-cargo-test", "run-cargo-clippy"]

此配置生成 .git/hooks/pre-commit 脚本,该脚本会运行 cargo testcargo clippy

所有功能如下

功能 描述 默认
run-for-all --all 选项添加到命令中,以便在工作空间中的所有 crate 中运行它 启用
prepush-hook 生成 pre-push 钩子脚本 启用
precommit-hook 生成 pre-commit 钩子脚本 禁用
postmerge-hook 生成 post-merge 钩子脚本 禁用
run-cargo-test 在钩子脚本中运行 cargo test 启用
run-cargo-check 在钩子脚本中运行 cargo check 禁用
run-cargo-clippy 在钩子脚本中运行 cargo clippy -- -D warnings 禁用
run-cargo-fmt 在钩子脚本中运行 cargo fmt -- --check 禁用
user-hooks 请参阅下面章节 禁用

用户钩子

如果 run-cargo-testrun-cargo-clippy 功能生成的钩子脚本不足以满足您的需求,您可以创建自己的钩子脚本,并告诉 cargo-husky 将它们放入 .git/hooks 目录。

  1. 在放置 .git 目录相同的目录中创建 .cargo-husky/hooks 目录。
  2. 创建 pre-pushpre-commit 等钩子文件,如您所愿。
  3. 为文件设置可执行权限(在 *nix 操作系统上)。
  4. features = ["user-hooks"] 写入您的 [dev-dependencies.cargo-husky] 部分 Cargo.toml
  5. 通过删除现有的 target 目录并运行 cargo test 来检查它是否正常工作。

例如:

your-repository/
├── .git
└── .cargo-husky
    └── hooks
        ├── post-merge
        └── pre-commit
[dev-dependencies.cargo-husky]
version = "1"
default-features = false
features = ["user-hooks"]

cargo-husky 在 .git/hooks/ 中插入信息头,以便检测自版本更新。

请注意,当启用 user-hooks 功能时,其他所有功能都会被禁用。您需要准备 .cargo-husky/hooks 目录中的所有钩子。

忽略安装钩子

如果您出于某种原因不想安装钩子,请设置 $CARGO_HUSKY_DONT_INSTALL_HOOKS 环境变量。

CARGO_HUSKY_DONT_INSTALL_HOOKS=true cargo test

工作原理

husky 利用 npm 的钩子脚本,但 cargo 没有提供这样的钩子。相反,cargo-husky 通过 cargo 的构建脚本功能 自动在运行测试时设置 Git 钩子。

构建脚本旨在用于构建第三方非 Rust 代码,如 C 库。它们在编译 crate 时自动运行。

如果将 cargo-husky crate 添加到 dev-dependencies 部分,则在运行测试时进行编译。在此期间,构建脚本 将运行并自动设置 Git 钩子。构建脚本根据由 cargo 自动设置的 $OUT_DIR 环境变量找到 .git 目录以放置钩子。

cargo-husky 只为同一版本放置一次 Git 钩子文件。当它更新到新版本时,它会通过检测自身已更新来覆盖现有的钩子。

cargo-husky 在 macOS 上开发,并在 Linux/macOS/Windows 上使用 'stable' 频道 Rust 工具链进行测试。

许可证

MIT

无运行时依赖