You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.2 KiB
1.2 KiB
title | date | tags | ||
---|---|---|---|---|
Git Tips - Lint + Test Pre-commit Hook | 2020-01-01T21:00:39Z |
|
One of my favorite inventions is a pre-commit
hook that auto runs test and lint commands from a makefile
or
package.json
if they're found:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env bash
if [ -f "$PWD/makefile" ] && [ ! -z "$(cat $PWD/makefile | grep '^lint:')" ]; then
echo "running make lint"
make lint
elif [ -f "$PWD/package.json" ] && [ ! -z "$(cat $PWD/package.json | grep "^\"lint\":")" ]; then
echo "running npm run lint"
npm run lint
fi
if [ -f "$PWD/makefile" ] && [ ! -z "$(cat $PWD/makefile | grep '^test:')" ]; then
echo "running make test"
make test
elif [ -f "$PWD/package.json" ] && [ ! -z "$(cat $PWD/package.json | grep "^\"test\":")" ]; then
echo "running npm run test"
npm run test
fi
The /usr/bin/env bash
piece ensures that the script has access to all of the environment variables you expect in your
regular shell.
If the test or lint command fails then the git commit
command fails. If I absolutely need to commit something in spite
of the lint/test results I can do git commit --no-verify
to skip the pre-commit
hook.