gnucash future: Run coverage tests on ubuntu-26.04.

John Ralls jralls at code.gnucash.org
Fri Jun 19 19:11:23 EDT 2026


Updated	 via  https://github.com/Gnucash/gnucash/commit/122cb6dc (commit)
	from  https://github.com/Gnucash/gnucash/commit/24481321 (commit)



commit 122cb6dcca4d27077767373f527c37dd215e17a7
Author: John Ralls <jralls at ceridwen.us>
Date:   Wed Jun 17 13:29:36 2026 -0700

    Run coverage tests on ubuntu-26.04.
    
    ubuntu-latest isn't latest enough. Recent lcov v2 errors
    out if there are no GCDA files in the target directory.
    Call it with a shell script that checks first.

diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index 36ae190901..2dcd37bc63 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -3,7 +3,7 @@ on: push
 permissions: {}
 jobs:
   coverage:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-26.04
     name: C++ Code coverage analysis
     continue-on-error: true
     env:
@@ -60,7 +60,7 @@ jobs:
     environment:
       name: github-pages
       url: ${{ steps.deployment.outputs.page_url }}
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-26.04
     steps:
       - name: Publish
         id: deployment
diff --git a/common/cmake_modules/GncCoverage.cmake b/common/cmake_modules/GncCoverage.cmake
index 64843d1f71..0c06ccc8a0 100644
--- a/common/cmake_modules/GncCoverage.cmake
+++ b/common/cmake_modules/GncCoverage.cmake
@@ -65,15 +65,15 @@ else()
   file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/collect.sh
     CONTENT
     "#!/bin/bash
-if [ -e $2 ]
-  then rm $2
-fi
-j=\"\"
-for i in $1/*.info
-do j=\"$j -a $i\"
-done
-lcov $j -o $2
-"
+     if [ -e $2 ]
+       then rm $2
+     fi
+     j=\"\"
+     for i in $1/*.info
+       do j=\"$j -a $i\"
+     done
+     lcov $j -o $2
+     "
     FILE_PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE WORLD_EXECUTE)
 
   add_custom_target(lcov-collect
@@ -102,10 +102,27 @@ function (add_coverage_target tgt)
   add_dependencies(lcov-initialize lcov-initialize-${tgt})
   add_dependencies(lcov-initialize-${tgt} ${tgt})
 
+  string(REPLACE ";" " " geninfo_flags geninfo_string)
+  string(REPLACE ";" " " generate_flags generate_string)
+
+  set(capture_script "${CMAKE_CURRENT_BINARY_DIR}/capture-${tgt}.sh")
+
+  file(GENERATE OUTPUT "${capture_script}"
+    CONTENT
+    "#!/bin/bash
+     count=$(find \"${target_dir}\" -name '*.gcda' 2>/dev/null | wc -l)
+     if [ \"$count\" -gt 0 ]; then
+       lcov ${geninfo_string} ${generate_string} -c --directory \"${target_dir}\" -o \"${coverage_dir}/${tgt}_result.info\"
+    else #Nothing for lcov to do, make a dummy result.info
+      touch \"${coverage_dir}/${tgt}_result.info\"
+    fi
+    "
+    FILE_PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE WORLD_EXECUTE)
+
   add_custom_target(lcov-collect-${tgt}
-    COMMAND lcov ${geninfo_flags} ${generate_flags} -c --directory ${target_dir} -o "${coverage_dir}/${tgt}_result.info"
-    VERBATIM
-    COMMAND_EXPAND_LISTS)
+    COMMAND ${CMAKE_COMMAND} -E env "${capture_script}"
+    DEPENDS "${capture_script}"
+    VERBATIM)
   add_dependencies(lcov-collect lcov-collect-${tgt})
   set_target_properties(${tgt} PROPERTIES ADDITIONAL_CLEAN_FILES "${coverage_dir}/${tgt}_base.info;${coverage_dir}/${tgt}_result.info")
 endFunction()



Summary of changes:
 .github/workflows/coverage.yml         |  4 ++--
 common/cmake_modules/GncCoverage.cmake | 41 ++++++++++++++++++++++++----------
 2 files changed, 31 insertions(+), 14 deletions(-)



More information about the gnucash-changes mailing list