Files
agv_pro_ros2/navigation2/tools/code_coverage_report.bash
T
2025-05-27 19:03:40 +08:00

81 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
if [ ! -d build ]; then
echo "Please run this script from the root of your workspace."
echo "Expected directory hierarchy is:"
echo "example_ws"
echo " - build"
echo " - - package_a"
echo " - - package_b"
exit 1
fi
set -e
LCOVDIR=lcov
PWD=`pwd`
COVERAGE_REPORT_VIEW="genhtml"
for opt in "$@" ; do
case "$opt" in
clean)
rm -rf install build log $LCOVDIR
exit 0
;;
codecovio)
COVERAGE_REPORT_VIEW=codecovio
;;
genhtml)
COVERAGE_REPORT_VIEW=genhtml
;;
ci)
COVERAGE_REPORT_VIEW=ci
;;
esac
done
set -o xtrace
mkdir -p ${LCOVDIR}
# Ignore certain packages:
# - messages, which are auto generated files
# - system tests, which are themselves all test artifacts
# - rviz plugins, which are not used for real navigation
EXCLUDE_PACKAGES=$(
colcon list \
--names-only \
--packages-select-regex \
".*_msgs" \
".*_tests" \
".*_rviz.*" \
| xargs)
INCLUDE_PACKAGES=$(
colcon list \
--names-only \
--packages-ignore \
$EXCLUDE_PACKAGES \
| xargs)
# Capture executed code data.
fastcov --lcov \
-d build \
--exclude test/ $EXCLUDE_PACKAGES thirdparty/ \
--include $INCLUDE_PACKAGES \
--process-gcno \
--validate-sources \
--dump-statistic \
--output ${LCOVDIR}/total_coverage.info
if [ $COVERAGE_REPORT_VIEW = codecovio ]; then
curl -s https://codecov.io/bash > codecov
codecov_version=$(grep -o 'VERSION=\"[0-9\.]*\"' codecov | cut -d'"' -f2)
shasum -a 512 -c <(curl -s "https://raw.githubusercontent.com/codecov/codecov-bash/${codecov_version}/SHA512SUM" | grep -w "codecov")
bash codecov \
-f ${LCOVDIR}/total_coverage.info \
-R src/navigation2
elif [ $COVERAGE_REPORT_VIEW = genhtml ]; then
genhtml ${LCOVDIR}/total_coverage.info \
--output-directory ${LCOVDIR}/html
fi