add docker testing.

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
Bo-Yi Wu 2016-07-30 20:55:29 +08:00
parent 410a454676
commit 30d2fd69b1
5 changed files with 16 additions and 163 deletions

View File

@ -7,6 +7,7 @@ PRODUCTION_IMAGE := "gorush"
DEPLOY_ACCOUNT := "appleboy" DEPLOY_ACCOUNT := "appleboy"
VERSION := $(shell git describe --tags) VERSION := $(shell git describe --tags)
TARGETS_NOVENDOR := $(shell glide novendor) TARGETS_NOVENDOR := $(shell glide novendor)
export PROJECT_PATH = /go/src/github.com/appleboy/gorush
all: build all: build
@ -51,8 +52,8 @@ docker_build: clean
docker build --rm -t $(BUILD_IMAGE) -f docker/Dockerfile.tmp . docker build --rm -t $(BUILD_IMAGE) -f docker/Dockerfile.tmp .
docker run --rm $(BUILD_IMAGE) > gorush.tar.gz docker run --rm $(BUILD_IMAGE) > gorush.tar.gz
docker_test: init docker_test: init clean
docker-compose -p ${PRODUCTION_IMAGE} -f docker/docker-compose.testing.yml run --rm gorush docker-compose -p ${PRODUCTION_IMAGE} -f docker/docker-compose.testing.yml run gorush
docker-compose -p ${PRODUCTION_IMAGE} -f docker/docker-compose.testing.yml down docker-compose -p ${PRODUCTION_IMAGE} -f docker/docker-compose.testing.yml down
docker_production: docker_build docker_production: docker_build
@ -66,36 +67,15 @@ endif
docker tag $(PRODUCTION_IMAGE):latest $(DEPLOY_ACCOUNT)/$(PRODUCTION_IMAGE):$(tag) docker tag $(PRODUCTION_IMAGE):latest $(DEPLOY_ACCOUNT)/$(PRODUCTION_IMAGE):$(tag)
docker push $(DEPLOY_ACCOUNT)/$(PRODUCTION_IMAGE):$(tag) docker push $(DEPLOY_ACCOUNT)/$(PRODUCTION_IMAGE):$(tag)
install: tool install:
@which glide || (curl https://glide.sh/get | sh) glide install
@glide install
update: update:
@glide up glide update
fmt: fmt:
@echo $(TARGETS_NOVENDOR) | xargs go fmt @echo $(TARGETS_NOVENDOR) | xargs go fmt
tool:
sh ./script/coverage.sh tool
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 \ -rm -rf build.tar.gz \
gorush.tar.gz bin/* \ gorush.tar.gz bin/* \

View File

@ -2,7 +2,10 @@ version: "2"
services: services:
gorush: gorush:
build: ./golang build:
context: ./golang
args:
PROJECT_PATH: $PROJECT_PATH
links: links:
- redis - redis
privileged: true privileged: true
@ -10,7 +13,7 @@ services:
- ANDROID_API_KEY - ANDROID_API_KEY
- ANDROID_TEST_TOKEN - ANDROID_TEST_TOKEN
volumes: volumes:
- ../:/app - ../:$PROJECT_PATH
command: /bin/sh -c './docker/testing.sh' command: /bin/sh -c './docker/testing.sh'
redis: redis:

View File

@ -1,14 +1,9 @@
FROM golang:1.6.3-alpine FROM appleboy/golang-testing
MAINTAINER Bo-Yi Wu <appleboy.tw@gmail.com> MAINTAINER Bo-Yi Wu <appleboy.tw@gmail.com>
RUN apk update \ ARG PROJECT_PATH
&& apk add git make curl perl && rm -rf /var/cache/apk/*
# install glide package management. ENV PROJECT_PATH=$PROJECT_PATH
RUN curl https://glide.sh/get | sh
RUN mkdir /app && mkdir -p $GOPATH/src/github.com/appleboy WORKDIR $PROJECT_PATH
RUN ln -sf /app $GOPATH/src/github.com/appleboy/gorush
WORKDIR $GOPATH/src/github.com/appleboy/gorush

View File

@ -9,6 +9,4 @@ 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 install && coverage all
make coverage
make report

View File

@ -1,123 +0,0 @@
#!/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.
tool Install go dependency tools like gocov or golint.
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
}
install_dependency_tool() {
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
}
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 ;;
tool)
install_dependency_tool ;;
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