Skip to content

Migrate coverage pipeline to score_coverage 0.3.1 - #338

Merged
rmaddikery merged 4 commits into
mainfrom
dcalavrezo_score_coverage
Oct 2, 2026
Merged

rmaddikery merged 4 commits into
mainfrom
dcalavrezo_score_coverage

Conversation

@dcalavrezo-qorix

@dcalavrezo-qorix dcalavrezo-qorix commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Rollout of the qualified S-CORE coverage tool, score_coverage 0.3.1 (release notes), tracked in eclipse-score/score#3258. Linux LLVM coverage only; QNX on-target coverage is not part of this PR.

What

The coverage pipeline this repository used from @score_tooling//coverage moved to its own module. This PR switches the labels one-to-one (defs.bzl, merger, generate_coverage_html, the death-test feature), adds score_coverage 0.3.0 as a dev dependency and bumps rules_rust to 0.68.2-score, which the module requires. Scope (quality/coverage/BUILD), the coverage:llvm_cov config and the workflow are otherwise unchanged. The artifact keeps its name, so docs.yml is unaffected.

Verification

Local, bazel coverage --config=llvm_cov //score/... --build_tests_only (37 tests), old pipeline vs this branch, LCOV compared record by record:

Check Result
Files in report 99 → 117 (18 added, see below)
Covered/uncovered status of the 99 common files identical for 98; 1 file differs in a thread-timing dependent region (below)
Raw line coverage 85.58 % → 84.63 % (the added headers)
Raw branch coverage 78.65 % → 78.70 %
HTML index 118 links, 0 dead, one row per file
bazel build --nobuild --lockfile_mode=error //... pass

Added files. Datarouter headers under score/datarouter/include/... and score/datarouter/src/configuration/dynamic_config/..., plus score_log_bridge_cpp_init/ffi.rs. The old pipeline dropped headers reached through include directories (eclipse-score/coverage_tool#5, fixed in 0.2.0); they are now measured, which is why the line percentage goes down while nothing lost coverage.

Status difference. score/datarouter/src/daemon/message_passing_server.cpp lines 293–313: the "peer closed while ticking" path, between LCOV_EXCL markers. It depends on thread timing and was executed in the second run only.

New in the archive. unmapped_files.txt lists in-scope files that have no coverage data at all, categorised: 1 compiled-without-code, 25 declaration-only headers, 19 no-data. Among the no-data entries: score_log_bridge/src/lib.rs (only mod and use lines, no executable code), main_nonadaptive.cpp and log_entry_deserialization_visitor.cpp (in scope, no test executes them), and config/type headers. Worth a look by the module owners; none of these had coverage before either.

Update: bumped to 0.3.1, which requires the explicit --instrumentation_filter=^//score[/:] this branch sets. Bazel guesses the filter from the packages of the test targets; libraries tested from a test subpackage were otherwise compiled without counters or, on QNX, lost their counters (score/os showed 13 % instead of 80 % in the first QNX report). See the 0.3.1 release notes.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

License Check Results

🚀 The license check job ran with the Bazel command:

bazel run --lockfile_mode=error //:license-check

Status: ⚠️ Needs Review

Click to expand output
[License Check Output]
Extracting Bazel installation...
Starting local Bazel server (8.6.0) and connecting to it...
INFO: Invocation ID: 1d4cec2b-e4db-4c90-952f-21ba6cf34d58
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Loading: 
Loading: 4 packages loaded
Loading: 4 packages loaded
    currently loading: 
WARNING: Target pattern parsing failed.
ERROR: Skipping '//:license-check': no such target '//:license-check': target 'license-check' not declared in package '' defined by /home/runner/work/logging/logging/BUILD
ERROR: no such target '//:license-check': target 'license-check' not declared in package '' defined by /home/runner/work/logging/logging/BUILD
INFO: Elapsed time: 16.751s
INFO: 0 processes.
ERROR: Build did NOT complete successfully
ERROR: Build failed. Not running target

@dcalavrezo-qorix

Copy link
Copy Markdown
Contributor Author

@rmaddikery @antonkri could you review this one, please? It moves the coverage pipeline to the qualified score_coverage 0.3.1 (rollout tracked in eclipse-score/score#3258). The before/after comparison of the coverage data is in the description and CI is green. The coverage workflow is waiting on the manual approval gate as well. Thanks!

The LLVM coverage pipeline under @score_tooling//coverage moved to its
own qualified module, score_coverage (eclipse-score/coverage_tool,
TCL LOW). Switch the labels one-to-one, add the module as a dev
dependency and bump rules_rust to 0.68.2-score, which the module
requires. Scope, config and workflow are otherwise unchanged; the
report archive keeps its name for docs.yml.

Local comparison, //score/... (37 tests), old pipeline vs this commit,
LCOV compared record by record:

  files in report        99 -> 117 (18 headers added, see below)
  identical status       98 of 99 common files
  raw line coverage      85.58 % -> 84.63 %
  raw branch coverage    78.65 % -> 78.70 %

The 18 added files are datarouter headers under include/ and the
score_log_bridge_cpp_init ffi.rs, which the old pipeline dropped
(headers reached through include directories); each has one row in
the HTML index and its link resolves. The lower line percentage comes
from those headers. The one status difference,
message_passing_server.cpp lines 293-313, is the peer-closed-while-
ticking path between LCOV_EXCL markers, which depends on thread timing
and was hit in the second run only.

Tracking: eclipse-score/score#3258
Signed-off-by: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com>
Bazel guesses --instrumentation_filter from the packages of the test
targets and strips only a trailing /tests; a library tested from a test/
subpackage is compiled without counters unless one of its deps is
instrumented. Name the whole module, as the score_coverage manual now
requires (0.3.1).

Signed-off-by: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com>
0.3.1 requires the explicit --instrumentation_filter this branch already
sets, and warns when a report shows the pattern of a library tested from
a test/ subpackage without data.

Signed-off-by: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com>
Signed-off-by: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com>
@rmaddikery
rmaddikery force-pushed the dcalavrezo_score_coverage branch from c76d831 to 0e9ff65 Compare October 2, 2026 10:26
@rmaddikery
rmaddikery deployed to workflow-approval October 2, 2026 10:27 — with GitHub Actions Active
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

The created documentation from the pull request is available at: docu-html

@rmaddikery
rmaddikery merged commit b10d5bc into main Oct 2, 2026
23 checks passed
@rmaddikery
rmaddikery deleted the dcalavrezo_score_coverage branch October 2, 2026 10:56

This branch was successfully deployed

1 active deployment
workflow-approval — 0e9ff65f Deployed Oct 2, 2026 by rmaddikery via run-tests / coverage approval gate #1265
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants