typicode / husky

Git hooks made easy 🐶 woof!
https://typicode.github.io/husky
MIT License
31.75k stars 999 forks source link

Husky pre-commit fails with code 1 (error) #1014

Closed abhinavkgrd closed 2 years ago

abhinavkgrd commented 2 years ago

Committing from vs-code Source control returns this error but the command line works fine

vscode version - 1.58.2

Command output

husky - pre-commit hook exited with code 1 (error)

pre-commit

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

yarn lint-staged

package json

{
"scripts": {
    "lint-staged": "lint-staged",
    "postinstall": "husky install"
  },
"devDependencies":{
    "husky": "^7.0.0",
    "lint-staged": "^11.0.0",
}

 "lint-staged": {
    "src/**/*.{js,jsx,ts,tsx}": "eslint"
  },

"husky": {
    "hooks": {
      "pre-commit": "yarn run lint-staged"
    }
  }
}
zackseuberling commented 2 years ago

Similar issues with VS Code Version: 1.59.0

kapilrc commented 2 years ago

Having same issue with VS code version 1.60.2

aaronadamsCA commented 2 years ago

It looks like this is actually a lint-staged issue, specifically broken dependencies in version 11.2.4.

See if you can reproduce this:

If so, the problem should be fixed soon: https://github.com/okonet/lint-staged/issues/1032

In the meantime, pinning lint-staged to 11.1.4 should resolve the problem for now.

zerzavot commented 2 years ago

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command.

git commit -m "message" --no-verify

from: here

ooliver1 commented 2 years ago

same with vscode for me

> git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file - -S
C:\...\commitlint.config.js:1
��m

SyntaxError: Invalid or unexpected token
    at wrapSafe (internal/modules/cjs/loader.js:988:16)
    at Module._compile (internal/modules/cjs/loader.js:1036:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Module.require (internal/modules/cjs/loader.js:961:19)
    at module.exports (C:\Users\olive\node_modules\import-fresh\index.js:32:59)
    at loadJs (C:\Users\olive\node_modules\cosmiconfig\dist\loaders.js:16:18)
    at Explorer.loadFileContent (C:\Users\olive\node_modules\cosmiconfig\dist\Explorer.js:84:32)
    at Explorer.createCosmiconfigResult (C:\Users\olive\node_modules\cosmiconfig\dist\Explorer.js:89:36)
husky - commit-msg hook exited with code 1 (error)
// commitlint.config.js
module.exports = {
    extends: ["@commitlint/config-conventional"]
};
ooliver1 commented 2 years ago

randomly closed, it was the encoding was utf-16

maybe dont close without a comment

sally2015 commented 2 years ago

try to restart your vscode

zerzavot commented 2 years ago

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command.

git commit -m "message" --no-verify

from: here

or git config --unset core.hooksPath

TheExGenesis commented 2 years ago

yarn lint-staged and git commit work fine, the only occasion in which it doesn't work is when I commit from VS Code Source Control (VSC's GUI for git commands). After editing ./.huskyrc the output console reads

> git ls-files --stage -- /home/genesis/Documents/unigraph/unigraph-dev/.huskyrc
> git cat-file -s fdac8cc646628741017ad104f503ebc3507a6e29
> git show --textconv :.huskyrc
Unexpected identifier
chicken-suop commented 2 years ago

For me, this issue is not because of husky, but because of lint-staged. I resolved it by removing lint-staged. I use eslint --cache instead

annielmenezes commented 2 years ago

Hi people, a have a similar issue to run commands in pre-push hook. Via command-line it works without problems. I'm using nvm with a specific version to the project path.

My VS Code version is:

Version: 1.64.0 Commit: 5554b12acf27056905806867f251c859323ff7e9 Date: 2022-02-03T04:20:17.224Z Electron: 13.5.2 Chromium: 91.0.4472.164 Node.js: 14.16.0 V8: 9.1.269.39-electron.0 OS: Darwin x64 20.6.0

Output error: .husky/pre-push: line 4: npm: command not found

Inside file I have a npm command: npm run test:ci

bivainis commented 2 years ago

In my case "lint-staged" configuration was missing from package.json after a merge conflict was resolved. Added it back and no more issues.

prapurnakumariTR commented 2 years ago

git config --unset core.hooksPath

This worked for me

Liiva commented 2 years ago

In my case when trying to commit from my IDE it would give the non-descriptive error Unexpected identifier, while committing from command line worked fine.

It turned out my IDE used an earlier node version (6.14.4 vs 7.19.1 from my terminal), upping the version fixed this for me.

ooliver1 commented 2 years ago

it seems from this thread that husky can have a lot of issues that cause the same vague error, this might need to be addressed

XuXiaowen commented 2 years ago

git config --unset core.hooksPath

这对我有用

git config --unset core.hooksPath

This worked for me

Me too, greate~

magnus-bakke commented 1 year ago

git config --unset core.hooksPath

This worked for me

This just disables husky for me.

sh977218 commented 1 year ago

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command. git commit -m "message" --no-verify from: here

or git config --unset core.hooksPath

This does NOT resolve the issue, but a work around to ignore the issue.

sowiecki commented 1 year ago

I was able to resolve this error by running each precommit command individually. Turns out my test command (jest) was causing the error due to an obsolete snapshot.

Note that Jest seems to hide that this actually causes an error code 🤦 and instead makes it look like a warning, so if this is your problem you'll never actually see an error code directly from Jest. That's probably why this only appeared as an error through Husky for me, and I imagine there could be many other situations where an individual command is swallowing the error code to make it look like Husky's fault.

aghwotu commented 1 year ago

I was able to resolve this error by running each precommit command individually. Turns out my test command (jest) was causing the error due to an obsolete snapshot.

Note that Jest seems to hide that this actually causes an error code 🤦 and instead makes it look like a warning, so if this is your problem you'll never actually see an error code directly from Jest. That's probably why this only appeared as an error through Husky for me, and I imagine there could be many other situations where an individual command is swallowing the error code to make it look like Husky's fault.

This was my issue. Thank you for your comment.

jeyhunhasanov commented 1 year ago

I just renamed from commitlint.config.js to commitlint.config.cjs It worked without any error.

yyc13236 commented 1 year ago

Got the same error. My issue might be that hooks that should be run before committing or pushing have an error. eg., in my .husky/pre-commit it will run yarn lint before I commit. so after solving the error in yarn lint, mine commit works.

Tsekhmister commented 1 year ago

Maybe it will help someone, everything worked out for me after changing single quotes to double ones in package.json image

allygraham commented 1 year ago

I got the same error as well. Turns out I was running Node v10 when trying to commit, a quick swap over to v16 and all was good.

fmruiz commented 1 year ago

git config --unset core.hooksPath

This worked for me

You must to verify this because with this command you're disabling commit checks

god-of-js commented 1 year ago

I checked mine and saw that my lint-stages config


  "lint-staged": {
    "**/*.{js,jsx,ts,tsx}": [
      "npm run lint"
    ]
  }

was not directly in the root of the package.json

mushyoom commented 1 year ago

git config --unset core.hooksPath

This worked for me

Thanks, you saved my time.

Chynnie commented 1 year ago

I realized that the right way to fix this error is not by bypassing it else your GitHub commit checks will fail when merging your branch. The best way to fix this issue is by simply making your commits the way husky understands it. For example:

git commit -m "feat: my commit message"

This solution worked for me. I hope this helps.

andrii-lundiak commented 1 year ago

I hope you all know that by setting git config --unset core.hooksPath you basically DISABLE Husky at all from codebase. So it's NOT a fix for Husky, it's a break of Husky (and giving control of hooks back to regular Git setup ./git/hooks folder).

UPD. What actually helped me, is a silly reason - VS Code required actual restart, and OF ALL instances!!! I use multiple workspaces, so one VS Code instance restart was NOT enough. Ideally Restart PC for 200% proof.

PS. Look my last 2 comments with details troubleshooting notes here: https://github.com/okonet/lint-staged/issues/420

mort3za commented 1 year ago

VS Code required actual restart, and OF ALL instances!!!

This fixed my issue. Just opened a new terminal in iTerm2

ramBlanco commented 1 year ago

this worked for me:

create a file named ".lintstagedrc" with this inside

{
  "*.{ts,tsx}": ["eslint --fix", "prettier --write"]
}

my current version of lint-staged is: 13.2.0

latanoel commented 1 year ago

This worked for me:

First I ran npx commitlint and I got a prompt to update commitlint. Apparently, it seemed that commitlint needed an update

Need to install the following packages:
  commitlint@17.6.1
Ok to proceed? (y) y

And voila! Subsequent commits were successful

bravo-stack commented 12 months ago

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command. git commit -m "message" --no-verify from: here

or git config --unset core.hooksPath

The git config --unset core.hooksPath worked for me.

agustingorgni commented 11 months ago

Just create a file called .lintstagedrc and put this:

{
  "*.{js,jsx}": ["npm run lint:js"]
}
SiegeSailor commented 11 months ago

Your package.json must be an actual JSON rather than just JavaScript Object. I change the following from:

  "lint-staged": {
    "**/*": ["prettier --write --ignore-unknown"],
    "**/*.{ts,tsx}": ["jest --bail"]
  },

to

  "lint-staged": {
    "**/*": "prettier --write --ignore-unknown",
    "**/*.{ts,tsx}": "jest --bail"
  },

And the issue was fixed.

kojikojiXX commented 11 months ago

That error happened me, too. I add following line to my package.json, then that error was fixed.

"lint-staged": { "src/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [ "prettier --write" ] }

DeadLoss1801 commented 10 months ago

{ "test" : "mocha" }

aldoprogrammer commented 10 months ago

git config --unset core.hooksPath git config --get core.hooksPath git commit -m "type your comment here" --no-verify git push origin yourbranch

these 4 lines of code are saving me

jcubic commented 9 months ago

I have the same error without any output:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

FILES=`git diff --name-only --cached --diff-filter=d | grep -E '(ts|tsx)$'`;

if [ ! -z "$FILES" ]; then
  for file in $FILES; do
      npx prettier --write $file;
      npx eslint --fix $file;
  done
  git add $FILES
else
  true
fi

Is there any way to force Husky to show what is the error? My script works fine If I comment out . "$(dirname -- "$0")/_/husky.sh" and return true.

I've also tried this:

FILES=`git diff --name-only --cached --diff-filter=d | grep -E '(ts|tsx)$'`;

for file in $FILES; do
    npx prettier --write $file;
    npx eslint --fix $file;
done
test ! -z "$FILES" && git add $FILES || true

and Husky keep showing an error.

jcubic commented 9 months ago

So the problem was if the FILES is empty grep will return non-zero code and the whole hook will fail and the rest will not be executed.

I've solved the issue with this code:

FILES=`git diff --name-only --cached --diff-filter=d | grep -E '(ts|tsx)$' || true`;

if [ ! -z "$FILES" ]; then
  for file in $FILES; do
      npx prettier --write $file;
      npx eslint --fix $file;
  done
  git add $FILES
fi
superbland commented 9 months ago

I was having this problem and the output was complaining about "Unexpected token '??='". I'm using nvm, and this seems to be related to which version of node is loaded by default in the terminal (in this case, one which didn't understand this operator), regardless of my config switching node version based on the presence of a .nvmrc file.

In my case when I checked I had version 14 pinned in my path.

I was able to work around this by:

  1. Setting nvm alias default <desired default, e.g. lts/hydrogen>
  2. Removing version 14 from my path, and adding <.nvm_path>/alias/default instead
fnavarrodev commented 9 months ago

In my case husky was always getting node 14. Changing nvm default version didn't work or changing the PATH variable because the version was pinned in my .huskyrc file. I recommend you all checking that evil file.

mjaynixxz commented 8 months ago

In my case I keep getting this error, I really dunno where the issue is coming from, there is not a clear message to indicate the problem, husky is installed properly, if I am to comment out the script related to npm or npx, it just works fine. But the npm n npx commands keeps getting canceled

image

jcubic commented 8 months ago

@mjaynixxz this is something different because you have an error from npm, not only the error code. Did you look into the log file?

usermilena commented 7 months ago

if deleting node modules and running lint in your project can't help try to restart your computer

Haseeb78692 commented 6 months ago

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command. git commit -m "message" --no-verify from: here

or git config --unset core.hooksPath

WORKED 😀

NakZMichael commented 5 months ago

I updated my VSCode version.This fixed my issue. Maybe restarting all VSCode window is the solution for this issue.

amanr-dev commented 5 months ago

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command.

git commit -m "message" --no-verify

from: here

It Worked for me 👍

OahMada commented 4 months ago

In my case, everything works if I commit from VSCode's integrated terminal, but it's not the case in SourceTree.

ktsangop commented 4 months ago

I was having this problem and the output was complaining about "Unexpected token '??='". I'm using nvm, and this seems to be related to which version of node is loaded by default in the terminal (in this case, one which didn't understand this operator), regardless of my config switching node version based on the presence of a .nvmrc file.

In my case when I checked I had version 14 pinned in my path.

I was able to work around this by:

  1. Setting nvm alias default <desired default, e.g. lts/hydrogen>
  2. Removing version 14 from my path, and adding <.nvm_path>/alias/default instead

Thanks for this

Just adding that I had nvm installed inside git bash (for Windows), and I wasn't able to find the path to the nvm installed nodejs instances. So I removed my system's default nodejs installation (which was an older one), and installed a more recent one. That way, husky was able to point to a compatible nodejs version, and my CLI (git bash) kept pointing to the nvm defined "default" version.