Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/evilmartians/lefthook
Fast and powerful Git hooks manager for any type of projects.
https://github.com/evilmartians/lefthook
git go golang hacktoberfest hooks lefthook manager
Last synced: 6 days ago
JSON representation
Fast and powerful Git hooks manager for any type of projects.
- Host: GitHub
- URL: https://github.com/evilmartians/lefthook
- Owner: evilmartians
- License: mit
- Created: 2019-02-05T14:00:56.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-10-29T07:42:34.000Z (3 months ago)
- Last Synced: 2024-10-29T22:53:45.373Z (2 months ago)
- Topics: git, go, golang, hacktoberfest, hooks, lefthook, manager
- Language: Go
- Homepage:
- Size: 80.3 MB
- Stars: 4,915
- Watchers: 26
- Forks: 216
- Open Issues: 53
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
- awesome - evilmartians/lefthook - Fast and powerful Git hooks manager for any type of projects. (Go)
- personal-awesome-list - lefthook
- my-awesome - evilmartians/lefthook - 12 star:5.2k fork:0.2k Fast and powerful Git hooks manager for any type of projects. (Go)
- awesome-starred-test - evilmartians/lefthook - Fast and powerful Git hooks manager for any type of projects. (Go)
- awesome-github-repos - evilmartians/lefthook - Fast and powerful Git hooks manager for any type of projects. (Go)
- awesome-list - lefthook
- jimsghstars - evilmartians/lefthook - Fast and powerful Git hooks manager for any type of projects. (Go)
- awesome-golang-repositories - lefthook
- awesome-git - lefthook - fast and powerful Git hooks manager for any type of project. (Hook management / Comparing workflows)
- stars - lefthook
- stars - lefthook
README
![Build Status](https://github.com/evilmartians/lefthook/actions/workflows/test.yml/badge.svg?branch=master)
[![Coverage Status](https://coveralls.io/repos/github/evilmartians/lefthook/badge.svg?branch=master)](https://coveralls.io/github/evilmartians/lefthook?branch=master)# Lefthook
> The fastest polyglot Git hooks manager out there
A Git hooks manager for Node.js, Ruby, Python and many other types 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.π [Documentation][documentation]
π [Read the introduction post](https://evilmartians.com/chronicles/lefthook-knock-your-teams-code-back-into-shape?utm_source=lefthook)
## Install
With **Go** (>= 1.23):
```bash
go install github.com/evilmartians/lefthook@latest
```With **NPM**:
```bash
npm install lefthook --save-dev
```For **Ruby**:
```bash
gem install lefthook
```For **Python**:
```bash
pip install lefthook
```**[Installation guide][installation]** with more ways to install lefthook: [apt][install-apt], [brew][install-brew], [winget][install-winget], and others.
## Usage
Configure your hooks, install them once and forget about it: rely on the magic underneath.
#### TL;DR
```bash
# Configure your hooks
vim lefthook.yml# Install them to the git project
lefthook install# Enjoy your work with git
git add -A && git commit -m '...'
```#### More details
- [**Configuration**][configuration] for `lefthook.yml` config options.
- [**Usage**][usage] for **lefthook** CLI options, supported ENVs, and usage tips.
- [**Discussions**][discussion] for questions, ideas, suggestions.## Why Lefthook
* ### **Parallel execution**
Gives you more speed. [docs][config-parallel]```yml
pre-push:
parallel: true
```* ### **Flexible list of files**
If you want your own list. [Custom][config-files] and [prebuilt][config-run] examples.```yml
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](https://github.com/gobwas/glob#example).```yml
pre-commit:
commands:
backend-linter:
glob: "*.rb" # glob filter
exclude: '(^|/)(application|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```yml
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. [docs][config-scripts]
```yml
commit-msg:
scripts:
"template_checker":
runner: bash
```* ### **Tags**
If you want to control a group of commands. [docs][config-tags]```yml
pre-push:
commands:
packages-audit:
tags:
- frontend
- linters
run: yarn lint
gems-audit:
tags:
- backend
- security
run: bundle audit
```* ### **Support Docker**
If you are in the Docker environment. [docs][config-run]
```yml
pre-commit:
scripts:
"good_job.js":
runner: docker run -it --rm {cmd}
```* ### **Local config**
If you a frontend/backend developer and want to skip unnecessary commands or override something into Docker. [docs][usage-local-config]
```yml
# lefthook-local.yml
pre-push:
exclude_tags:
- frontend
commands:
packages-audit:
skip: true
```* ### **Direct control**
If you want to run hooks group directly.
```bash
$ lefthook run pre-commit
```* ### **Your own tasks**
If you want to run specific group of commands directly.
```yml
fixer:
commands:
ruby-fixer:
run: bundle exec rubocop --force-exclusion --safe-auto-correct {staged_files}
js-fixer:
run: yarn eslint --fix {staged_files}
```
```bash
$ lefthook run fixer
```* ### **Control output**
You can control what lefthook prints with [output][config-output] option.
```yml
output:
- execution
- failure
```----
### Guides
* [Install with Node.js][install-node]
* [Install with Ruby][install-ruby]
* [Install with Homebrew][install-brew]
* [Install with Winget][install-winget]
* [Install for Debian-based Linux][install-apt]
* [Install for RPM-based Linux][install-rpm]
* [Install for Arch Linux][install-arch]
* [Install for Alpine Linux][install-alpine]
* [Usage][usage]
* [Configuration][configuration]### Examples
Check [examples][examples]
### Articles
* [5 cool (and surprising) ways to configure Lefthook for automation joy](https://evilmartians.com/chronicles/5-cool-and-surprising-ways-to-configure-lefthook-for-automation-joy?utm_source=lefthook)
* [Lefthook: Knock your teamβs code back into shape](https://evilmartians.com/chronicles/lefthook-knock-your-teams-code-back-into-shape?utm_source=lefthook)
* [Lefthook + Crystalball](https://evilmartians.com/chronicles/lefthook-crystalball-and-git-magic?utm_source=lefthook)
* [Keeping OSS documentation in check with docsify, Lefthook, and friends](https://evilmartians.com/chronicles/keeping-oss-documentation-in-check-with-docsify-lefthook-and-friends?utm_source=lefthook)
* [Automatically linting docker containers](https://dev.to/nitzano/linting-docker-containers-2lo6?utm_source=lefthook)
* [Smooth PostgreSQL upgrades in DockerDev environments with Lefthook](https://dev.to/palkan_tula/smooth-postgresql-upgrades-in-dockerdev-environments-with-lefthook-203k?utm_source=lefthook)
* [Lefthook for React/React Native apps](https://blog.logrocket.com/deep-dive-into-lefthook-react-native?utm_source=lefthook)[documentation]: https://evilmartians.github.io/lefthook/
[configuration]: https://evilmartians.github.io/lefthook/configuration/index.html
[examples]: https://evilmartians.github.io/lefthook/examples/index.html
[installation]: https://evilmartians.github.io/lefthook/installation/
[usage]: https://evilmartians.github.io/lefthook/usage/index.html
[discussion]: https://github.com/evilmartians/lefthook/discussions
[install-apt]: https://evilmartians.github.io/lefthook/installation/deb.html
[install-ruby]: https://evilmartians.github.io/lefthook/installation/ruby.html
[install-node]: https://evilmartians.github.io/lefthook/installation/node.html
[install-brew]: https://evilmartians.github.io/lefthook/installation/homebrew.html
[install-winget]: https://evilmartians.github.io/lefthook/installation/winget.html
[install-rpm]: https://evilmartians.github.io/lefthook/installation/rpm.html
[install-arch]: https://evilmartians.github.io/lefthook/installation/arch.html
[install-alpine]: https://evilmartians.github.io/lefthook/installation/alpine.html
[config-parallel]: https://evilmartians.github.io/lefthook/configuration/parallel.html
[config-files]: https://evilmartians.github.io/lefthook/configuration/files.html
[config-glob]: https://evilmartians.github.io/lefthook/configuration/glob.html
[config-run]: https://evilmartians.github.io/lefthook/configuration/run.html
[config-scripts]: https://evilmartians.github.io/lefthook/configuration/Scripts.html
[config-tags]: https://evilmartians.github.io/lefthook/configuration/tags.html
[config-skip_output]: https://evilmartians.github.io/lefthook/configuration/skip_output.html
[config-output]: https://evilmartians.github.io/lefthook/configuration/output.html
[usage-local-config]: https://evilmartians.github.io/lefthook/usage/tips.html#local-config