cz-cli
cz-cli copied to clipboard
Run pre-commit hook before the prompt
I use pre-commit hooks to format my code and check with npm audit
for insecure modules. There are times I run through the whole commit prompt only to have my pre-commit hook(s) fail and have to redo my commit message.
I think it would be great if the cli ran pre-commit hooks before the prompt much like it checks that some files have been added to staging.
I'm happy to work on a PR, just curious what the community thinks.
Yes please, I've run into that a ton of times as well 😁
Then, I'll take a crack tonight.
After taking a look at this I found the --retry
command in #132 .
While this is almost what I want, if I use --retry
on properly formatted code after failing a commit the improperly formatted code gets committed, it does not get updated. While this may be a feature not a bug, I'd vastly prefer the ability to fix formatting and then commit.
@dkimot @LinusU I still think we should not allow the cli to run if pre-commit hook fails. what do you guys think ?
Personally agree, would like to know what @jimthedev thinks though ☺️
Definitely an issue... if pre-commit
hooks fail there's no point in filling out a commit-message.
Yes, I agreed and this's been an issue for my team as well.
One naive solution I can think of is that
- Manually run a git pre-commit hook, without attempting a commit,
bash .git/hooks/pre-commit
before running prompter for getting user input, - And pass
--no-verify
options todispatchGitCommit
so that thepre-commit
hook will be ignored.
https://github.com/commitizen/cz-cli/blob/master/src/commitizen/commit.js#L47-L62
At this point I think it's pretty clear there is community support and I don't think --retry
is solving the problem correctly. I'll start on something tonight. I was waiting to see what @jimthedev thinks, as @LinusU suggested, but it seems like they're busy.
if I use
--retry
on properly formatted code after failing a commit the improperly formatted code gets committed, it does not get updated
@dkimot what do you mean? After fixing the formatting do you mean that the changes should get automatically staged?
I'd recommend not doing that, you don't want any magic concerning what is staged and what isn't:
- If a
prettier:check
is failing, then the user should fix formatting, manually stage the commit and then retry - by accident if some patch gets staged that wasn't intended for that commit then it causes confusion
I've managed to resolve this issue somehow, a bit hacky IMO, but it seems to be working fine.
I got rid of husky's pre-commit hook and moved script it was executing to the npm scripts section.
"scripts": {
"pre-commit": "yarn lint:ignore-tests && yarn test && lint-staged && git add --all",
"cmz": "npm run pre-commit && git-cz"
},
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"config": {
"commitizen": {
"path": "git-cz"
}
}
After git-cz
have finished with writing commit message, I'm running commitlint here to see if the commit-msg was okay.
But, I still seem to have an issue when running git commit instead of yarn run cmz
the commitlint will run and throw error if developer try to commit with non-semantic commit message, but if he git commit with semantic one the pre-commit script won't run :(
We shouldn't allow the the cli to run if pre-commit hook fails and also if files are not added. Did everyone agree on this ? Is anyone working on this ? Or Can I take this up ?
@dkimot @LinusU can I take this up ?
Take it up! Take it up! 😬
@ad1992 && @brandondurham - Any updates on your fixes so that the pre-commit hook will run before git cz
starts walking the user through the commit questions?
Any updates here? My team just started using commitizen and love it, but having specs or linting run first would be great
Any updates here ? I'm using git cz and have the same question - how to crash cli if pre-commit hook was failed.
I use a similar approach as what @Puritanic mentioned above, and it doesn't need changes to the cli
- Remove husky's
pre-commit
hook - Move the scripts it was executing to a git alias
git config --global alias.c '!f() { npm run lint && npm test && git cz; }; f'
- Now, whenever I want to commit, I simply have to run
or I can bypassgit c
pre-commit
's scripts with the regulargit cz
I feel this is much simpler as I do not have to remember that I have to run an npm script just to do a git commit, but it would be good if the cli takes care of running the pre-commit
hook before showing the questions.
Any update on this? It's been almost 2 years
I got rid of husky's pre-commit hook and moved script it was executing to the npm scripts section. https://github.com/commitizen/cz-cli/issues/604#issuecomment-485826445
@Puritanic You can keep husky by adding --no-verify
to git-cz
. This allows the precommit hook to still run on normal git commit
usage. Unfortunately it disables the commit-msg
hook too.
Would it not work to temporarily set the git EDITOR
variable to something that does cz
|
"original" EDITOR
? Unless that is how cz
already works...
Have we got any updates on this? It's been 4 years already. Just started to use commitizen and having this issue fixed would be great.