Contents
Outline
When I develop the frontend, I use Husky and lint-staged to execute ESLint and Prettier automatically when I commit on Git.
Recently, I use Golang to develop the web server and use Flutter to develop the mobile app. So, I need a tool like Husky and lint-staged, that is not based Node environment, to execute the Linter and test code .
In this blog post, I will introduce how to use Lefthook to execute Linter and test code when you commit on Git.
- Lefthook: https://github.com/evilmartians/lefthook
Install Lefthook
Lefthook supports various languages and OS. You can install Lefthook depending on your language or OS.
- Node.js
- Go
- Ruby
- pip for Python
- Homebrew for MacOS and Linux
- Snap for Linux
- RPM packages for CentOS/Fedora Linux
- AUR for Arch
In my case, I use macOS, so I executed the following command to install Lefthook.
brew install lefthook
Configure Lefthook
To use Lefthook, go to your project folder, and create the ./lefthook.yml file and modify it like the below.
pre-commit:
parallel: true
commands:
pretty:
glob: './src/**'
run: npx prettier --check {staged_files}
linter:
glob: 'src/**/*.{ts,tsx}'
run: npx eslint {staged_files}
You can use pre-commit or pre-push to bind some commands before committing or pushing on Git. You can use parallel option to execute the commands in parallel. You can configure commands to assign the command to the run option with specific names(pretty, linter, etc.). Also, you can filter the file list with the glob option, and you can execute the command on the specific folder by setting the root option.
pre-commit:
commands:
backend-linter:
root: "api/" # Careful to have only trailing slash
glob: "*.rb" # glob filter
run: bundle exec rubocop {all_files}
In addition, you can use the following features.
- Glob and regexp filters
- Run scripts
- Tags
- Support Docker
- Local config
- Direct control
- Your own tasks
- Optional output
Execute Lefthook
To check the Lefthook is configured well, execute the following command.
lefthook run pre-commit
After it, you can see the commands that we’ve configured in the ./lefthook.yml file are executed.
Apply Lefthook
The lefthook run ... command just executes the ./lefthook.yml file contents one time. However, we want to execute the ./lefthook.yml file contents by every Git commit event. So, execute the following command to configure the ./lefthook.yml file contents are executed when every Git commit event.
lefthook install
After then, when you execute the commit command of Git, you can see the ./lefthook.yml file contents are executed.
Execute hooks if subfolder changes
When you use Lefthook, sometimes you want to execute the specific commands when only the specific subfolder files change. For example, there is a project which contains the frontend and backend, and when you modify only frontend code, you don’t want to execute the commands about the backend.
At this time, you can use the files option like the following to execute the specific commands when the files in the specific folder are changed.
pre-commit:
parallel: true
commands:
linter:
files: git diff --name-only HEAD | grep "frontend/" || echo ''
root: "frontend/"
run: npm run lint
test:
files: git diff --name-only HEAD | grep "backend/" || echo ''
root: "backend/"
run: go test ./backend/test/...
Completed
Done! we’ve seen how to use Lefthook to execute the Linter or test code when the commit command of Git is executed. Lefthook supports various development environments, so you can use it in the project not based on Node.
Was my blog helpful? Please leave a comment at the bottom. it will be a great help to me!
App promotion
Deku.Deku created the applications with Flutter.If you have interested, please try to download them for free.



