All Projects → evilmartians → lefthook

evilmartians / lefthook

Licence: MIT license
Fast and powerful Git hooks manager for any type of projects.

Programming Languages

go
31211 projects - #10 most used programming language
javascript
184084 projects - #8 most used programming language
Makefile
30231 projects
ruby
36898 projects - #4 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to lefthook

Lefthook
Fast and powerful Git hooks manager for any type of projects.
Stars: ✭ 1,848 (-35.04%)
Mutual labels:  manager, lefthook
Android File Chooser
a lightweight file/folder chooser or picker
Stars: ✭ 231 (-91.88%)
Mutual labels:  manager
Pm
The easy way to switch between your projects on ZSH
Stars: ✭ 142 (-95.01%)
Mutual labels:  manager
Seo Manager
Seo Manager Package for Laravel ( with Localization )
Stars: ✭ 192 (-93.25%)
Mutual labels:  manager
Multiprocess
🚀Easy to make the common PHP/Python/js...script change daemon and multi-process execution
Stars: ✭ 151 (-94.69%)
Mutual labels:  manager
Yadm
Yet Another Dotfiles Manager
Stars: ✭ 2,982 (+4.82%)
Mutual labels:  manager
Windowsgsm
🎲 A powerful tool to manage game servers. Equipped with a GUI for server admins to install, import, start, stop, restart, update, and automate multiple servers with a push of a button.
Stars: ✭ 141 (-95.04%)
Mutual labels:  manager
Todokit
TodoKit - A beautiful bug and issue tracking software.
Stars: ✭ 253 (-91.11%)
Mutual labels:  manager
Lwrb
Lightweight generic ring buffer manager library
Stars: ✭ 215 (-92.44%)
Mutual labels:  manager
Boss
Dependency Manager for Delphi
Stars: ✭ 188 (-93.39%)
Mutual labels:  manager
School
Sistema de gerenciamento para escola em Laravel com VueJS (Não é mais Angular)
Stars: ✭ 178 (-93.74%)
Mutual labels:  manager
Langxdblog
一名项目兼产品管理老鸟的心得体会
Stars: ✭ 153 (-94.62%)
Mutual labels:  manager
Cluster Lifecycle Manager
Cluster Lifecycle Manager (CLM) to provision and update multiple Kubernetes clusters
Stars: ✭ 200 (-92.97%)
Mutual labels:  manager
Polybar Pulseaudio Control
A feature-full Polybar module to control PulseAudio
Stars: ✭ 148 (-94.8%)
Mutual labels:  manager
Redis Manager
Integrates your Laravel application with a redis manager
Stars: ✭ 245 (-91.39%)
Mutual labels:  manager
Custard
custard window manager
Stars: ✭ 141 (-95.04%)
Mutual labels:  manager
Amiiswap
Nintendo Switch GUI Amiibo Manager homebrew for emulation with Emuiibo (nfp mitm)
Stars: ✭ 159 (-94.41%)
Mutual labels:  manager
Cgru
CGRU - AFANASY
Stars: ✭ 197 (-93.08%)
Mutual labels:  manager
selectmanager
android select manager library
Stars: ✭ 15 (-99.47%)
Mutual labels:  manager
Gitstars
Github Stars Repositories Manager
Stars: ✭ 253 (-91.11%)
Mutual labels:  manager

Build Status Coverage Status

Lefthook

The fastest polyglot Git hooks manager out there

Fast and powerful Git hooks manager for Node.js, Ruby or any other type of projects.

  • Fast. It is written in Go. Can run commands in parallel.
  • Powerful. It allows to control execution and files you pass to your commands.
  • Simple. It is single dependency-free binary which can work in any environment.

📖 Read the introduction post

Sponsored by Evil Martians

Install

With Go (>= 1.19):

go install github.com/evilmartians/lefthook@latest

With NPM:

npm install lefthook --save-dev

With Ruby:

gem install lefthook

Installation guide with more different installation instructions.

Usage

Lefthook is easy to use. Once you configure and setup you can forget that it even exists and rely on the magic underneath.

See:

  • Usage of lefthook CLI utility.
  • Configuration details for lefthook.yml
  • Wiki for other information.
  • Discussions if you want to ask a question, suggest a feature, or report a bug.

Why Lefthook

  • Parallel execution

Gives you more speed. Example

pre-push:
  parallel: true
  • Flexible list of files

If you want your own list. Custom and prebuilt examples.

pre-commit:
  commands:
    frontend-linter:
      run: yarn eslint {staged_files}
    backend-linter:
      run: bundle exec rubocop --force-exclusion {all_files}
    frontend-style:
      files: git diff --name-only HEAD @{push}
      run: yarn stylelint {files}
  • Glob and regexp filters

If you want to filter list of files. You could find more glob pattern examples here.

pre-commit:
  commands:
    backend-linter:
      glob: "*.rb" # glob filter
      exclude: "application.rb|routes.rb" # regexp filter
      run: bundle exec rubocop --force-exclusion {all_files}
  • Execute in sub-directory

If you want to execute the commands in a relative path

pre-commit:
  commands:
    backend-linter:
      root: "api/" # Careful to have only trailing slash
      glob: "*.rb" # glob filter
      run: bundle exec rubocop {all_files}
  • Run scripts

If oneline commands are not enough, you can execute files. Example.

commit-msg:
  scripts:
    "template_checker":
      runner: bash
  • Tags

If you want to control a group of commands. Example.

pre-push:
  commands:
    packages-audit:
      tags: frontend security
      run: yarn audit
    gems-audit:
      tags: backend security
      run: bundle audit
  • Support Docker

If you are in the Docker environment. Example.

pre-commit:
  scripts:
    "good_job.js":
      runner: docker run -it --rm <container_id_or_name> {cmd}
  • Local config

If you a frontend/backend developer and want to skip unnecessary commands or override something into Docker. Description.

# lefthook-local.yml
pre-push:
  exclude_tags:
    - frontend
  commands:
    packages-audit:
      skip: true
  • Direct control

If you want to run hooks group directly.

$ lefthook run pre-commit
  • Your own tasks

If you want to run specific group of commands directly.

fixer:
  commands:
    ruby-fixer:
      run: bundle exec rubocop --force-exclusion --safe-auto-correct {staged_files}
    js-fixer:
      run: yarn eslint --fix {staged_files}
$ lefthook run fixer
  • Optional output

If you don't want to see supporting information:

skip_output:
  - meta #(version and which hook running)
  - success #(output from runners with exit code 0)

Table of contents:

Guides

Migrate from

Examples

Benchmarks

Comparison list

Articles

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].