coverage: integration mode — scope external module roots (reference_integration)
@dcalavrezo-qorix ci sta già lavorando.
Dal 27/8/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Motivation
eclipse-score/reference_integration measures coverage across the integrated modules (@score_communication, @score_persistency, @score_orchestrator, @score_kyron, …) at the known_good.json pins — today via one rust_coverage_report per module (rust_coverage/BUILD, driven by scripts/quality_runners.py), assembled into a hand-written step summary.
That flow is built on the rust_coverage_report rule removed in score_tooling 2.x, so the repo cannot upgrade score_tooling until the shared pipeline can do the same job. And the job is genuinely different from module CI: one aggregated report over all modules, including coverage produced by the integration tests (FIT) that exercise modules together — a signal no single module CI can produce.
Problem
@score_tooling//coverage is deliberately in-workspace only; in an integration repo all production code is external, so the scope is empty apart from local showcases. Concretely:
| Component | In-workspace assumption |
|---|---|
coverage_scope.bzl aspect |
skips files/archives under external/; label check str(target.label).startswith("@@") excludes external targets |
reporter.py load_baseline_objects() |
resolves manifest entries against _main rlocations |
reporter.py source resolution |
--path-equivalence=/proc/self/cwd/,<workspace_root> — external/<repo>/… covmap paths don't resolve under the workspace root (sources live in the output base) |
merger.py get_object_files_from_manifest() |
skips every external/ manifest entry to ignore the Rust toolchain's llvm binaries — would also skip external modules' test binaries |
justify.py |
scans --source-root (the workspace) for COV_JUSTIFIED markers |
coverage_summary.py |
directory rollup keyed by path prefix — external paths need repo-aware grouping |
Proposal: opt-in "integration mode"
- Scope over external roots:
score_coverage_scope(deps = ["@score_persistency//src/rust/rust_kvs", …], include_external_repos = ["score_persistency", …])(exact API TBD). The aspect collects sources/archives from the listed repos (transitive, same test/mock exclusion by traversal), emitting allowlist entries in exec-root form (external/<canonical>/…) and baseline manifest entries with the correct rlocation prefix per repo. - Reporter: resolve sources through the exec root (which contains
external/<repo>/…), not the workspace root — for both llvm-cov HTML rendering and LCOV/HTML path relativization (report paths as<repo>/<path>). - Merger: replace the blanket
external/skip with a narrower rule (skip toolchain repos only — e.g. entries whose repo provides the llvm tools — or detect thellvm-cov/llvm-profdatabasenames), so external modules' instrumented test binaries are collected. - Justifications: allow multiple
--source-roots (workspace + listed external repo roots) so modules' ownCOV_JUSTIFIEDmarkers and YAMLs are honored; the integration repo itself may carry none and gate on raw. - Summary: group the directory rollup by
<repo>first for external files. - Fold in the
cc_binarygap found in eclipse-score/time#186:cc_binaryexposes noCcInfo, so its own srcs (main.cpp) are not collected — add a rule-kind branch analogous to the existingCrateInfobranch forrust_binary(collect srcs + the coverage-built executable as baseline object). - Integration test: extend
coverage/integration_tests/with a second local module consumed vialocal_path_overrideand scoped externally, asserting external files appear (incl. exact 0% baselines) and in-workspace behavior is unchanged when the option is off.
Sharp edges to settle in the design first
- Canonical repo names (
score_persistency+) vs apparent names in allowlist/manifest/rlocation paths — must not leak Bazel-version-specific canonical forms into reports. - Exec-root source availability: sandboxed builds don't materialize every source under
execroot/_main/external; verify llvm-covshowcan render external sources (fallback: resolve via the output baseexternal/tree). - Two configurations of the same external library (host vs exec) — the scope transition applies
collect_code_coverage; confirm archives come from the coverage-instrumented configuration only. - QNX/on-target remains out of scope (#427).
Acceptance
- reference_integration replaces
rust_coverage/with atools/coverage/scope over the external module roots;bazel coverage --config=llvm_covover the module tests + FIT produces one report with per-repo rollups, exact 0% for untested external files, and the run-page summary; score_tooling can be bumped to 2.x there. - Existing consumers see no change unless they opt in.
- Default (non-integration) integration test still green.
- Lingua principale
- Rust
- Stelle
- 8
- Fork
- 37
- Merge medio
- 1g 2h
- PR unite (30g)
- 23
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di eclipse-score/tooling
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
eclipse-score/tooling#458 · 1 commento ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
eclipse-score/tooling#452 · 1 commento ·
-
Migration path rst to trlc Aperta
eclipse-score/tooling#441 · 1 assegnatario ·
-
eclipse-score/tooling#427 · 1 assegnatario ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
eclipse-score/tooling#338 ·
Tutte le issue di eclipse-score/tooling
Issue simili
-
bug github_actions
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
registrystack/registry-stack#1393 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
longbridge/gpui-kit#3223 ·
-
bug engine
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
rocky-data/rocky#2181 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
oasisprotocol/oasis-sdk#2523 ·
-
[indexer] [QA] Add a focused test for the new NonRetryableError / assertSocketAlive() behavior. Apertabot:ai-assisted component:indexer QA-roadmap status:untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
midnightntwrk/midnight-indexer#1557 ·