124 lines
3.1 KiB
Bash
Executable File
124 lines
3.1 KiB
Bash
Executable File
#!/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
|