jobs
Added in lefthook
1.10.0
Jobs provide a flexible way to define tasks, supporting both commands and scripts. Jobs can be grouped for advanced flow control.
Basic example
Define jobs in your lefthook.yml file under a specific hook like pre-commit:
# lefthook.yml
pre-commit:
jobs:
- run: yarn lint
- run: yarn test
Differences from Commands and Scripts
Optional Job Names
- Named jobs are merged across
extendsand local config. - Unnamed jobs are appended in the order of their definition.
Job Groups
- Groups can include other jobs.
- Flow within groups can be parallel or piped. Options
glob,root, andexcludeapply to all jobs in the group, including nested ones.
Job options
Below are the available options for configuring jobs.
namerunscriptrunnergroupskiponlytagsglobfilesfile_typesenvrootexcludefail_textstage_fixedinteractiveuse_stdin
Example
Note: Currently, only
root,glob, andexcludeoptions are applied to group jobs. Other options must be set for each job individually. Submit a feature request if this limits your workflow.
A configuration demonstrating a piped group running in parallel with other jobs:
# lefthook.yml
pre-commit:
parallel: true
jobs:
- name: migrate
root: backend/
glob: "db/migrations/*"
group:
piped: true
jobs:
- run: bundle install
- run: rails db:migrate
- run: yarn lint --fix {staged_files}
root: frontend/
stage_fixed: true
- run: bundle exec rubocop
root: backend/
- run: golangci-lint
root: proxy/
- script: verify.sh
runner: bash
This configuration runs migrate jobs in a piped flow while other jobs execute in parallel.