Improve coverage generation and fix CI workflow
All checks were successful
Build ptprnt / build (push) Successful in 4m15s
All checks were successful
Build ptprnt / build (push) Successful in 4m15s
This commit is contained in:
@@ -36,8 +36,10 @@ jobs:
|
||||
echo "=== End dependency package version ==="
|
||||
- name: Build ptprnt debug
|
||||
run: scripts/build.sh debug --coverage --test
|
||||
- name: Generate coverage
|
||||
run: scripts/generate_coverage.sh --text
|
||||
- name: Coverage report
|
||||
run: cat ./builddir-debug/meson-logs/coverage.txt
|
||||
run: cat ./coverageReport/coverage.txt
|
||||
- name: build and release
|
||||
run: scripts/build.sh release
|
||||
- name: upload release binary
|
||||
@@ -50,5 +52,5 @@ jobs:
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: coverage.txt
|
||||
path: ./builddir/meson-logs/coverage.txt
|
||||
path: ./coverageReport/coverage.txt
|
||||
if-no-files-found: error
|
||||
|
||||
17
README.md
17
README.md
@@ -234,15 +234,16 @@ ninja -C builddir test
|
||||
|
||||
**Coverage reports:**
|
||||
```bash
|
||||
# Using build script
|
||||
./scripts/build.sh debug --coverage
|
||||
./scripts/generate_coverage.sh
|
||||
# 1. Build with coverage enabled and run tests
|
||||
./scripts/build.sh debug --coverage --test
|
||||
|
||||
# 2. Generate coverage reports
|
||||
./scripts/generate_coverage.sh # All formats (html, xml, text)
|
||||
./scripts/generate_coverage.sh --html # HTML only
|
||||
./scripts/generate_coverage.sh --text # Text only
|
||||
./scripts/generate_coverage.sh --xml # XML only (for CI/CD)
|
||||
./scripts/generate_coverage.sh --html --xml # HTML and XML
|
||||
|
||||
# Or manually
|
||||
meson setup builddir -Db_coverage=true
|
||||
ninja -C builddir
|
||||
ninja -C builddir test
|
||||
ninja -C builddir coverage-text
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
@@ -1,29 +1,195 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Coverage report generator for ptprnt
|
||||
# Usage: ./scripts/generate_coverage.sh [options]
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_PATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
PROJECT_ROOT="${SCRIPT_PATH}/.."
|
||||
|
||||
# Output paths
|
||||
HTML_COV_PATH="coverageReport/html"
|
||||
XML_COV_PATH="coverageReport/xml"
|
||||
TEXT_COV_PATH="coverageReport"
|
||||
HTML_START_FILE="index.html"
|
||||
|
||||
echo "Generating Coverage report for ptprnt"
|
||||
# Color output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
cd $SCRIPT_PATH/..
|
||||
# Default values - all formats enabled by default
|
||||
GENERATE_HTML=false
|
||||
GENERATE_XML=false
|
||||
GENERATE_TEXT=false
|
||||
BUILDDIR="builddir-debug"
|
||||
|
||||
ninja -C builddir
|
||||
ninja -C builddir test
|
||||
# Common gcovr options
|
||||
GCOVR_OPTS="--filter src --root ."
|
||||
|
||||
mkdir -p ${HTML_COV_PATH}
|
||||
gcovr --html --html-details --html-syntax-highlighting --filter src --output ${HTML_COV_PATH}/${HTML_START_FILE}
|
||||
print_usage() {
|
||||
echo "Usage: $0 [options]"
|
||||
echo ""
|
||||
echo "Coverage Report Generator - generates coverage reports from existing coverage data"
|
||||
echo ""
|
||||
echo "Prerequisites:"
|
||||
echo " Build with coverage enabled first:"
|
||||
echo " ./scripts/build.sh debug --coverage --test"
|
||||
echo ""
|
||||
echo "Format Options (if none specified, all formats are generated):"
|
||||
echo " --html Generate HTML coverage report"
|
||||
echo " --xml Generate XML coverage report (for CI/CD)"
|
||||
echo " --text Generate text coverage report (terminal output)"
|
||||
echo ""
|
||||
echo "Build Options:"
|
||||
echo " --builddir DIR Use custom build directory (default: builddir-debug)"
|
||||
echo ""
|
||||
echo "Other Options:"
|
||||
echo " -h, --help Show this help message"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 # Generate all formats (html, xml, text)"
|
||||
echo " $0 --html # Generate only HTML report"
|
||||
echo " $0 --html --text # Generate HTML and text reports"
|
||||
echo " $0 --xml # Generate XML for CI/CD"
|
||||
echo " $0 --builddir builddir # Use release build directory"
|
||||
}
|
||||
|
||||
mkdir -p ${XML_COV_PATH}
|
||||
gcovr --xml-pretty --filter src --output ${XML_COV_PATH}/cov.xml
|
||||
|
||||
if [ $? ]
|
||||
then
|
||||
echo "Coverage report successful generated!"
|
||||
echo "Open: file://${SCRIPT_PATH}/${HTML_COV_PATH}/${HTML_START_FILE}"
|
||||
else
|
||||
echo "Error generating coverage report!"
|
||||
# Parse arguments
|
||||
# If no format arguments provided, enable all
|
||||
if [[ $# -eq 0 ]]; then
|
||||
GENERATE_HTML=true
|
||||
GENERATE_XML=true
|
||||
GENERATE_TEXT=true
|
||||
fi
|
||||
|
||||
rm *.gcov
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--html)
|
||||
GENERATE_HTML=true
|
||||
shift
|
||||
;;
|
||||
--xml)
|
||||
GENERATE_XML=true
|
||||
shift
|
||||
;;
|
||||
--text)
|
||||
GENERATE_TEXT=true
|
||||
shift
|
||||
;;
|
||||
--builddir)
|
||||
BUILDDIR="$2"
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
print_usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}Error: Unknown option: $1${NC}"
|
||||
print_usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Check if any format was selected when arguments were provided
|
||||
if [[ $GENERATE_HTML == false && $GENERATE_XML == false && $GENERATE_TEXT == false ]]; then
|
||||
echo -e "${RED}Error: No output format specified. Use --html, --xml, and/or --text${NC}"
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "${PROJECT_ROOT}"
|
||||
|
||||
# Check if build directory exists
|
||||
if [[ ! -d "${BUILDDIR}" ]]; then
|
||||
echo -e "${RED}Error: Build directory '${BUILDDIR}' does not exist${NC}"
|
||||
echo ""
|
||||
echo "Build with coverage enabled first:"
|
||||
echo " ./scripts/build.sh debug --coverage --test"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if coverage data exists by looking for .gcda files
|
||||
if ! find "${BUILDDIR}" -name "*.gcda" -print -quit | grep -q .; then
|
||||
echo -e "${RED}Error: No coverage data found in '${BUILDDIR}'${NC}"
|
||||
echo ""
|
||||
echo "Make sure you built with coverage enabled and ran the tests:"
|
||||
echo " ./scripts/build.sh debug --coverage --test"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}Generating Coverage report for ptprnt${NC}"
|
||||
echo "Build directory: ${BUILDDIR}"
|
||||
echo "Formats: $(${GENERATE_HTML} && echo -n "html ")$(${GENERATE_XML} && echo -n "xml ")$(${GENERATE_TEXT} && echo -n "text")"
|
||||
echo ""
|
||||
|
||||
# Check if gcovr is available
|
||||
if ! command -v gcovr &> /dev/null; then
|
||||
echo -e "${RED}Error: gcovr is not installed${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${GENERATE_HTML}" == true ]]; then
|
||||
echo -e "${YELLOW}Generating HTML coverage report...${NC}"
|
||||
mkdir -p "${HTML_COV_PATH}"
|
||||
gcovr ${GCOVR_OPTS} \
|
||||
--html --html-details --html-syntax-highlighting \
|
||||
--output "${HTML_COV_PATH}/${HTML_START_FILE}"
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo -e "${GREEN}✓ HTML report generated${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}To view HTML report, open:${NC}"
|
||||
echo " file://${SCRIPT_PATH}/../${HTML_COV_PATH}/${HTML_START_FILE}"
|
||||
|
||||
else
|
||||
echo -e "${RED}✗ HTML report failed${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "${GENERATE_XML}" == true ]]; then
|
||||
echo -e "${YELLOW}Generating XML coverage report...${NC}"
|
||||
mkdir -p "${XML_COV_PATH}"
|
||||
gcovr ${GCOVR_OPTS} \
|
||||
--xml-pretty \
|
||||
--output "${XML_COV_PATH}/cov.xml"
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo -e "${GREEN}✓ XML report generated${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}To view XML report, open:${NC}"
|
||||
echo " file://${SCRIPT_PATH}/../${XML_COV_PATH}/cov.xml"
|
||||
else
|
||||
echo -e "${RED}✗ XML report failed${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "${GENERATE_TEXT}" == true ]]; then
|
||||
echo -e "${YELLOW}Generating text coverage report...${NC}"
|
||||
mkdir -p "${TEXT_COV_PATH}"
|
||||
|
||||
# Save to file
|
||||
gcovr ${GCOVR_OPTS} --output "${TEXT_COV_PATH}/coverage.txt"
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo -e "${GREEN}✓ Text report generated${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}To view TXT report, open:${NC}"
|
||||
echo "file://${SCRIPT_PATH}/../${TEXT_COV_PATH}/coverage.txt"
|
||||
else
|
||||
echo -e "${RED}✗ Text report failed${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clean up gcov files
|
||||
rm -f *.gcov 2>/dev/null
|
||||
|
||||
# Summary
|
||||
echo ""
|
||||
echo -e "${GREEN}Coverage reports generated successfully!${NC}"
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user