From 642e3c741af3aa2b7a542e3a7c3b9d9f14e0cbb9 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Fri, 30 Jan 2015 22:08:53 -0600 Subject: [PATCH] Update TravisCI to goclean script. 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. --- .travis.yml | 15 ++++++++++++++- goclean.sh | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100755 goclean.sh diff --git a/.travis.yml b/.travis.yml index a189282b..4b44a0b1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,17 @@ language: go go: + - go1.3 - release - - tip +sudo: false +before_install: + - gotools=golang.org/x/tools + - if [ "$TRAVIS_GO_VERSION" = "release" ] || [ "$TRAVIS_GO_VERSION" = "go1.3.3" ]; then gotools=code.google.com/p/go.tools; fi +install: + - go get -d -t -v ./... + - go get -v $gotools/cmd/cover + - go get -v $gotools/cmd/vet + - go get -v github.com/bradfitz/goimports + - go get -v github.com/golang/lint/golint +script: + - export PATH=$PATH:$HOME/gopath/bin + - ./goclean.sh diff --git a/goclean.sh b/goclean.sh new file mode 100755 index 00000000..fe2796bd --- /dev/null +++ b/goclean.sh @@ -0,0 +1,38 @@ +#!/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