#!/usr/bin/env bash set -euo pipefail JACOCO_REPORT="$1" MIN_COVERAGE_PERCENT="$2" ROOT_SOURCES_MODULE_POM="$3" LOG_FILE=target/check-coverage.log function coverage_from_report() { local xpath_expr="string(/report/counter[@type='INSTRUCTION']/@$1)" xpath -q -e "$xpath_expr" "$JACOCO_REPORT" 2>> ${LOG_FILE} } function check_preconditions() { local num_deps=$(grep -c 'project\.parent\.groupId' pom.xml) local num_submodules=$(grep -c '' ${ROOT_SOURCES_MODULE_POM}) local difference=$((${num_submodules}-${num_deps})) if [[ ${difference} -ne 0 ]]; then echo "Not all modules are included in the coverage report." echo "Verify if all submodules of hv-collector-sources module are included as a dependency to hv-collector-coverage module." echo "Number of missing modules: ${difference}" exit 1 fi } function check_coverage() { local missed=$(coverage_from_report missed) local covered=$(coverage_from_report covered) local total=$(($missed + $covered)) local coverage=$((100 * $covered / $total)) if [[ $(wc -c < ${LOG_FILE}) > 0 ]]; then echo "Warnings from xpath evaluation:" cat ${LOG_FILE} echo fi echo "Coverage: $coverage% (covered/total: $covered/$total)" if [[ ${coverage} -lt ${MIN_COVERAGE_PERCENT} ]]; then echo "Coverage is too low. Minimum coverage: $MIN_COVERAGE_PERCENT%" exit 1 fi } check_preconditions || exit 1 check_coverage || exit 2