Merge pull request #110 from appleboy/jenkins

Support coverage report.
This commit is contained in:
Bo-Yi Wu 2016-07-21 08:52:28 +08:00 committed by GitHub
commit 46ab3763a9
8 changed files with 159 additions and 44 deletions

6
.gitignore vendored
View File

@ -28,14 +28,10 @@ key.pem
config.yml config.yml
bin/* bin/*
.DS_Store .DS_Store
coverage.txt
coverage.xml
report.xml
gorush/log/*.log gorush/log/*.log
build.tar.gz build.tar.gz
gorush.tar.gz gorush.tar.gz
gorush.db gorush.db
vendor vendor
lint.txt
vet.txt
Dockerfile.tmp Dockerfile.tmp
.cover

View File

@ -31,7 +31,7 @@ install:
script: script:
- make coverage - make coverage
- $(go env GOPATH | awk 'BEGIN{FS=":"} {print $1}')/bin/goveralls -coverprofile=coverage.txt - $(go env GOPATH | awk 'BEGIN{FS=":"} {print $1}')/bin/goveralls -coverprofile=.cover/coverage.txt
-service=travis-ci -repotoken=$COVERALLS_TOKEN -service=travis-ci -repotoken=$COVERALLS_TOKEN
after_success: after_success:
@ -41,4 +41,4 @@ after_success:
&& test "$TRAVIS_PULL_REQUEST" == "false" && cd $TRAVIS_BUILD_DIR && make docker_build && test "$TRAVIS_PULL_REQUEST" == "false" && cd $TRAVIS_BUILD_DIR && make docker_build
- test "$TRAVIS_BRANCH" == "master" && test "$TRAVIS_GO_VERSION" == "1.6.2" - test "$TRAVIS_BRANCH" == "master" && test "$TRAVIS_GO_VERSION" == "1.6.2"
&& test "$TRAVIS_PULL_REQUEST" == "false" && cd $TRAVIS_BUILD_DIR && make deploy tag=latest && test "$TRAVIS_PULL_REQUEST" == "false" && cd $TRAVIS_BUILD_DIR && make deploy tag=latest
- bash <(curl -s https://codecov.io/bash) - bash <(curl -s https://codecov.io/bash) -f .cover/coverage.txt

View File

@ -25,25 +25,25 @@ build: clean
sh script/build.sh $(VERSION) sh script/build.sh $(VERSION)
coverage: coverage:
sh go.test.sh atomic sh ./script/coverage.sh testing atomic
test: redis_test boltdb_test memory_test config_test test: redis_test boltdb_test memory_test config_test
go test -v -cover -covermode=count -coverprofile=coverage.txt ./gorush/... go test -v -cover ./gorush/...
redis_test: init redis_test: init
go test -v -cover -covermode=count -coverprofile=coverage.txt ./storage/redis/... go test -v -cover ./storage/redis/...
boltdb_test: init boltdb_test: init
go test -v -cover -covermode=count -coverprofile=coverage.txt ./storage/boltdb/... go test -v -cover ./storage/boltdb/...
memory_test: init memory_test: init
go test -v -cover -covermode=count -coverprofile=coverage.txt ./storage/memory/... go test -v -cover ./storage/memory/...
config_test: init config_test: init
go test -v -cover -covermode=count -coverprofile=coverage.txt ./config/... go test -v -cover ./config/...
html: html:
go tool cover -html=coverage.txt go tool cover -html=.cover/coverage.txt
docker_build: clean docker_build: clean
tar -zcvf build.tar.gz gorush.go gorush config storage Makefile glide.lock glide.yaml tar -zcvf build.tar.gz gorush.go gorush config storage Makefile glide.lock glide.yaml
@ -68,6 +68,10 @@ endif
install: install:
@which glide || (curl https://glide.sh/get | sh) @which glide || (curl https://glide.sh/get | sh)
@which go-junit-report || go get -u github.com/jstemmer/go-junit-report
@which gocov || go get -u github.com/axw/gocov/gocov
@which gocov-xml || go get -u github.com/AlekSi/gocov-xml
@which golint || go get -u github.com/golang/lint/golint
@glide install @glide install
update: update:
@ -77,7 +81,32 @@ fmt:
@echo $(TARGETS_NOVENDOR) | xargs go fmt @echo $(TARGETS_NOVENDOR) | xargs go fmt
lint: lint:
@golint -set_exit_status=1 gorush/ @golint -set_exit_status=1 ./...
vet:
@go vet -n -x ./...
junit_report:
sh ./script/coverage.sh junit
coverage_report:
sh ./script/coverage.sh coverage
lint_report:
sh ./script/coverage.sh lint
vet_report:
sh ./script/coverage.sh vet
cloc_report:
sh ./script/coverage.sh cloc
report: junit_report coverage_report lint_report vet_report cloc_report
clean: clean:
-rm -rf build.tar.gz gorush.tar.gz bin/* coverage.txt gorush.tar.gz gorush/gorush.db storage/boltdb/gorush.db -rm -rf build.tar.gz \
gorush.tar.gz bin/* \
gorush.tar.gz \
gorush/gorush.db \
storage/boltdb/gorush.db \
.cover

View File

@ -3,7 +3,7 @@ FROM golang:1.6.2-alpine
MAINTAINER Bo-Yi Wu <appleboy.tw@gmail.com> MAINTAINER Bo-Yi Wu <appleboy.tw@gmail.com>
RUN apk update \ RUN apk update \
&& apk add git make curl && rm -rf /var/cache/apk/* && apk add git make curl perl && rm -rf /var/cache/apk/*
# install glide package management. # install glide package management.
RUN curl https://glide.sh/get | sh RUN curl https://glide.sh/get | sh

View File

@ -9,4 +9,6 @@ sed -i"" -e "s/localhost/redis/g" config/config.go
sed -i"" -e "s/localhost/redis/g" config/config_test.go sed -i"" -e "s/localhost/redis/g" config/config_test.go
sed -i"" -e "s/localhost/redis/g" gorush/status_test.go sed -i"" -e "s/localhost/redis/g" gorush/status_test.go
sed -i"" -e "s/localhost/redis/g" storage/redis/redis_test.go sed -i"" -e "s/localhost/redis/g" storage/redis/redis_test.go
make install && make test make install
make coverage
make report

View File

@ -1,26 +0,0 @@
#!/usr/bin/env bash
set -e
output() {
printf "\033[32m"
echo $1
printf "\033[0m"
exit 1
}
coverage_mode=$1
test -z $coverage_mode && output "Usage: $0 coverage_mode"
test -z $(which glide) && output "glide command not found"
test -f coverage.txt && rm -rf coverage.txt
echo "mode: ${coverage_mode}" > coverage.txt
for d in $(go list ./... | grep -v vendor); do
go test -v -cover -coverprofile=profile.out -covermode=${coverage_mode} $d
if [ -f profile.out ]; then
sed '1d' profile.out >> coverage.txt
rm profile.out
fi
done

View File

@ -24,6 +24,7 @@ func PrintGoRushVersion() {
version, version,
runtime.Compiler, runtime.Compiler,
runtime.Version()) runtime.Version())
fmt.Println()
} }
// VersionMiddleware : add version on header. // VersionMiddleware : add version on header.

113
script/coverage.sh Executable file
View File

@ -0,0 +1,113 @@
#!/bin/sh
#
# Generate test coverage statistics for Go packages.
#
set -e
output() {
printf "\033[32m"
echo $1
printf "\033[0m"
if [ "$2" = 1 ]; then
exit 1
fi
}
workdir=".cover"
coverage_report="$workdir/coverage.txt"
coverage_xml_report="$workdir/coverage.xml"
junit_report="$workdir/junit.txt"
junit_xml_report="$workdir/report.xml"
lint_report="$workdir/lint.txt"
vet_report="$workdir/vet.txt"
cloc_report="$workdir/cloc.xml"
packages=$(go list ./... | grep -v vendor)
test -d $workdir || mkdir -p $workdir
show_help() {
cat << EOF
Generate test coverage statistics for Go packages.
testing [set|count|atomic] Run go testing for all packages
coverage Generate coverage report for all packages
junit Generate coverage xml report for junit plugin
lint Generate Lint report for all packages
vet Generate Vet report for all packages
cloc Generate Count Lines of Code report for all files
EOF
}
testing() {
test -f ${junit_report} && rm -f ${junit_report}
coverage_mode=$@
output "Running ${coverage_mode} mode for coverage."
for pkg in $packages; do
f="$workdir/$(echo $pkg | tr / -).cover"
output "Testing coverage report for ${pkg}"
go test -v -cover -coverprofile=${f} -covermode=${coverage_mode} $pkg | tee -a ${junit_report}
done
output "Convert all packages coverage report to $coverage_report"
echo "mode: $coverage_mode" > "$coverage_report"
grep -h -v "^mode:" "$workdir"/*.cover >> "$coverage_report"
}
generate_cover_report() {
gocov convert ${coverage_report} | gocov-xml > ${coverage_xml_report}
}
generate_junit_report() {
cat $junit_report | go-junit-report > ${junit_xml_report}
}
generate_lint_report() {
for pkg in $packages; do
output "Go Lint report for ${pkg}"
golint ${pkg} | tee -a ${lint_report}
done
}
generate_vet_report() {
for pkg in $packages; do
output "Go Vet report for ${pkg}"
go vet -n -x ${pkg} | tee -a ${vet_report}
done
}
generate_cloc_report() {
case "$OSTYPE" in
darwin*)
which cloc || brew install cloc ;;
linux*)
which cloc || apt-get install cloc ;;
*)
curl https://raw.githubusercontent.com/AlDanial/cloc/master/cloc -o /usr/bin/cloc
chmod 755 /usr/bin/cloc
esac
cloc --by-file --xml --out=${cloc_report} --exclude-dir=vendor,Godeps,.cover .
}
case "$1" in
"")
show_help ;;
testing)
mode="set"
test -z $2 || mode=$2
testing $mode ;;
coverage)
generate_cover_report ;;
junit)
generate_junit_report ;;
lint)
generate_lint_report ;;
vet)
generate_vet_report ;;
cloc)
generate_cloc_report ;;
*)
show_help ;;
esac