From 2e6ae88d44abccaf2d1a256d2842d5df8ec392e7 Mon Sep 17 00:00:00 2001 From: Luke Kysow Date: Sun, 10 Sep 2017 19:53:02 -0700 Subject: [PATCH] Add coverage script that supports multiple packages --- .gitignore | 1 + Makefile | 5 ++--- scripts/coverage.sh | 46 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100755 scripts/coverage.sh diff --git a/.gitignore b/.gitignore index 0c4bda95d..70eaccb99 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ atlantis.db output website/src/public .DS_Store +.cover diff --git a/Makefile b/Makefile index db53a2019..46479e256 100644 --- a/Makefile +++ b/Makefile @@ -28,8 +28,7 @@ test: ## Run tests, coverage reports, and clean (coverage taints the compiled co go test $(PKG) test-coverage: - go test $(PKG) -coverprofile=c.out - go tool cover -html=c.out -o coverage.html + ./scripts/coverage.sh dist: ## Package up everything in static/ using go-bindata-assetfs so it can be served by a single binary go-bindata-assetfs -pkg server static/... && mv bindata_assetfs.go server @@ -55,4 +54,4 @@ generate-website-html: ## Generate HTML for website upload-website-html: ## Upload generated website to s3 aws s3 rm s3://atlantis.run/ --recursive aws s3 sync website/html/ s3://atlantis.run/ - rm -rf website/html/ \ No newline at end of file + rm -rf website/html/ diff --git a/scripts/coverage.sh b/scripts/coverage.sh new file mode 100755 index 000000000..f3253f805 --- /dev/null +++ b/scripts/coverage.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# From https://github.com/mlafeldt/chef-runner/blob/v0.7.0/script/coverage +# Generate test coverage statistics for Go packages. +# +# Works around the fact that `go test -coverprofile` currently does not work +# with multiple packages, see https://code.google.com/p/go/issues/detail?id=6909 +# +# Usage: script/coverage [--html] +# +# --html Additionally create HTML report and open it in browser +# + +set -e + +workdir=.cover +profile="$workdir/cover.out" +mode=count + +generate_cover_data() { + rm -rf "$workdir" + mkdir "$workdir" + + pkgs=$(go list ./... | grep -v e2e | grep -v vendor | grep -v static) + for pkg in $pkgs; do + f="$workdir/$(echo $pkg | tr / -).cover" + go test -covermode="$mode" -coverprofile="$f" "$pkg" + done + + echo "mode: $mode" >"$profile" + grep -h -v "^mode:" "$workdir"/*.cover >>"$profile" +} + +show_cover_report() { + go tool cover -${1}="$profile" +} + +generate_cover_data $(go list ./...) +show_cover_report func +case "$1" in +"") + ;; +--html) + show_cover_report html ;; +*) + echo >&2 "error: invalid option: $1"; exit 1 ;; +esac