diff --git a/.travis.yml b/.travis.yml index b065ae21..583b2847 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ go: - 1.6 - tip sudo: false +before_install: 'git fetch --unshallow' install: 'make deps' script: 'make test' matrix: diff --git a/misc/make-deps.sh b/misc/make-deps.sh index f3f4d0f2..35ab62d9 100755 --- a/misc/make-deps.sh +++ b/misc/make-deps.sh @@ -41,3 +41,4 @@ go get ./... # get all the go dependencies [ -e "$GOBIN/mgmt" ] && rm -f "$GOBIN/mgmt" # the `go get` version has no -X go get golang.org/x/tools/cmd/vet # add in `go vet` for travis go get golang.org/x/tools/cmd/stringer # for automatic stringer-ing +go get github.com/golang/lint/golint # for `golint`-ing diff --git a/test.sh b/test.sh index 0bc162ca..fb1904f7 100755 --- a/test.sh +++ b/test.sh @@ -31,3 +31,4 @@ fi if env | grep -q -e '^JENKINS_URL=' -e '^BUILD_TAG=jenkins'; then ./test/test-omv.sh fi +./test/test-golint.sh # test last, because this test is somewhat arbitrary diff --git a/test/test-golint.sh b/test/test-golint.sh new file mode 100755 index 00000000..0fdb03c9 --- /dev/null +++ b/test/test-golint.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# check that go lint passes or doesn't get worse by some threshold +echo running test-golint.sh +# FIXME: test a range of commits, since only the last patch is checked here +PREVIOUS='HEAD^' +CURRENT='HEAD' +THRESHOLD=15 # percent problems per new LOC +XPWD=`pwd` +ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" # dir! +cd "${ROOT}" >/dev/null + +LINT=`golint` # current golint output +COUNT=`echo -e "$LINT" | wc -l` # number of golint problems in current branch + +T=`mktemp --tmpdir -d tmp.XXX` +[ "$T" = "" ] && exit 1 +cd $T || exit 1 +git clone --recursive "${ROOT}" 2>/dev/null # make a copy +cd "`basename ${ROOT}`" >/dev/null || exit 1 + +DIFF1=0 +NUMSTAT1=`git diff "$PREVIOUS" "$CURRENT" --numstat` # numstat diff since previous commit +while read -r line; do + add=`echo "$line" | cut -f1` + # TODO: should we only count added lines, or count the difference? + sum="$add" + #del=`echo "$line" | cut -f2` + #sum=`expr $add - $del` + DIFF1=`expr $DIFF1 + $sum` +done <<< "$NUMSTAT1" # three < is the secret to putting a variable into read + +git checkout "$PREVIOUS" 2>/dev/null # previous commit +LINT1=`golint` +COUNT1=`echo -e "$LINT1" | wc -l` # number of golint problems in older branch + +# clean up +cd "$XPWD" >/dev/null +rm -rf "$T" + +[ "$LINT1" = "" ] && echo PASS && exit # everything is "perfect" +DELTA=$(printf "%.0f\n" `echo "(($COUNT1 - $COUNT) / $DIFF1) * 100" | bc -l`) + +echo "Lines of code: $DIFF1" +echo "Prev. # of issues: $COUNT" +echo "Curr. # of issues: $COUNT1" +echo "Issue count delta is: $DELTA %" +if [ "$DELTA" -gt "$THRESHOLD" ]; then + echo "Maximum threshold is: $THRESHOLD %" + echo '`golint` FAIL' + exit 1 +fi +echo PASS