This commit causes TravisCI to run several tools on each pull request and commit to help ensure the code quality remains high. This includes gofmt, goimports, golint, go vet, the race detector, and coverage stats. Also, it instructs TravisCI to use nicer container-based builds.
38 lines
1.4 KiB
Bash
Executable file
38 lines
1.4 KiB
Bash
Executable file
#!/bin/bash
|
|
# The script does automatic checking on a Go package and its sub-packages, including:
|
|
# 1. gofmt (http://golang.org/cmd/gofmt/)
|
|
# 2. goimports (https://github.com/bradfitz/goimports)
|
|
# 3. golint (https://github.com/golang/lint)
|
|
# 4. go vet (http://golang.org/cmd/vet)
|
|
# 5. race detector (http://blog.golang.org/race-detector)
|
|
# 6. test coverage (http://blog.golang.org/cover)
|
|
|
|
set -e
|
|
|
|
# Automatic checks
|
|
test -z $(gofmt -l -w . | tee /dev/stderr)
|
|
test -z $(goimports -l -w . | tee /dev/stderr)
|
|
test -z $(golint ./... | grep -v "ALL_CAPS" | grep -v "OP_" | tee /dev/stderr)
|
|
go vet ./...
|
|
env GORACE="halt_on_error=1" go test -v -race ./...
|
|
|
|
# Run test coverage on each subdirectories and merge the coverage profile.
|
|
|
|
echo "mode: count" > profile.cov
|
|
|
|
# Standard go tooling behavior is to ignore dirs with leading underscores.
|
|
for dir in $(/bin/find . -maxdepth 10 -not -path '.' -not -path './.git*' \
|
|
-not -path '*/_*' -not -path './cmd*' -not -path './release*' -type d)
|
|
do
|
|
if ls $dir/*.go &> /dev/null; then
|
|
go test -covermode=count -coverprofile=$dir/profile.tmp $dir
|
|
if [ -f $dir/profile.tmp ]; then
|
|
cat $dir/profile.tmp | tail -n +2 >> profile.cov
|
|
rm $dir/profile.tmp
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# To submit the test coverage result to coveralls.io,
|
|
# use goveralls (https://github.com/mattn/goveralls)
|
|
# goveralls -coverprofile=profile.cov -service=travis-ci
|