Goのプロジェクトでpre-commit設定をチーム共有する
Goのプロジェクトでpre-commit設定をチーム共有するためにしたことのメモ。
biosugar0
When team members wrote Golang code, they would commit corrupted formatting or with code mixed in that was deemed undesirable by static analysis.
So we should use a script to apply go vet
which is static analysis and goimports
(go fmt) in git pre-commit hook.
Edit .git/hooks/pre-commit
in your Golang project as following:
#!/bin/sh
gopackages=$(git diff --cached --name-only --diff-filter=ACM | grep '.go$'| xargs -n1 dirname| sort -u| sed 's/^/.\//' )
[ -z "$gopackages" ] && exit 0
echo "Info: git diff (go packages)"
echo $gopackages
echo "Info: Runnning go vet"
linterr="$(go vet $gopackages 2>&1 )"
if [ -n "$linterr" ] ; then
echo "fatal:"
echo $linterr
exit 1
fi
echo "Info: go vet -> OK"
unformatted=$(goimports -l $gopackages 2>&1 )
if [ -n "$unformatted" ] ; then
echo "Info: unformatted file: $unformatted"
echo "Info: Running goimports"
for fn in $unformatted; do
goimports -w $fn
echo >&2 "goimports -w $fn"
git add $fn
done
fi
echo "Info: goinports -> OK"
exit 0
After you completed to edit, grant execute permission to .git/hooks/pre-commit
.
chmod +x .git/hooks/pre-commit