#!/usr/bin/env bash set -e workdir=.cover profile="$workdir/cover.out" mode=set end2endtest="google.golang.org/grpc/test" generate_cover_data() { rm -rf "$workdir" mkdir "$workdir" for pkg in "$@"; do if [ $pkg == "google.golang.org/grpc" -o $pkg == "google.golang.org/grpc/transport" -o $pkg == "google.golang.org/grpc/metadata" -o $pkg == "google.golang.org/grpc/credentials" ] then f="$workdir/$(echo $pkg | tr / -)" go test -covermode="$mode" -coverprofile="$f.cover" "$pkg" go test -covermode="$mode" -coverpkg "$pkg" -coverprofile="$f.e2e.cover" "$end2endtest" fi done echo "mode: $mode" >"$profile" grep -h -v "^mode:" "$workdir"/*.cover >>"$profile" } show_cover_report() { go tool cover -${1}="$profile" } push_to_coveralls() { goveralls -coverprofile="$profile" } generate_cover_data $(go list ./...) show_cover_report func case "$1" in "") ;; --html) show_cover_report html ;; --coveralls) push_to_coveralls ;; *) echo >&2 "error: invalid option: $1" ;; esac rm -rf "$workdir"