You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2026/04/21 04:09:17 UTC

(couchdb-jiffy) 06/49: Add C coverage checks

This is an automated email from the ASF dual-hosted git repository.

nickva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb-jiffy.git

commit 0435946bdf84fdeb095f8ffc1257379a1d817327
Author: Nick Vatamaniuc <va...@gmail.com>
AuthorDate: Mon Mar 30 22:15:02 2026 -0400

    Add C coverage checks
    
    Use gcov for coverage checks and lcov for report generation while running the
    full test suite, including all the property tests.
    
    This seems to work on Ubuntu and on MacOS. In CI we'll go with Ubuntu and run
    it as one job for now. We don't fail on low coverage, instead we'll track it
    manually by comparing with previous runs. This mostly helpful to run locally,
    as lcov html report is pretty and intuitive to browse through.
    
    Noticed Windows CI kept failing. Trying the next highest Windows version, maybe
    that will succeed.
---
 .github/workflows/ci.yml | 15 ++++++++++++++-
 .gitignore               |  5 +++++
 Makefile                 | 18 +++++++++++++++++-
 3 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index aa40a20..4cbec22 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -55,6 +55,19 @@ jobs:
         run: |
           make REBAR=rebar3 check-with-eqc
 
+  lcov-coverage:
+    name: lcov-coverage
+    runs-on: ubuntu-latest
+    container:
+      image: erlang:28
+    steps:
+      - uses: actions/checkout@v6
+      - name: install lcov
+        run: |
+          apt update
+          apt install -y --no-install-recommends --no-install-suggests lcov
+          make REBAR=rebar3 coverage
+
   gcc-14:
     name: gcc-14
     runs-on: ubuntu-latest
@@ -113,7 +126,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        os: [windows-2022]
+        os: [windows-2022, windows-2025]
 
     steps:
     - name: prevent git from messing up our json test files
diff --git a/.gitignore b/.gitignore
index c98ce03..590e2b1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,5 +16,10 @@ hexer.config
 rebar.lock
 TEST-*.xml
 /eqc/
+coverage.info
+coverage-jiffy.info
+coverage-html/
 .eqc-info
 current_counterexample.eqc
+*.gcda
+*.gcno
diff --git a/Makefile b/Makefile
index 5f48efb..0a88ae6 100644
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,9 @@ clean:
 	rm -f test/*.beam
 	rm -rf eqc
 	rm -rf _build
+	rm -f c_src/*.gcno c_src/*.gcda c_src/double-conversion/*.gcno c_src/double-conversion/*.gcda
+	rm -f coverage.info coverage-jiffy.info
+	rm -rf coverage-html
 
 
 distclean: clean
@@ -32,6 +35,19 @@ check-with-eqc: install_eqc build eunit
 install_eqc:
 	./test/install_eqc_mini.sh
 
+# macos:
+#   brew install lcov on macos
+# ubuntu:
+#   sudo apt install --no-install-recommends lcov
+#
+coverage:
+	$(MAKE) clean
+	CFLAGS="--coverage -O0" CXXFLAGS="--coverage -O0" LDFLAGS="--coverage" $(MAKE) check-with-eqc
+	@lcov --capture --directory c_src -o coverage.info --ignore-errors inconsistent,unsupported
+	@lcov --extract coverage.info '*/c_src/*' --exclude '*/double-conversion/*' -o coverage-jiffy.info --ignore-errors inconsistent,unsupported
+	@genhtml coverage-jiffy.info -o coverage-html --title "jiffy lcov report"
+	@echo "For coverage report: open coverage-html/index.html"
+
 release:
 	rebar3 hex publish
 
@@ -40,4 +56,4 @@ release:
 	erlc -o test/ $<
 
 
-.PHONY: all clean distclean depends build etap eunit check
+.PHONY: all clean distclean depends build etap eunit check coverage