Automatically lint and format code before commits

The discourse repository includes configuration for lefthook. This will automatically check any code before it’s committed to git, and alert about any issues. To get set up, simply enter your discourse development directory and run

pnpm install
pnpm run lefthook install

Files will now be automatically checked before committing. If there are any issues, the commit will be cancelled, and you will be shown a list of errors.


This document is version controlled - suggest changes on github.

11 Likes

This was very cool when it was working.

Currently getting a version of this error with current main in WSL2

It’s broken my ability to commit:

robert@blah:~/discourse$ git commit -m "fix test setup"
/home/robert/discourse/node_modules/lefthook-linux-x64/bin/lefthook: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/robert/discourse/node_modules/lefthook-linux-x64/bin/lefthook)
/home/robert/discourse/node_modules/lefthook-linux-x64/bin/lefthook: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /home/robert/discourse/node_modules/lefthook-linux-x64/bin/lefthook)

Any ideas?

Looks like there was a dependabot update to lefthook only 8 hours ago.

Might have to hack my package.json back a notch?

OK I got it working again by moving lefthook back to 1.6.9 (!) and yarn-ing

Any suggestions on a better approach much appreciated, because now I am out of sync with core!

Looks like Version 1.7.6 fails installation on CI Β· Issue #783 Β· evilmartians/lefthook Β· GitHub

Let’s revert the update while they figure things out

1 Like

David, I’m doing a local upgrade to Jammy (Dodger) … I’ll see if that helps.

1 Like

This is key … the latest version on the earlier Ubuntu I had was GLIBC_2.31 I believe.

Updating the package libc6 maxed out the version to this, so it seems like a major release upgrade is necessary.

I’ll revert shortly when my 16 cores have chewed through that.

1 Like

According to their github issue, the dependency on shared libs is not intentional. Even if you can get it working, other people will likely have problems. So here we go:

Revert "Build(deps-dev): Bump lefthook from 1.7.5 to 1.7.7 (#28068)" … Β· discourse/discourse@1b7a583 Β· GitHub :fire:

1 Like

ok this fixes it (with 1.7.7!):

robert@blah:~/discourse$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy

(@JammyDodger )

:rocket:

robert@blah:~/discourse$ yarn list --pattern lefthook
yarn list v1.22.19
warning Resolution field "unset-value@2.0.1" is incompatible with requested version "unset-value@^1.0.0"
β”œβ”€ lefthook-darwin-arm64@1.7.7
β”œβ”€ lefthook-darwin-x64@1.7.7
β”œβ”€ lefthook-freebsd-arm64@1.7.7
β”œβ”€ lefthook-freebsd-x64@1.7.7
β”œβ”€ lefthook-linux-arm64@1.7.7
β”œβ”€ lefthook-linux-x64@1.7.7
β”œβ”€ lefthook-windows-arm64@1.7.7
β”œβ”€ lefthook-windows-x64@1.7.7
└─ lefthook@1.7.7
Done in 0.53s
robert@blah:~/discourse$ git status
On branch test_branch
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   mytestfile

robert@blah:~/discourse$ git commit -m "test file addition"
β”‚  ember-template-lint (skip) no files for inspection
β”‚  yaml-syntax (skip) no files for inspection
β”‚  i18n-lint (skip) no files for inspection
β”‚  rubocop (skip) no files for inspection
β”‚  eslint (skip) no files for inspection
β”‚  prettier (skip) no files for inspection
β”‚  prettier-scss (skip) no files for inspection
β”‚  syntax_tree (skip) no files for inspection

  ────────────────────────────────────
summary: (done in 0.06 seconds)
[test_branch 1cd0bb3839] test file addition
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 mytestfile
2 Likes