#!/usr/bin/env bash set -eu REPO="${REPO:-"edge-infra"}" COMMIT="$(git rev-parse HEAD)" COVERAGE_BUCKET="${COVERAGE_BUCKET:-"ret-edge-pltf-infra-coverage-reports"}" PUSH_COVERAGE="${PUSH_COVERAGE:-"false"}" bazel query 'kind(go_test, //...) except test/e2e/...' > test-targets.txt coverage_exit=0 bazel coverage --@io_bazel_rules_go//go/config:cover_format=go_cover \ --nocache_test_results \ --test_tag_filters=-integration,-end-to-end \ --target_pattern_file=test-targets.txt || coverage_exit=$? if [[ $coverage_exit != 0 ]]; then echo "WARNING: 'bazel coverage' exited with code: $coverage_exit" echo "Some tests may have failed, uploading coverage report anyway" fi find -L bazel-testlogs -name 'coverage.dat' | tr '\n' ' ' | sed 's/\ $//' > coverage-files.txt # Removed double quotes which is causing file too long error # shellcheck disable=SC2046 gopherage aggregate $(cat coverage-files.txt) > aggregated.out gopherage filter aggregated.out \ --exclude-path 'edge-infra.dev/third_party/.*' \ --exclude-path 'edge-infra.dev/.*/zz_generated.*.go' \ -o filtered.out go tool cover -func=filtered.out total=$(go tool cover -func=filtered.out | grep total | grep -Eo '[0-9]+\.[0-9]+') echo "TOTAL COVERAGE: $total" if (( $(echo "$total <= 60" | bc -l) )) ; then COLOR=red elif (( $(echo "$total > 80" | bc -l) )); then COLOR=green else COLOR=yellow fi go tool cover -html=filtered.out -o coverage.html if [ "$PUSH_COVERAGE" = 'true' ]; then echo "generating badge to coverage.svg..." curl "https://img.shields.io/badge/Coverage-$total%25-$COLOR" > coverage.svg echo "done" gsutil cp ./coverage.html "gs://ret-edge-pltf-infra-coverage-reports/$REPO/coverage.html" gsutil cp ./coverage.svg "gs://ret-edge-pltf-infra-coverage-reports/$REPO/coverage.svg" gsutil cp ./filtered.out "gs://ret-edge-pltf-infra-coverage-reports/$REPO/$COMMIT/filtered.out" gsutil acl ch -u AllUsers:R "gs://ret-edge-pltf-infra-coverage-reports/$REPO/coverage.svg" fi