- feat: add ability to specify job names for command run (#904) by @mrexox
- ci: add linux aarch64 binary to release (#903) by @mrexox
- ci: fix aur build (#905) by @mrexox
- fix: use correct remote scripts folder (#891) by @mrexox
- fix: skip_lfs config option (#889) by @zachahn
- chore: add minimum git version support warning (#886) by @mrexox
- fix: reorder available hooks list (#884) by @scop
- docs: correct typo in 'Scoop for Windows' section (#883) by @Daniil-Oberlev
- refactor: [breaking] replace viper with koanf (#813) by @mrexox
- ci: fix packages release (#881) by @mrexox
- ci: automate publishing to cloudsmith (#875) by @mrexox
- feat: add option to skip running LFS hooks (#879) by @zachah
- ci: fix goreleaser update changes (#874) by @mrexox
- deps: November 2024 (#867) by @mrexox
- docs: add docs for fnm configuration (#869) by @vasylnahuliak
- docs: add
output
to list of config options (#868) by @cr7pt0gr4ph7
- fix: use absolute paths when cloning remotes (#873) by @mrexox
- chore: fix linter and tests by @mrexox
- feat: add refetch_frequency parameter to settings (#857) by @gabriel-ss
- docs: call commitizen properly (#858) by @politician
- chore: bump Go to 1.23 (#856) by Valentin Kiselev
- fix: skip git lfs hook when calling manually (#855) by Valentin Kiselev
- fix: [breaking] don't auto-install lefthook with npx if not found (#602) by @anthony-hayes
- fix: [breaking] execute files command within configured root (#607) by @mrexox
- fix: calculate hashsum of the full config (#854) by @mrexox
- feat: support globs in extends (#853) by @mrexox
- docs: simplify configuration docs (#851) by @mrexox
- feat: add skip option merge-commit (#850) by @mrexox
- ci: parallelize publishing (#847) by @mrexox
- fix: increase self update download timeout (#849) by @mrexox
- docs: update docs with new packages (#848) by @mrexox
- feat: maintain Python package too (#845) by @mrexox
- ci: generate apk files (#843) by @mrexox
- docs: mention to uninstall npm package (#842) by @mrexox
- chore: hide remaining wiki links (#841) by @midskyey
- docs: update info about merge order (#838) by @mrexox
- docs: actualize (#831) by @mrexox
- fix: force remote name origin when using remotes (#830) by @mrexox
- deps: September 2024 (#829) by @mrexox
- feat: skip LFS hooks when pre-push hook is skipped (#818) by @zachahn
- chore: enhance some code parts (#824) by @mrexox
- fix: quote script path (#823) by @mrexox
- docs: fix typo for command names in configuration.md (#814) by @nack43
Fix lefthook NPM package to include OpenBSD package as optional dependency.
- feat: support openbsd (#808) by @mrexox
- fix: log stderr in debug logs only (#804) by @mrexox
- fix: revert packaging change (#796) by @mrexox
- deps: July 2024 (#795) by @mrexox
- packaging(npm): try direct reference for lefthook executable (#794) by @mrexox
- fix: typo CGO_ENABLED instead of GCO_ENABLED (#791) by @mrexox
- fix: npm fix packages (#789) by @mrexox
- fix: explicitly pass static flag to linker (#788) by @mrexox
- ci: update workflow files (#787) by @mrexox
- ci: use latest goreleaser (#784) by @mrexox
- fix: multiple excludes (#782) by @mrexox
- feat: add self-update command (#778) by @mrexox
- feat: use glob in exclude array (#777) by @mrexox
- fix: rollback packaging changes (#776) by @mrexox
- feat: allow list of files in exclude option (#772) by @mrexox
- docs: add docs for LEFTHOOK_OUTPUT var (#771) by @manbearwiz
- fix: use direct lefthook package (#774) by @mrexox
- fix: add missing sub directory in hook template (#768) by @nikeee
- fix: use correct extension in hook.tmpl (#767) by @apfohl
- fix: publishing (#765) by @mrexox
- perf: startup time reduce (#705) by @dalisoft
- docs: add a note about pnpm package installation (#761) by @mrexox
- ci: retriable integrity tests (#758) by @mrexox
- ci: universal publisher with Ruby script (#756) by @mrexox
- fix: allow multiple levels of extends (#755) by @mrexox
- fix: apply local extends only if they are present (#754) by @mrexox
- chore: setting proper error message for missing lefthook file (#748) by @Cadienvan
- fix: skip overwriting hooks when fetching data from remotes (#745) by @mrexox
- fix: fetch remotes only for non ghost hooks (#744) by @mrexox
- feat: add refetch option to remotes config (#739) by @mrexox
- deps: June, 3, lipgloss (0.11.0) and viper (1.19.0) (#742) by @mrexox
- chore: enable copyloopvar, intrange, and prealloc (#740) by @scop
- perf: delay git and uname commands in hook scripts until needed (#737) by @scop
- chore: refactor commands interfaces (#735) by @mrexox
- chore: upgrade to 1.59.0 (#738) by @scop
- fix: share STDIN across different commands on pre-push hook (#732) by @tdesveaux and @mrexox
- feat: expand Swift integration with Mint support (#724) by @levibostian
- deps: May 22 dependencies update (#706) by @mrexox
- chore: remove go patch version in go.mod (#726) by @mrexox
- fix: more verbose error on versions mismatch (#721) by @mrexox
- fix: enable interactive scripts (#720) by @mrexox
- feat: add run --no-auto-install flag (#716) by @mrexox
- fix: add
--porcelain
togit status --short
(#711) by @110y - chore: bump go to 1.22 (#701) by @mrexox
- fix: enable interactive inputs for windows (#696) by @mrexox
- fix: add batching to implicit commands (#695) by @mrexox
- fix: command argument count validations (#694) by @scop
- fix: re-download remotes when called install with -f (#692) by @mrexox
- chore: remove redundant parallelisation (#690) by @mrexox
- chore: refactor Result handling (#689) by @mrexox
- fix: fallback to empty tree sha when no upstream set (#687) by @mrexox
- feat: add priorities to scripts (#684) by @mrexox
- deps: By April, 1 (#678) by @mrexox
- fix: don't apply empty patch files on pre-commit hook (#676) by @mrexox
- docs: allow only comma divided tags (#675) by @mrexox
- chore: add more tests on skip settings by @mrexox
- chore: add more linters, address findings (#670) by @scop
- chore: skip printing deprecation warning (#674) by @mrexox
- feat: handle
run
command in skip/only settings (#634) by @prog-supdex - deps: Dependencies March 2024 (#673) by @mrexox
- fix: fix printing when using
output
log setting (#672) by @mrexox - feat: Add output setting (#637) by @prog-supdex
- fix: use swift package before npx (#668) by @mrexox
- feat: use configurable path to lefthook (LEFTHOOK_BIN) (#653) by @technicalpickles
- fix: decrease max cmd length for windows (#666) by @mrexox
- deps: Dependencies 04.03.2024 (#664) by @mrexox
- chore: fix Makefile by @mrexox
- docs: fix redundant option by @mrexox
- deps: update uniseg (#650) by @technicalpickles
- deps: Dependencies (27.02.2024) (#648) by @mrexox
- chore: remove adaptive colors (#647) by @mrexox
- docs: update request help url (#641) by @sbsrnt
- fix: respect roots in commands for npm packages (#616) by @mrexox
- fix: don't capture STDIN without interactive or use_stdin options (#638) by @technicalpickles
- fix: handle LEFTHOOK_QUIET when there is no skip_output in config by @prog-supdex
- docs: add stage_fixed to the examples by @mrexxo
- docs: clarify the difference between piped and parallel options by @mrexox
- fix: files from stdin only null separated (#615) by @mrexox
- docs: add a new article link by @mrexox
- feat: add remotes and configs options (#609) by @NikitaCOEUR
- feat: add replaces to all template and parse files from stdin (#596) by @sanmai-NL
- feat: shell completion improvements (#577) by @scop
- fix: safe execute git commands without sh wrapper (#606) by @mrexox
- fix: use lefthook package with npx (#604) by @mrexox
- feat: allow setting a bool value for skip_output (#601) by @nsklyarov
- docs: update exception case about interactive option by @mrexox
- fix: use empty stdin by default (#590) by @mrexox
- feat: add priorities to commands (#589) by @mrexox
- chore: add typos fixer by @mrexox
- fix: drop new argument for git diff compatibility (#586) by @mrexox
- fix: don't check checksum file when explicitly calling lefthook install (#572) by @mrexox
- chore: skip summary separator if nothing is printed (#575) by @mrexox
- docs: update info about root option by @mrexox
- fix: correctly sort alphanumeric commands (#562) by @mrexox
- feat: add force flag to run command (#561) by @mrexox
- fix: do not enable export when sourcing rc file (#553) by @hyperupcall
- chore: wrap shell args in quotes for consistency by @mrexox
- docs: add a note that files template supports directories by @mrexox
- feat: initial support for Swift Plugins (#556) by @csjones
- chore: output enhancements (#549) by @mrexox
- feat: add interrupt (Ctrl-C) handling (#550) by @mrcljx
- docs: update docs and readme with tl;dr instructions (#548) by @mrexox
- fix: add use_stdin option for just reading from stdin (#547) by @mrexox
- chore: refactor commands passing (#546) by @mrexox
- fix: fail on non existing hook name (#545) by @mrexox
- fix: split command with file templates into chunks (#541) by @mrexox
- chore: add git-cliff config for easier changelog generation by @mrexox
- fix: allow empty staged files diffs (#543) by @mrexox
- chore: fix linter issues (#537) by @mrexox
- feat: add files, all-files, and commands flags (#534) by @nihalgonsalves
- chore: bump go to 1.21 (#536) by @nihalgonsalves
- feat: add assert_lefthook_installed option (#533) by @mrexox
- chore: add Add docs to PR template (#532) by @technicalpickles
- feat: add support for skipping empty summaries (#531) by @technicalpickles
- docs: add scoop installation method (#527) by @sitiom
- fix: correct merging of extends from remote config (#529) by @mrexox
- ci: add Winget Releaser action (#526) by @sitiom
- chore: improve correctness of load_test.go (#525) by @hyperupcall
- fix: do not print extraneous newlines when executionInfo output is hidden (#519) by @hyperupcall
- fix: uninstall all possible formats (#523) by @mrexox
- fix: LEFTHOOK_VERBOSE properly overrides --verbose flag (#521) by @hyperupcall
- feat: support .lefthook.yml and .lefthook-local.yml (#520) by @hyperupcall
- docs: improve documentation and examples (#517) by @hyperupcall
- fix: improve hook template (#516) by @hyperupcall
- fix: don't render bold ANSI sequence when colors are disabled (#515) by @adam12
- deps: July 2023 (#514) by @mrexox
- fix: auto stage non-standard files (#506) by @mrexox
- deps: June 2023 (#499)
- feat: support toml dumpint (#490) by @mrexox
- feat: support json configs (#489) by @mrexox
- fix: add win32 binary to artifacts (by @mrexox)
- feat: allow dumping with JSON (#485 by @mrexox
- feat: add skip execution_info option (#484) by @mrexox
- deps: from 05.2023 (#487) by @mrexox
- feat: add adaptive colors (#482) by @mrexox
- fix: skip output for interactive commands if configured (#483) by @mrexox
- feat: add dump command (#481) by @mrexox
- feat: add only option (#478) by @mrexox
- fix: allow skipping execution_out with interactive mode (#476) by @mrexox
- feat: add execution_out to skip output settings (#475) by @mrexox
- chore: add debug logs when hook is skipped (#474) by @mrexox
- feat: don't show when commands are skipped because of no matched files (#468) by @technicalpickles
- feat: allow extra hooks in local config (#462) by @fabn
- feat: pass numeric placeholders to files command (#461) by @fabn
- fix: make hook template compatible with shells without source command (#458) by @mdesantis
- fix: allow globs in skip option (#457) by @mrexox
- deps: dependencies update (March 2023) (#455) by @mrexox
- fix: don't fail on missing config file (#450) by @mrexox
- fix: stage fixed when root specified (#449) by @mrexox
- feat: implitic skip on missing files for pre-commit and pre-push hooks (#448) by @mrexox
- feat: add stage_fixed option (#445) by @mrexox
- fix: don't extra extend config if lefthook-local.yml is missing (#444) by @mrexox
- fix: restore release assets name (#437) by @watarukura
- fix: Allow sh syntax in files (#435) by @mrexox
- fix: Force creation of git hooks folder (#434) by @mrexox
- fix: Use correct branch for {push_files} template (#429) by @mrexox
- feature: Skip unstaged changes for pre-commit hook (#402) by @mrexox
- fix: memory leak dependency (#426) by @strpc
- fix: Don't join info path with root (#418) by @mrexox
- fix: Make info dir when it is absent (#414) by @sato11
- deps: bump github.com/mattn/go-isatty from 0.0.16 to 0.0.17 (#409) by @dependabot
- deps: bump github.com/briandowns/spinner from 1.19.0 to 1.20.0 (#406) by @dependabot
- fix: Double quote eval statements with $dir (#404) by @jrfoell
- chore: Add PR template (#401) by @mrexox
- chore: Fix yml syntax missing colon (#399) by @aaronkelton
- feature: Allow following output (#397) by @mrexox
- fix: Remove quotes for rc in template (#398) by @mrexox
- feature: Add an option to disable spinner (#396) by @mrexox
- feature: Use pnpm before npx (#393) by @mrexox
- chore: Use lipgloss for output (#395) by @mrexox
- feature: Allow providing rc file (PR #392 by @mrexox)
- feature: Expand env variables (PR #391 by @mrexox)
- deps: Update important dependencies (PR #389 by @mrexox)
- chore: Add FreeBSD OS to packages (PR #377 by @mrexox)
- feature: Skip based on branch name and allow global skip rules (PR #376 by @mrexox)
- fix: Omit LFS output unless it is required (PR #373 by @mrexox)
- fix: Remove quoting for scripts (PR #371 by @stonesbg + @mrexox)
- fix: remove lefthook.checksum on uninstall (PR #370 by @JuliusHenke)
- fix: Print prepare-commit-msg hook if it exists in config (PR #368 by @mrexox)
- fix: Allow changing refs for remote (PR #363 by @mrexox)
- fix: Full support for interactive commands and scripts (PR #352 by @mrexox)
- chore: Remove deprecated config options (PR #351 by @mrexox)
- feature: Add remote config support (PR #343 by @oatovar and @mrexox)
- feature: Add
LEFTHOOK_VERBOSE
env (PR #346 by @mrexox)
- ci: Fix snapcraft trying to create dirs in parallel by @mrexox
- feature: Allow setting env vars (PR #337 by @mrexox)
- feature: Show current running command and script name(s) (PR #338 by @mrexox)
- feature: Exclude by command names too (PR #335 by @mrexox)
- fix: Don't uninstall lefthook.yml and lefthook-local.yml by default (PR #334 by @mrexox)
- fix: Fixing typo in gemspec (PR #333 by @kerrizor)
- Fix regression from #314 (chmod missed fix) (PR #330 by @ariccio)
- Pass stdin by default (PR #324 by @mrexox)
- Quote path to script (PR #321 by @mrexox)
- Add goreleaser action (PR #307 by @mrexox)
- Windows escaping issues (PR #314 by @mrexox)
- Check for lefthook.bat in hook template (PR #316 by @mrexox)
- Update node.md docs (PR #312 by @fantua)
- Move postinstall script to main lefthook NPM package (PR #311 by @mrexox)
- Allow suppressing execution output (PR #309 by @mrexox)
- Update dependencies (PR #308 by @mrexox)
- Add support for Git LFS (PR #306 by @mrexox)
- Bump Go version to 1.19 (PR #305 by @mrexox)
- Add tests on runner (PR #304 by @mrexox)
- Add fail text option (PR #301 by @mrexox)
- Store lefthook checksum in non-hook file (PR #280 by @mrexox)
- Submodules issue (PR #300 by @mrexox)
- Remove rspec tests (PR #299 by @mrexox)
- Add
when "mingw" then "windows"
case (PR #297 by @ariccio) - Define security policy and contact method (PR #293 by @Envek)
- Support skipping on rebase (PR #289 by @mrexox)
- Fix NPM package
- Update email information
- Bring auto install back (PR #286 by @mrexox)
- Move main.go to root (PR #285 by @mrexox)
- Panic on commands structure misuse (PR #284 by @mrexox)
- Split npm package by os and cpu (PR #281 by @mrexox)
- Fix folders structure for
@evilmartians/lefthook
and@evilmartians/lefthook-installer
packages - Fix folders structure for
lefthook
gem
- Refactoring (PR #275 by @mrexox, @skryukov, @markovichecha)
- Replace deprecated
File.exists?
withexist?
for Ruby script (PR #263 by @pocke)
- Allow skipping hooks in certain git states: merge and/or rebase (PR #173 by @DmitryTsepelev)
- NPM: installer package that downloads the required binaries during installation (PR #188 by @aminya, PR #273 by @Envek)
- Add ability to skip summary output. Also support a
LEFTHOOK_QUIET
env variable (PR #187 by @washtubs) - Make filename globs case-insensitive (PR #196 by @skryukov)
- Fix lefthook binary extension on Windows (PR #188 by @aminya)
- Stop building 32-bit binaries for releases due to low usage (@Envek)
- Allow lefthook to work when node_modules is not in root folder for npx (PR #224 by @spearmootz)
- Fix unreachable conditional in hook template (PR #242 by @dannobytes)
- Add cpu arch and os arch to lefthook's filepath in hook template (PR #260 by @rmachado-studocu)
- Fix incorrect npx command in git hook script template (PR #236) @PikachuEXE
- Update project URLs in NPM package.json (PR #235) @PikachuEXE
- Pass all arguments to downstream hooks (PR #231) @pablobirukov
- Allows lefthook to work when node_modules is not in root folder for npx (PR #224) @spearmootz
- Do not initialize git config on
help
andversion
commands (PR #209) @pwinckles - node: fix postinstall: process.cwd is a function and should be called @Envek
- Fix lefthook binary extension on Windows. @aminya
- PR #193 Fix path for searching npm-installed binary when in worktree. @Envek
- NPM, RPM, and DEB packaging fixes. @Envek
- PR #179 Fix running on Windows under MSYS and MINGW64 when run from Ruby gem or JS npm package. @akiver, @Envek
- PR #177 Support non-default git hooks path. @charlie-wasp
- PR #182 Support git workspaces and submodules. @skryukov
- PR #184 Rewrite npm's scripts in JavaScript to support running on Windows without
sh
. @aminya
- PR Improve check for installed git @DmitryTsepelev
- PR Create .git/hooks directory when it does not exist @DmitryTsepelev
- PR Package versions for all architectures (x86_64, ARM64, x86) into Ruby gem and NPM package @Envek
- PR Fix golang 15+ build @skryukov
-
PR Feature multiple extends. Thanks @Evilweed
-
PR Fix
npx
when onlyyarn
exists. Thanks @dotterian -
PR Fix use '-h' for robust lefthook. Thanks @fahrinh
-
PR Fix
sh
dependency on windows when executinggit
. Thanks @lionskape -
PR Add possibility for using
yaml
andyml
extension for config. Thanks @rbUUbr
- PR Support relative roots for monorepos. Thanks @jsmestad
-
Commit Skip before executing command
-
PR Add option --keep-config. Thanks @justinasposiunas
-
Commit Check if shell is non interactive
- PR Use eval instead of exec; Enable tty for the shell. Thanks @ssnickolay
-
PR Add support for git-worktree. Thanks @f440
-
Commit Commands and Scripts now can catch Stdin
-
Commit Add partial support for monorepos and command execution not from project root
-
PR Fix return value from shell exit. Thanks @HaiD84
-
PR Support postinstall script for npm installation for monorepos. Thanks @sHooKDT
-
PR Now relative path to scripts supported. Thanks @AlexeyMatskevich
-
Commit Option
extends
for top level config added. Now you can merge some settings from different places:
extends: $HOME/work/lefthook-extend.yml
- Commit Add examples to generated lefthook.yml
- Commit Add
-a
meansaggressive
strategy forinstall
command
lefthook install -a # clear .git/hooks dir and reinstall lefthook hooks
-
Commit Add Lefthook version indicator for commands and script execution
-
Commit Remove
npx
as dependency from node wrapper
Now we will call directly binary from ./node_modules
- Commit Add
-f
meansforce
strategy forinstall
command
lefthook install -f # reinstall lefthook hooks without sync info check
- PR #27 Move LEFTHOOK env check in hooks files
Now if LEFTHOOK=0 we will not call the binary file
Add shortcut {push_files}
pre-commit:
commands:
rubocop:
run: rubocop {push_files}
It same as:
pre-commit:
commands:
rubocop:
files: git diff --name-only HEAD @{push} || git diff --name-only HEAD master
run: rubocop {push_files}
- Commit Add
min_version
option
You can mark your config for minimum Lefthook version:
min_version: 0.6.1
- PR #24 Wrap
run
command in shell context.
Now in run
option available sh
syntax.
pre-commit:
commands:
bashed:
run: rubocop -a && git add
Will be executed in this way:
sh -c "rubocop -a && git add"
- PR #23 Search Lefthook in Gemfile.
Now it's possible to use Lefthook from Gemfile.
# Gemfile
gem 'lefthook'