From b286f80f56e5896b05891f415555bc4951de9260 Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Mon, 16 Mar 2026 16:17:05 -0600 Subject: [PATCH 01/12] cov - more minor fixes --- interface/ceed-basis.c | 4 ++++ interface/ceed-elemrestriction.c | 8 +++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/interface/ceed-basis.c b/interface/ceed-basis.c index 23bf05c419..55aa1e0e36 100644 --- a/interface/ceed-basis.c +++ b/interface/ceed-basis.c @@ -595,9 +595,11 @@ static int CeedBasisApplyAtPoints_Core(CeedBasis basis, bool apply_add, CeedInt } break; } + // LCOV_EXCL_START default: // Nothing to do, excluded above break; + // LCOV_EXCL_STOP } CeedCall(CeedVectorRestoreArrayRead(basis->vec_chebyshev, &chebyshev_coeffs)); CeedCall(CeedVectorRestoreArrayRead(x_ref, &x_array_read)); @@ -659,9 +661,11 @@ static int CeedBasisApplyAtPoints_Core(CeedBasis basis, bool apply_add, CeedInt } break; } + // LCOV_EXCL_START default: // Nothing to do, excluded above break; + // LCOV_EXCL_STOP } CeedCall(CeedVectorRestoreArray(basis->vec_chebyshev, &chebyshev_coeffs)); CeedCall(CeedVectorRestoreArrayRead(x_ref, &x_array_read)); diff --git a/interface/ceed-elemrestriction.c b/interface/ceed-elemrestriction.c index 476daab0c2..59b2484af1 100644 --- a/interface/ceed-elemrestriction.c +++ b/interface/ceed-elemrestriction.c @@ -1586,11 +1586,9 @@ int CeedElemRestrictionGetMinMaxPointsInElement(CeedElemRestriction rstr, CeedIn CeedCall(CeedElemRestrictionGetNumElements(rstr, &num_elem)); // Exit early if there are no elements - if (num_elem == 0) { - if (min_points) *min_points = 0; - if (max_points) *max_points = 0; - return CEED_ERROR_SUCCESS; - } + if (min_points) *min_points = 0; + if (max_points) *max_points = 0; + if (num_elem == 0) return CEED_ERROR_SUCCESS; // Initialize to the number of points in the first element CeedCall(CeedElemRestrictionGetNumPointsInElement(rstr, 0, &num_points)); From 02c81be06d8d6d00d48109033f6c20db86ba35f5 Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Mon, 16 Mar 2026 16:18:29 -0600 Subject: [PATCH 02/12] rust - clearer exporting of CARGO_CEED_OPT_FLAGS --- .github/workflows/rust-test-with-style.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rust-test-with-style.yml b/.github/workflows/rust-test-with-style.yml index 63ce2d7b3c..157768a1f3 100644 --- a/.github/workflows/rust-test-with-style.yml +++ b/.github/workflows/rust-test-with-style.yml @@ -32,7 +32,9 @@ jobs: env: CC: ${{ matrix.compiler }} FC: gfortran - run: CARGO_CEED_OPT_FLAGS="-g -O0 -fno-inline" cargo llvm-cov test --doctests --lcov --output-path lcov.info + run: | + export CARGO_CEED_OPT_FLAGS="-g -O0 -fno-inline" + cargo llvm-cov test --doctests --lcov --output-path lcov.info - name: Codecov upload uses: codecov/codecov-action@v4 with: From 853fca69dce5b8a60414395793e14aba182b877b Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Tue, 17 Mar 2026 14:25:58 -0600 Subject: [PATCH 03/12] tidy - small fixes --- interface/ceed-jit-tools.c | 26 +++++++++++++------------- interface/ceed.c | 18 +++++++++++++++--- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/interface/ceed-jit-tools.c b/interface/ceed-jit-tools.c index c50e683f9a..3db81c5f7c 100644 --- a/interface/ceed-jit-tools.c +++ b/interface/ceed-jit-tools.c @@ -180,13 +180,13 @@ int CeedLoadSourceToInitializedBuffer(Ceed ceed, const char *source_file_path, C bool is_pragma_once = next_o && (next_new_line - next_o > 0) && !strncmp(next_o, "once", 4); // -- Copy into buffer, omitting last line if #pragma once - long current_size = strlen(*buffer); - long copy_size = first_hash - &temp_buffer[file_offset] + (is_pragma_once ? 0 : (next_new_line - first_hash + 1)); + const long current_size = strlen(*buffer); + const long copy_size = first_hash - &temp_buffer[file_offset] + (is_pragma_once ? 0 : (next_new_line - first_hash + 1)); - CeedCall(CeedRealloc(current_size + copy_size + 2, buffer)); + CeedCall(CeedRealloc(current_size + copy_size + 1, buffer)); memcpy(&(*buffer)[current_size], "\n", 2); memcpy(&(*buffer)[current_size + 1], &temp_buffer[file_offset], copy_size); - memcpy(&(*buffer)[current_size + copy_size], "", 1); + memcpy(&(*buffer)[current_size + copy_size], "\0", 1); // NOLINT file_offset = strchr(first_hash, '\n') - temp_buffer + 1; } @@ -205,13 +205,13 @@ int CeedLoadSourceToInitializedBuffer(Ceed ceed, const char *source_file_path, C } if (is_hash_include) { // -- Copy into buffer all preceding # - long current_size = strlen(*buffer); - long copy_size = first_hash - &temp_buffer[file_offset]; + const long current_size = strlen(*buffer); + const long copy_size = first_hash - &temp_buffer[file_offset]; - CeedCall(CeedRealloc(current_size + copy_size + 2, buffer)); + CeedCall(CeedRealloc(current_size + copy_size + 1, buffer)); memcpy(&(*buffer)[current_size], "\n", 2); memcpy(&(*buffer)[current_size + 1], &temp_buffer[file_offset], copy_size); - memcpy(&(*buffer)[current_size + copy_size], "", 1); + memcpy(&(*buffer)[current_size + copy_size], "\0", 1); // NOLINT // -- Load local "header.h" char *next_quote = strchr(first_hash, '"'); char *next_new_line = strchr(first_hash, '\n'); @@ -262,12 +262,12 @@ int CeedLoadSourceToInitializedBuffer(Ceed ceed, const char *source_file_path, C CeedCall(CeedFree(&include_source_path)); CeedCall(CeedFree(&normalized_include_source_path)); } else if (!is_std_header) { - long header_copy_size = next_new_line - first_hash + 1; + const long header_copy_size = next_new_line - first_hash + 1; CeedCall(CeedRealloc(current_size + copy_size + header_copy_size + 2, buffer)); memcpy(&(*buffer)[current_size + copy_size], "\n", 2); memcpy(&(*buffer)[current_size + copy_size + 1], first_hash, header_copy_size); - memcpy(&(*buffer)[current_size + copy_size + header_copy_size], "", 1); + memcpy(&(*buffer)[current_size + copy_size + header_copy_size], "\0", 1); } file_offset = strchr(first_hash, '\n') - temp_buffer + 1; } @@ -275,13 +275,13 @@ int CeedLoadSourceToInitializedBuffer(Ceed ceed, const char *source_file_path, C first_hash = strchr(&first_hash[1], '#'); } // Copy rest of source file into buffer - long current_size = strlen(*buffer); - long copy_size = strlen(&temp_buffer[file_offset]); + const long current_size = strlen(*buffer); + const long copy_size = strlen(&temp_buffer[file_offset]); CeedCall(CeedRealloc(current_size + copy_size + 2, buffer)); memcpy(&(*buffer)[current_size], "\n", 2); memcpy(&(*buffer)[current_size + 1], &temp_buffer[file_offset], copy_size); - memcpy(&(*buffer)[current_size + copy_size + 1], "", 1); + memcpy(&(*buffer)[current_size + copy_size + 1], "\0", 1); // Cleanup CeedCall(CeedFree(&temp_buffer)); diff --git a/interface/ceed.c b/interface/ceed.c index 6c94ec8db8..4adfdad887 100644 --- a/interface/ceed.c +++ b/interface/ceed.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -912,6 +913,8 @@ int CeedGetWorkVector(Ceed ceed, CeedSize len, CeedVector *vec) { } } // Long enough vector was not found + // Note: assert fixing bad clang-tidy assumption that num_vecs > max_vecs is ever possible + assert(ceed->work_vectors->num_vecs <= ceed->work_vectors->max_vecs); if (i == ceed->work_vectors->num_vecs) { if (ceed->work_vectors->max_vecs == 0) { ceed->work_vectors->max_vecs = 1; @@ -1178,6 +1181,7 @@ int CeedInit(const char *resource, Ceed *ceed) { // Check for help request const char *help_prefix = "help"; size_t match_help = 0; + while (match_help < 4 && resource[match_help] == help_prefix[match_help]) match_help++; if (match_help == 4) { fprintf(stderr, "libCEED version: %d.%d%d%s\n", CEED_VERSION_MAJOR, CEED_VERSION_MINOR, CEED_VERSION_PATCH, @@ -1195,10 +1199,12 @@ int CeedInit(const char *resource, Ceed *ceed) { // Find best match, computed as number of matching characters from requested resource stem size_t stem_length = 0; + while (resource[stem_length + match_help] && resource[stem_length + match_help] != ':') stem_length++; for (size_t i = 0; i < num_backends; i++) { size_t n = 0; const char *prefix = backends[i].prefix; + while (prefix[n] && prefix[n] == resource[n + match_help]) n++; priority = backends[i].priority; if (n > match_len || (n == match_len && match_priority > priority)) { @@ -1211,12 +1217,14 @@ int CeedInit(const char *resource, Ceed *ceed) { if (match_len <= 1 || match_len != stem_length) { // LCOV_EXCL_START size_t lev_dis = UINT_MAX; - size_t lev_index = UINT_MAX, lev_priority = CEED_MAX_BACKEND_PRIORITY; + size_t lev_index = num_backends, lev_priority = CEED_MAX_BACKEND_PRIORITY; + for (size_t i = 0; i < num_backends; i++) { const char *prefix = backends[i].prefix; size_t prefix_length = strlen(backends[i].prefix); size_t min_len = (prefix_length < stem_length) ? prefix_length : stem_length; size_t column[min_len + 1]; + for (size_t j = 0; j <= min_len; j++) column[j] = j; for (size_t j = 1; j <= min_len; j++) { column[0] = j; @@ -1224,11 +1232,13 @@ int CeedInit(const char *resource, Ceed *ceed) { size_t old_diag = column[k]; size_t min_1 = (column[k] < column[k - 1]) ? column[k] + 1 : column[k - 1] + 1; size_t min_2 = last_diag + (resource[k - 1] == prefix[j - 1] ? 0 : 1); - column[k] = (min_1 < min_2) ? min_1 : min_2; - last_diag = old_diag; + + column[k] = (min_1 < min_2) ? min_1 : min_2; + last_diag = old_diag; } } size_t n = column[min_len]; + priority = backends[i].priority; if (n < lev_dis || (n == lev_dis && lev_priority > priority)) { lev_dis = n; @@ -1238,8 +1248,10 @@ int CeedInit(const char *resource, Ceed *ceed) { } const char *prefix_lev = backends[lev_index].prefix; size_t lev_length = 0; + while (prefix_lev[lev_length] && prefix_lev[lev_length] != '\0') lev_length++; size_t m = (lev_length < stem_length) ? lev_length : stem_length; + if (lev_dis + 1 >= m) return CeedError(NULL, CEED_ERROR_MAJOR, "No suitable backend: %s", resource); else return CeedError(NULL, CEED_ERROR_MAJOR, "No suitable backend: %s\nClosest match: %s", resource, backends[lev_index].prefix); // LCOV_EXCL_STOP From c170fe9ff354b84622005b7e6717b121d04ebe59 Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Wed, 18 Mar 2026 09:19:47 -0600 Subject: [PATCH 04/12] cov - update codecov settings --- .codecov.yml | 5 ++++- .gitlab-ci.yml | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.codecov.yml b/.codecov.yml index bf0af362f5..8fe729a47c 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -2,8 +2,11 @@ codecov: branch: main fixes: - - "build/backends/::backends/" + - "build/interface/::interface/" - "build/gallery/::gallery/" + - "build/backends/::backends/" + - "build/t*/::tests/t*" + - "build/ex*/::examples/ceed/ex*" ignore: - "julia/LibCEED.jl/src/generated/*.jl" diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d3188148a5..cacab6fdf8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -121,7 +121,7 @@ noether-cpu: after_script: - | if [ -f .SUCCESS ]; then - lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch,unused --substitute 's#(t*-f.h)#test/(t*.-f.h)#g'; + lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; @@ -209,7 +209,7 @@ noether-rust-qfunctions: after_script: - | if [ -f .SUCCESS ]; then - lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch,unused --substitute 's#(t*-f.h)#test/(t*.-f.h)#g'; + lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; @@ -290,7 +290,7 @@ noether-cuda: after_script: - | if [ -f .SUCCESS ]; then - lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch,unused --substitute 's#(t*-f.h)#test/(t*.-f.h)#g'; + lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; @@ -357,7 +357,7 @@ noether-cuda: # after_script: # - | # if [ -f .SUCCESS ]; then -# lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch,unused --substitute 's#(t*-f.h)#test/(t*.-f.h)#g'; +# lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; # bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; # bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; # bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; @@ -460,7 +460,7 @@ noether-float: after_script: - | if [ $(cat .job_status) == "SUCCESS" ]; then - lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch,unused --substitute 's#(t*-f.h)#test/(t*.-f.h)#g'; + lcov --directory . --capture --output-file coverage.info --ignore-errors source,mismatch; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; From 7c48449274b457b92daae6de3a68cf0e93077ebd Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Thu, 19 Mar 2026 14:41:00 -0600 Subject: [PATCH 05/12] ci - remove extra cleans --- .gitlab-ci.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cacab6fdf8..945c87be4a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -89,7 +89,6 @@ noether-cpu: - echo "-------------- BACKENDS_CPU --------" && echo $BACKENDS_CPU - make clean - PEDANTIC=1 make -j$NPROC_CPU - - make -j$NPROC_CPU # -- libCEED only tests - echo "-------------- core tests ----------" - echo '[{"subject":"/","metrics":[{"name":"Transfer Size (KB)","value":"19.5","desiredSize":"smaller"},{"name":"Speed Index","value":0,"desiredSize":"smaller"},{"name":"Total Score","value":92,"desiredSize":"larger"},{"name":"Requests","value":4,"desiredSize":"smaller"}]}]' > performance.json @@ -261,8 +260,7 @@ noether-cuda: - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit realsearch=% # Rebuild without ASAN - unset ASAN AFLAGS ASAN_OPTIONS - - make clean - - PEDANTIC=1 make -k -j$NPROC_CPU -l$NPROC_CPU + - PEDANTIC=1 make -B -k -j$NPROC_CPU -l$NPROC_CPU # Libraries for examples # -- PETSc with CUDA (minimal) - export PETSC_DIR=/projects/petsc PETSC_ARCH=mpich-cuda-O PETSC_OPTIONS='-use_gpu_aware_mpi 0' && git -C $PETSC_DIR -c safe.directory=$PETSC_DIR describe @@ -402,7 +400,6 @@ noether-rocm: - make -j$NPROC_CPU # Clang-tidy - echo "-------------- clang-tidy ----------" && clang-tidy --version - - make clean - TIDY_OPTS="-fix-errors" make -j$NPROC_CPU tidy && git diff --color=always --exit-code # Report status - touch .SUCCESS From b0c7d47af3abc7bd0c8f7bdbd7139887290f4509 Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Thu, 19 Mar 2026 15:00:25 -0600 Subject: [PATCH 06/12] ci - need to clean after running asan --- .gitlab-ci.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 945c87be4a..ea4244ef19 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -257,10 +257,14 @@ noether-cuda: - echo "-------------- core tests ----------" # Note: PETSC_DIR is set by default in GitLab runner env, unsetting to isolate core tests - export PETSC_DIR= PETSC_ARCH= - - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit realsearch=% + # Run only operator tests for ASAN + - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit search=t5 # Rebuild without ASAN - unset ASAN AFLAGS ASAN_OPTIONS - - PEDANTIC=1 make -B -k -j$NPROC_CPU -l$NPROC_CPU + # Need to clean and run full test suite so gcda files match + - make clean + - PEDANTIC=1 make -k -j$NPROC_CPU -l$NPROC_CPU + - make -k -j$((NPROC_GPU / NPROC_POOL)) BACKENDS="$BACKENDS_GPU" JUNIT_BATCH="cuda" junit realsearch=% # Libraries for examples # -- PETSc with CUDA (minimal) - export PETSC_DIR=/projects/petsc PETSC_ARCH=mpich-cuda-O PETSC_OPTIONS='-use_gpu_aware_mpi 0' && git -C $PETSC_DIR -c safe.directory=$PETSC_DIR describe From d71a844038980318427295d3a2e2de2ca121fcaf Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Thu, 19 Mar 2026 15:34:35 -0600 Subject: [PATCH 07/12] cov - more small fixes --- backends/cuda/ceed-cuda-compile.cpp | 12 ++++++------ backends/hip/ceed-hip-compile.cpp | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/backends/cuda/ceed-cuda-compile.cpp b/backends/cuda/ceed-cuda-compile.cpp index d1593dd800..cb5ab11195 100644 --- a/backends/cuda/ceed-cuda-compile.cpp +++ b/backends/cuda/ceed-cuda-compile.cpp @@ -187,6 +187,7 @@ static int CeedCompileCore_Cuda(Ceed ceed, const char *source, const bool throw_ CeedCallBackend(CeedFree(&opts)); *is_compile_good = result == NVRTC_SUCCESS; if (!*is_compile_good) { + // LCOV_EXCL_START char *log; size_t log_size; @@ -196,15 +197,14 @@ static int CeedCompileCore_Cuda(Ceed ceed, const char *source, const bool throw_ if (throw_error) { return CeedError(ceed, CEED_ERROR_BACKEND, "%s\n%s", nvrtcGetErrorString(result), log); } else { - // LCOV_EXCL_START CeedDebug256(ceed, CEED_DEBUG_COLOR_ERROR, "---------- COMPILE ERROR DETECTED ----------\n"); CeedDebug(ceed, "Error: %s\nCompile log:\n%s\n", nvrtcGetErrorString(result), log); CeedDebug256(ceed, CEED_DEBUG_COLOR_ERROR, "---------- BACKEND MAY FALLBACK ----------\n"); CeedCallBackend(CeedFree(&log)); CeedCallNvrtc(ceed, nvrtcDestroyProgram(&prog)); return CEED_ERROR_SUCCESS; - // LCOV_EXCL_STOP } + // LCOV_EXCL_STOP } #if CUDA_VERSION >= 11010 @@ -389,16 +389,16 @@ static int CeedCompileCore_Cuda(Ceed ceed, const char *source, const bool throw_ *is_compile_good = result == 0; if (!*is_compile_good) { + // LCOV_EXCL_START if (throw_error) { return CeedError(ceed, CEED_ERROR_BACKEND, "Failed to load module data"); } else { - // LCOV_EXCL_START CeedDebug256(ceed, CEED_DEBUG_COLOR_ERROR, "---------- COMPILE ERROR DETECTED ----------\n"); CeedDebug(ceed, "Error: Failed to load module data"); CeedDebug256(ceed, CEED_DEBUG_COLOR_ERROR, "---------- BACKEND MAY FALLBACK ----------\n"); return CEED_ERROR_SUCCESS; - // LCOV_EXCL_STOP } + // LCOV_EXCL_STOP } } return CEED_ERROR_SUCCESS; @@ -477,6 +477,7 @@ static int CeedRunKernelDimSharedCore_Cuda(Ceed ceed, CUfunction kernel, CUstrea CUresult result = cuLaunchKernel(kernel, grid_size, 1, 1, block_size_x, block_size_y, block_size_z, shared_mem_size, stream, args, NULL); if (result == CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES) { + // LCOV_EXCL_START int max_threads_per_block, shared_size_bytes, num_regs; cuFuncGetAttribute(&max_threads_per_block, CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK, kernel); @@ -487,13 +488,12 @@ static int CeedRunKernelDimSharedCore_Cuda(Ceed ceed, CUfunction kernel, CUstrea "CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES: max_threads_per_block %d on block size (%d,%d,%d), shared_size %d, num_regs %d", max_threads_per_block, block_size_x, block_size_y, block_size_z, shared_size_bytes, num_regs); } else { - // LCOV_EXCL_START CeedDebug256(ceed, CEED_DEBUG_COLOR_ERROR, "---------- LAUNCH ERROR DETECTED ----------\n"); CeedDebug(ceed, "CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES: max_threads_per_block %d on block size (%d,%d,%d), shared_size %d, num_regs %d\n", max_threads_per_block, block_size_x, block_size_y, block_size_z, shared_size_bytes, num_regs); CeedDebug256(ceed, CEED_DEBUG_COLOR_WARNING, "---------- BACKEND MAY FALLBACK ----------\n"); - // LCOV_EXCL_STOP } + // LCOV_EXCL_STOP *is_good_run = false; } else CeedChk_Cu(ceed, result); return CEED_ERROR_SUCCESS; diff --git a/backends/hip/ceed-hip-compile.cpp b/backends/hip/ceed-hip-compile.cpp index e30bc07a02..ed4efaca34 100644 --- a/backends/hip/ceed-hip-compile.cpp +++ b/backends/hip/ceed-hip-compile.cpp @@ -145,6 +145,7 @@ static int CeedCompileCore_Hip(Ceed ceed, const char *source, const bool throw_e CeedCallBackend(CeedFree(&opts)); *is_compile_good = result == HIPRTC_SUCCESS; if (!*is_compile_good) { + // LCOV_EXCL_START size_t log_size; char *log; @@ -154,15 +155,14 @@ static int CeedCompileCore_Hip(Ceed ceed, const char *source, const bool throw_e if (throw_error) { return CeedError(ceed, CEED_ERROR_BACKEND, "%s\n%s", hiprtcGetErrorString(result), log); } else { - // LCOV_EXCL_START CeedDebug256(ceed, CEED_DEBUG_COLOR_ERROR, "---------- COMPILE ERROR DETECTED ----------\n"); CeedDebug(ceed, "Error: %s\nCompile log:\n%s\n", hiprtcGetErrorString(result), log); CeedDebug256(ceed, CEED_DEBUG_COLOR_WARNING, "---------- BACKEND MAY FALLBACK ----------\n"); CeedCallBackend(CeedFree(&log)); CeedCallHiprtc(ceed, hiprtcDestroyProgram(&prog)); return CEED_ERROR_SUCCESS; - // LCOV_EXCL_STOP } + // LCOV_EXCL_STOP } CeedCallHiprtc(ceed, hiprtcGetCodeSize(prog, &ptx_size)); @@ -234,17 +234,17 @@ static int CeedRunKernelDimSharedCore_Hip(Ceed ceed, hipFunction_t kernel, hipSt if (result == hipSuccess) { *is_good_run = true; } else { + // LCOV_EXCL_START if (throw_error) { CeedCallHip(ceed, result); } else { - // LCOV_EXCL_START const char *message = hipGetErrorName(result); CeedDebug256(ceed, CEED_DEBUG_COLOR_ERROR, "---------- LAUNCH ERROR DETECTED ----------\n"); CeedDebug(ceed, "%s\n", message); CeedDebug256(ceed, CEED_DEBUG_COLOR_WARNING, "---------- BACKEND MAY FALLBACK ----------\n"); - // LCOV_EXCL_STOP } + // LCOV_EXCL_STOP *is_good_run = false; } return CEED_ERROR_SUCCESS; From fb11b4cc927a06a0ca96e8b8a431fdf834f5dc62 Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Thu, 19 Mar 2026 15:35:03 -0600 Subject: [PATCH 08/12] ci - don't upload reports with no events --- .gitlab-ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ea4244ef19..6b315b8097 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -212,8 +212,6 @@ noether-rust-qfunctions: bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F interface; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F gallery; bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F backends; - bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F tests; - bash <(curl -s https://codecov.io/bash) -f coverage.info -t ${CODECOV_ACCESS_TOKEN} -F examples; fi artifacts: paths: From edb0aa3c5d87806d7b19293865bff96fc445b3c3 Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Fri, 20 Mar 2026 09:04:57 -0600 Subject: [PATCH 09/12] ci - exclude non-rust source from cov in rust job --- .github/workflows/rust-test-with-style.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rust-test-with-style.yml b/.github/workflows/rust-test-with-style.yml index 157768a1f3..b82bce4daf 100644 --- a/.github/workflows/rust-test-with-style.yml +++ b/.github/workflows/rust-test-with-style.yml @@ -34,7 +34,7 @@ jobs: FC: gfortran run: | export CARGO_CEED_OPT_FLAGS="-g -O0 -fno-inline" - cargo llvm-cov test --doctests --lcov --output-path lcov.info + cargo llvm-cov test --doctests --lcov --exclude-from-report backends/*,interface/*,gallery/*,tests/*,julia/*,python/* --output-path lcov.info - name: Codecov upload uses: codecov/codecov-action@v4 with: From 8505f623c01e5c8bd56520325fcebe9838a7e22e Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Fri, 20 Mar 2026 09:17:24 -0600 Subject: [PATCH 10/12] ci - rust don't upload on macos --- .github/workflows/rust-test-with-style.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rust-test-with-style.yml b/.github/workflows/rust-test-with-style.yml index b82bce4daf..6300c62064 100644 --- a/.github/workflows/rust-test-with-style.yml +++ b/.github/workflows/rust-test-with-style.yml @@ -37,9 +37,10 @@ jobs: cargo llvm-cov test --doctests --lcov --exclude-from-report backends/*,interface/*,gallery/*,tests/*,julia/*,python/* --output-path lcov.info - name: Codecov upload uses: codecov/codecov-action@v4 + if: ${{ runner.os == 'Linux' }} with: files: lcov.info - token: ${{secrets.CODECOV_TOKEN}} + token: ${{ secrets.CODECOV_TOKEN }} style: strategy: From dbd78aa3948fd0da91e9d78ce59763387687d162 Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Fri, 20 Mar 2026 09:25:33 -0600 Subject: [PATCH 11/12] ci - update action versions --- .github/workflows/c-fortan-test-ppc64le.yml | 2 +- .github/workflows/c-fortran-test-arm64.yml | 2 +- .github/workflows/c-fortran-test-icc.yml | 2 +- .github/workflows/c-fortran-test-linux-osx.yml | 2 +- .github/workflows/c-fortran-test-style.yml | 2 +- .github/workflows/julia-documentation.yml | 2 +- .github/workflows/julia-test-with-style.yml | 2 +- .github/workflows/python-test-with-style.yml | 4 ++-- .github/workflows/python-wheels.yml | 10 ++-------- .github/workflows/release-notes.yml | 2 +- .github/workflows/rust-documentation.yml | 2 +- .github/workflows/rust-test-with-style.yml | 6 +++--- 12 files changed, 16 insertions(+), 22 deletions(-) diff --git a/.github/workflows/c-fortan-test-ppc64le.yml b/.github/workflows/c-fortan-test-ppc64le.yml index f710c9ba12..b14f8928f6 100644 --- a/.github/workflows/c-fortan-test-ppc64le.yml +++ b/.github/workflows/c-fortan-test-ppc64le.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Hardware setup and test libCEED uses: uraimo/run-on-arch-action@v3 env: diff --git a/.github/workflows/c-fortran-test-arm64.yml b/.github/workflows/c-fortran-test-arm64.yml index 6927f37b68..ff1fa1288d 100644 --- a/.github/workflows/c-fortran-test-arm64.yml +++ b/.github/workflows/c-fortran-test-arm64.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Build and test libCEED env: CC: ${{ matrix.compiler }} diff --git a/.github/workflows/c-fortran-test-icc.yml b/.github/workflows/c-fortran-test-icc.yml index 4e854195b1..2689ffa130 100644 --- a/.github/workflows/c-fortran-test-icc.yml +++ b/.github/workflows/c-fortran-test-icc.yml @@ -19,7 +19,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install Intel compilers uses: rscohn2/setup-oneapi@v0 with: diff --git a/.github/workflows/c-fortran-test-linux-osx.yml b/.github/workflows/c-fortran-test-linux-osx.yml index 52df23c8d1..666feab68e 100644 --- a/.github/workflows/c-fortran-test-linux-osx.yml +++ b/.github/workflows/c-fortran-test-linux-osx.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set compiler run: | case "${{ matrix.compiler }}" in diff --git a/.github/workflows/c-fortran-test-style.yml b/.github/workflows/c-fortran-test-style.yml index ff55101bde..4a8700ba10 100644 --- a/.github/workflows/c-fortran-test-style.yml +++ b/.github/workflows/c-fortran-test-style.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install clang-format run: | wget -O- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - diff --git a/.github/workflows/julia-documentation.yml b/.github/workflows/julia-documentation.yml index b90bb1bb1e..5e118ab67a 100644 --- a/.github/workflows/julia-documentation.yml +++ b/.github/workflows/julia-documentation.yml @@ -11,7 +11,7 @@ jobs: build: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: julia-actions/setup-julia@latest - name: Install dependencies run: | diff --git a/.github/workflows/julia-test-with-style.yml b/.github/workflows/julia-test-with-style.yml index a292c9550b..abc9942c53 100644 --- a/.github/workflows/julia-test-with-style.yml +++ b/.github/workflows/julia-test-with-style.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Julia setup uses: julia-actions/setup-julia@latest with: diff --git a/.github/workflows/python-test-with-style.yml b/.github/workflows/python-test-with-style.yml index 4c2764b244..5cf592c7cf 100644 --- a/.github/workflows/python-test-with-style.yml +++ b/.github/workflows/python-test-with-style.yml @@ -18,9 +18,9 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Python setup - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Python dependencies diff --git a/.github/workflows/python-wheels.yml b/.github/workflows/python-wheels.yml index dd4518087f..45e93f646a 100644 --- a/.github/workflows/python-wheels.yml +++ b/.github/workflows/python-wheels.yml @@ -23,13 +23,10 @@ jobs: matrix: # windows-2019, macos-11 os: [ubuntu-20.04] - steps: - - uses: actions/checkout@v4 - + - uses: actions/checkout@v5 - name: Build wheels uses: pypa/cibuildwheel@v2.11.3 - - uses: actions/upload-artifact@v4 with: path: ./wheelhouse/*.whl @@ -43,11 +40,9 @@ jobs: (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')) runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - + - uses: actions/checkout@v5 - name: Build sdist run: pipx run build --sdist - - uses: actions/upload-artifact@v4 with: path: dist/*.tar.gz @@ -66,7 +61,6 @@ jobs: # if `name: artifact` is omitted, the action will create extra parent dir name: artifact path: dist - - uses: pypa/gh-action-pypi-publish@v1 with: user: __token__ diff --git a/.github/workflows/release-notes.yml b/.github/workflows/release-notes.yml index a4fa213618..d653d7fe7d 100644 --- a/.github/workflows/release-notes.yml +++ b/.github/workflows/release-notes.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Check release notes run: | git fetch origin main diff --git a/.github/workflows/rust-documentation.yml b/.github/workflows/rust-documentation.yml index 4d6410548a..7170e2b2a1 100644 --- a/.github/workflows/rust-documentation.yml +++ b/.github/workflows/rust-documentation.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Rust setup uses: dtolnay/rust-toolchain@master with: diff --git a/.github/workflows/rust-test-with-style.yml b/.github/workflows/rust-test-with-style.yml index 6300c62064..684778a748 100644 --- a/.github/workflows/rust-test-with-style.yml +++ b/.github/workflows/rust-test-with-style.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Rust setup uses: dtolnay/rust-toolchain@master with: @@ -36,7 +36,7 @@ jobs: export CARGO_CEED_OPT_FLAGS="-g -O0 -fno-inline" cargo llvm-cov test --doctests --lcov --exclude-from-report backends/*,interface/*,gallery/*,tests/*,julia/*,python/* --output-path lcov.info - name: Codecov upload - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 if: ${{ runner.os == 'Linux' }} with: files: lcov.info @@ -52,7 +52,7 @@ jobs: steps: - name: Environment setup - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Rust setup uses: dtolnay/rust-toolchain@master with: From 45e500c69a72823bc541c2bcfdeb7a3e92f6a730 Mon Sep 17 00:00:00 2001 From: Jeremy L Thompson Date: Fri, 20 Mar 2026 09:44:44 -0600 Subject: [PATCH 12/12] ci - rust exclude folders on codecov action --- .github/workflows/rust-test-with-style.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rust-test-with-style.yml b/.github/workflows/rust-test-with-style.yml index 684778a748..ab890ba3d7 100644 --- a/.github/workflows/rust-test-with-style.yml +++ b/.github/workflows/rust-test-with-style.yml @@ -34,12 +34,13 @@ jobs: FC: gfortran run: | export CARGO_CEED_OPT_FLAGS="-g -O0 -fno-inline" - cargo llvm-cov test --doctests --lcov --exclude-from-report backends/*,interface/*,gallery/*,tests/*,julia/*,python/* --output-path lcov.info + cargo llvm-cov test --doctests --lcov --output-path lcov.info - name: Codecov upload uses: codecov/codecov-action@v5 if: ${{ runner.os == 'Linux' }} with: files: lcov.info + exclude: interface,gallery,backends,tests,examples token: ${{ secrets.CODECOV_TOKEN }} style: