1.11.3 • Published 4 months ago

lefthook v1.11.3

Weekly downloads
324
License
MIT
Repository
github
Last release
4 months ago

Build Status Coverage Status

Lefthook

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.

📖 Introduction post

Install

With Go (>= 1.23):

go install github.com/evilmartians/lefthook@latest

With NPM:

npm install lefthook --save-dev

For Ruby:

gem install lefthook

For Python:

pip install lefthook

Installation guide with more ways to install lefthook: apt, brew, winget, and others.

Usage

Configure your hooks, install them once and forget about it: rely on the magic underneath.

TL;DR

# 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 for lefthook.yml config options.
  • Usage for lefthook CLI options, supported ENVs, and usage tips.
  • Discussions for questions, ideas, suggestions.

Why Lefthook

  • Parallel execution

    Gives you more speed. docs
pre-push:
  parallel: true
  • Flexible list of files

    If you want your own list. Custom and prebuilt examples.
pre-commit:
  jobs:
    - name: lint frontend
      run: yarn eslint {staged_files}

    - name: lint backend
      run: bundle exec rubocop --force-exclusion {all_files}

    - name: stylelint frontend
      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:
  jobs:
    - name: lint backend
      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
pre-commit:
  jobs:
    - name: lint backend
      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

commit-msg:
  jobs:
    - script: "template_checker"
      runner: bash
  • Tags

    If you want to control a group of commands. docs
pre-push:
  jobs:
    - name: audit packages
      tags:
        - frontend
        - linters
      run: yarn lint

    - name: audit gems
      tags:
        - backend
        - security
      run: bundle audit
  • Support Docker

If you are in the Docker environment. docs

pre-commit:
  jobs:
    - script: "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. docs

# lefthook-local.yml
pre-push:
  exclude_tags:
    - frontend
  jobs:
    - name: audit packages
      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:
  jobs:
    - run: bundle exec rubocop --force-exclusion --safe-auto-correct {staged_files}
    - run: yarn eslint --fix {staged_files}
$ lefthook run fixer
  • Control output

You can control what lefthook prints with output option.

output:
  - execution
  - failure

Guides

Examples

Check examples

Articles

1.10.5

6 months ago

1.10.4

6 months ago

1.10.3

6 months ago

1.10.2

6 months ago

1.10.9

6 months ago

1.10.8

6 months ago

1.10.7

6 months ago

1.10.6

6 months ago

1.11.3

4 months ago

1.11.2

4 months ago

1.11.1

4 months ago

1.9.1

7 months ago

1.9.0

7 months ago

1.10.1

7 months ago

1.10.0

7 months ago

1.9.3

7 months ago

1.9.2

7 months ago

1.11.0

5 months ago

1.10.11

5 months ago

1.8.5

7 months ago

1.8.4

8 months ago

1.10.10

6 months ago

1.8.2

8 months ago

1.8.1

9 months ago

1.8.0

9 months ago

1.7.15

10 months ago

1.7.16

10 months ago

1.7.17

10 months ago

1.7.18

9 months ago

1.7.21

9 months ago

1.7.22

9 months ago

1.7.10

12 months ago

1.7.11

12 months ago

1.7.12

11 months ago

1.7.13

11 months ago

1.7.14

11 months ago

1.7.9

12 months ago

1.7.8

12 months ago

1.7.7

12 months ago

1.7.6

12 months ago

1.7.5

12 months ago

1.7.4

12 months ago

1.6.22

1 year ago

1.6.21

1 year ago

1.6.13

1 year ago

1.6.15

1 year ago

1.6.14

1 year ago

1.6.17

1 year ago

1.6.16

1 year ago

1.6.19

1 year ago

1.6.18

1 year ago

1.7.3

12 months ago

1.7.2

12 months ago

1.7.1

1 year ago

1.7.0

1 year ago

1.6.12

1 year ago

1.6.11

1 year ago

1.6.10

1 year ago

1.6.9

1 year ago

1.6.8

1 year ago

1.6.7

1 year ago

1.6.6

1 year ago

1.6.5

1 year ago

1.6.4

1 year ago

1.6.3

1 year ago

1.6.2

1 year ago

1.6.1

1 year ago

1.6.0

1 year ago

1.5.7

1 year ago

1.5.6

1 year ago

1.5.5

2 years ago

1.5.4

2 years ago

1.5.3

2 years ago

1.5.2

2 years ago

1.5.1

2 years ago

1.5.0

2 years ago

1.4.11

2 years ago

1.4.10

2 years ago

1.4.6

2 years ago

1.4.5

2 years ago

1.4.4

2 years ago

1.4.3

2 years ago

1.4.2

2 years ago

1.4.1

2 years ago

1.4.0

2 years ago

1.4.9

2 years ago

1.4.8

2 years ago

1.4.7

2 years ago

1.3.10

2 years ago

1.3.13

2 years ago

1.3.11

2 years ago

1.3.12

2 years ago

1.3.7

2 years ago

1.2.8

2 years ago

1.3.6

2 years ago

1.2.7

2 years ago

1.3.5

2 years ago

1.3.4

2 years ago

1.3.3

2 years ago

1.3.2

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.3.9

2 years ago

1.3.8

2 years ago

1.2.9

2 years ago

1.2.0

3 years ago

1.2.6

3 years ago

1.2.5

3 years ago

1.2.4

3 years ago

1.2.3

3 years ago

1.1.4

3 years ago

1.2.2

3 years ago

1.1.3

3 years ago

1.2.1

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.0.2

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

1.0.5

3 years ago

0.0.4

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

0.0.1

7 years ago