Skip to content

pplmx/husky-rs

husky-rs

CI Coverage Crates.io Documentation License

husky-rs is a Git hooks management tool for Rust projects, inspired by Husky.

Features

  • πŸš€ Zero-configuration - Just add the dependency and create hooks
  • ⚑ Automatic installation - Hooks install on cargo build or cargo test
  • πŸ”„ Smart rerun detection - No need for cargo clean when updating hooks
  • βœ… Comprehensive validation - Warns about empty hooks and missing shebangs
  • 🎯 All 27 Git hooks supported - Client-side and server-side hooks
  • 🌍 Cross-platform - Works on Unix-like systems and Windows
  • πŸ› οΈ Optional CLI tool - husky init, husky add, husky list commands
  • πŸ“š Optional library API - Helper functions for advanced use cases

Quick Start

  1. Adding husky-rs to your project:

    You have several options:

    # Option 1: Add as a Regular Dependency
    cargo add husky-rs
    
    # Option 2: Add as a Dev Dependency
    cargo add --dev husky-rs
    
    # Option 3: Use the Main Branch
    cargo add --git https://github.com/pplmx/husky-rs --branch main
    cargo add --dev --git https://github.com/pplmx/husky-rs --branch main
  2. Create hooks directory:

    mkdir -p .husky/hooks
  3. Add a hook (e.g., pre-commit):

    echo '#!/bin/sh\necho "Running pre-commit hook"' > .husky/hooks/pre-commit
  4. Install hooks:

    cargo build

    Or if you're using as a dev-dependency:

    cargo test

Tip: If you add this library to the [dependencies] section, both cargo build and cargo test will work. However, if it's added under [dev-dependencies], only cargo test will function as expected.

Usage

Supported Git Hooks

husky-rs supports all 27 Git hooks, including:

  • pre-commit - Run before commit is created
  • prepare-commit-msg - Edit commit message before committing
  • commit-msg - Validate commit message format
  • post-commit - Run after commit is created
  • pre-push - Run before pushing to remote
  • And 22 more...

For a complete list, refer to the Git documentation.

If you encounter any unsupported hooks, please open an issue.

Configuration

To skip hook installation (useful in CI environments):

NO_HUSKY_HOOKS=1 cargo build

You can also set this in your environment or CI configuration.

Optional Tools

CLI Tool

For added convenience, install the husky command-line tool:

cargo install husky-rs --features=cli

The CLI provides helpful commands:

husky init              # Create .husky/hooks directory
husky add pre-commit    # Add hook from smart template
husky list              # List all installed hooks
husky help              # Show help

Note: The CLI is completely optional - the core functionality works without it!

Library API

For advanced use cases, husky-rs exposes utility functions:

use husky_rs::{hooks_dir, should_skip_installation, is_valid_hook_name};

// Check if hook installation should be skipped
if !should_skip_installation() {
    let hooks_path = hooks_dir(".");
    println!("Hooks directory: {}", hooks_path.display());
}

// Validate a hook name
if is_valid_hook_name("pre-commit") {
    println!("Valid hook!");
}

See API documentation for more details.

Note: You don't need to call any functions for basic usage - just add the dependency!

Best Practices

  • Keep hooks lightweight to avoid slowing down Git operations
  • Use hooks for tasks like running tests, linting code, and validating commit messages
  • Non-zero exit status in a hook script will abort the Git operation

Documentation

πŸ“– Complete guides for all users:

Contributing

We welcome contributions! Please see our Contributing Guide for details on how to submit pull requests, report issues, or suggest improvements.

License

This project is licensed under either of:

at your option.

Changelog

For a detailed history of changes to this project, please refer to our CHANGELOG.md.

Acknowledgments

  • Inspired by cargo-husky
  • Thanks to the Rust community for their amazing tools and libraries

About

A husky-like hook for Rust.

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 5