Skip to content

Update dependency score_coverage to v0.3.1 - #716

Merged
NicolasFussberger merged 1 commit into
mainfrom
renovate/score_coverage-0.x
Sep 30, 2026
Merged

NicolasFussberger merged 1 commit into
mainfrom
renovate/score_coverage-0.x

Conversation

@eclipse-score-bot

@eclipse-score-bot eclipse-score-bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Type Update Change
score_coverage bazel_dep minor 0.2.0 → 0.3.1

Release Notes

eclipse-score/coverage_tool (score_coverage)

v0.3.1

What's Changed

Full Changelog: eclipse-score/coverage_tool@v0.3.0...v0.3.1

In plain words

Libraries tested from a test subpackage are measured on QNX. The first
QNX report of baselibs showed score/os at 13 % where Linux showed 80 %. The
tests had run; their counters were thrown away on the way back. Bazel decides
which packages take part in a coverage run by guessing from where the tests
are, and it does not look one directory up from a test subpackage. On Linux
our own merger ignores that guess; on QNX Bazel's own collector obeys it. The
fix is one line in the coverage config, --instrumentation_filter=^//score[/:],
now required by the user manual for both backends. The reporters warn when a
report shows the pattern (files without data in a directory that is tested
from test/ or tests/), and the integration workspace contains such a
library so the case stays covered.

Details for integrators

  • Add --instrumentation_filter=^//<root package>[/:] to the
    coverage:llvm_cov and QNX configs (user manual, steps 4 and 4b). Without
    it a library without an instrumented direct dependency is compiled without
    counters on both backends, and on the gcov backend every library outside
    the guessed filter loses its counters.
  • New warning in both reporters (tool_req__coverage_instrumentation_hint,
    potential error ERR-13); known_problems and the architecture's design
    decisions corrected: the filter is not irrelevant, it must name the module.
  • Integration workspace: //lib:cross_pkg tested from //lib/test, in both
    goldens; a gcov run with the guessed filter checks the warning.
  • Correction to the 0.3.0 notes: headers vendored from an external repository
    are measured on the gcov backend once the vendoring target is inside
    the instrumentation filter. The 0.3.0 statement described the guessed
    filter, which left the vendoring target uninstrumented. The gcov golden of
    the integration workspace now contains the vendored header.

Upgrading

bazel_dep(name = "score_coverage", version = "0.3.1"), then add the
instrumentation filter line to every coverage config. Reference changes:
baselibs #​626 and communication #​1171 (QNX configs), logging #​338 and
lifecycle #​715 (LLVM config).

v0.3.0: QNX target support

In plain words

Coverage of tests that run on QNX. Until now the tool measured only what
runs on the Linux host. QNX's compiler (QCC) is GCC-based and produces gcov
counters instead of LLVM's coverage mapping, and the tests run inside a QEMU
virtual machine. This release adds a second backend: the QNX runner of
score_qnx_unit_tests brings the counters back, Bazel's own collector turns
them into per-test data, and the new gcov reporter produces the same report
as on Linux: the same HTML archive, the same LCOV file, the same job summary,
the same justifications and gate. A module declares one more reporter target
(backend = "gcov") and one bazelrc block; see the user manual, step 4b.

What the QNX report does not contain: Rust sources (rustc cannot produce gcov
counters; they are listed as not instrumentable and measured by the Linux
run) and headers a module vendors from an external repository (Bazel's
collector drops them; also measured by the Linux run). gcov counts lines
differently from LLVM (no unused inline functions, no closing braces), so the
two reports are compared per file, not merged.

Validated with the S-CORE GCC toolchain on Linux, which takes exactly the same
collection path as QCC on QNX, against a hand-derived ground truth, and on
real QNX targets in the baselibs CI (615 files, 81.6 % raw line coverage).
The QNX transport itself is the one communication has used since 2026.

Details for integrators
  • New score_coverage/gcov_reporter.py (//:gcov_reporter): sums per-test
    LCOV records, applies the scope, adds a zero-coverage baseline from the
    .gcno notes of in-scope translation units, renders HTML and summary with
    gcovr 8.6 (new pip dependency), writes unmapped_files.txt with the new
    not-instrumented category.
  • score_coverage_reporter gained backend and gcov; llvm_cov /
    llvm_profdata are required only for the LLVM backend. Existing consumer
    BUILD files need no change.
  • score_coverage_scope writes <name>_gcno.txt and exports the gcno /
    gcno_files output groups.
  • Give the gcov reporter target tags = ["manual"] so bazel build //...
    on a Linux host does not fetch the QNX SDP.
  • Integration workspace: coverage:gcov config with the S-CORE GCC
  • Give the gcov reporter target tags = ["manual"] so bazel build //...
    on a Linux host does not fetch the QNX SDP.
  • Integration workspace: coverage:gcov config with the S-CORE GCC
    toolchain, expected_lcov_gcov.dat ground truth, gcov checks in the
    end-to-end script.
  • New requirements tool_req__coverage_scope_gcno,
    tool_req__coverage_backend_select, tool_req__coverage_gcov_merge,
    tool_req__coverage_gcov_baseline, tool_req__coverage_gcov_html;
    potential errors ERR-11 and ERR-12; constraint CSTR-11.
Fixes
  • Justifications are applied correctly on gcovr pages: the status detection
    in effective_coverage.py is bounded to one table row (it could previously
    read the status of the next line).
  • The self-coverage gate no longer double counts lines and branches when two
    test targets import the same module.
  • The gcov reporter sums all path variants of one file (declared path and
    _virtual_includes path) before selecting the in-scope files, so a header
    exercised by several tests keeps every test's counts.
Upgrading

bazel_dep(name = "score_coverage", version = "0.3.0"). No change needed for
Linux-only modules. For QNX, follow user manual step 4b (reporter target,
bazelrc block, CI job); baselibs PR #​626 and communication PR #​1171 are the
reference integrations.

Two things to settle before publishing. The docs still say "0.3.0 (unreleased)" and the date needs setting when you tag. The baselibs QNX numbers in the validation sentence come from the green baselibs job on PR #​626, so drop that sentence if you would rather not cite a draft PR.

What's Changed

Full Changelog: eclipse-score/coverage_tool@v0.2.0...v0.3.0


  • If you want to rebase/retry this PR, check this box

This PR was generated by #infrastructure automation. Contact us if you have any questions or feedback.

@github-actions

Copy link
Copy Markdown
Contributor

Documentation preview for this pull request is available at:
pr-716: https://eclipse-score.github.io/lifecycle/pr-716/

@eclipse-score-bot eclipse-score-bot changed the title Update dependency score_coverage to v0.3.0 Update dependency score_coverage to v0.3.1 Sep 29, 2026
@eclipse-score-bot
eclipse-score-bot force-pushed the renovate/score_coverage-0.x branch from 6d1b102 to e30816a Compare September 29, 2026 14:08
@NicolasFussberger
NicolasFussberger added this pull request to the merge queue Sep 30, 2026
Merged via the queue into main with commit 4890e8f Sep 30, 2026
29 of 30 checks passed
@NicolasFussberger
NicolasFussberger deleted the renovate/score_coverage-0.x branch September 30, 2026 05:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants