husky-rs

Crates.iohusky-rs
lib.rshusky-rs
version0.2.2
created_at2024-09-28 15:45:27.632362+00
updated_at2026-01-09 10:10:43.994681+00
descriptionGit hooks manager for Rust projects - automatically install and manage Git hooks on build
homepagehttps://github.com/pplmx/husky-rs
repositoryhttps://github.com/pplmx/husky-rs
max_upload_size
id1390191
size122,893
Mystic (pplmx)

documentation

README

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
Commit count: 97

cargo fmt