coverage: integration mode — scope external module roots (reference_integration)
メンテナーはふだん 1 日以内に返信
@dcalavrezo-qorix がすでに取り組んでいます。
2026年8月27日 から。
評価
この issue はまだ評価されていません。
説明
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.
- 主要言語
- Rust
- スター
- 8
- フォーク
- 38
- 平均マージ
- 1日 2時間
- マージ済み PR(30日)
- 33
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
eclipse-score/tooling のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
eclipse-score/tooling#499 ·
メンテナーはふだん 1 日以内に返信
-
難易度 3/5 1〜2日 初心者へのやさしさ 48/100
eclipse-score/tooling#458 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
eclipse-score/tooling#452 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Migration path rst to trlc再び着手できるかも @antonkri が 51 日前に担当しましたが、オープン中のプルリクエストはありません。 オープン
eclipse-score/tooling#441 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
coverage: on-target (QNX) coverage support in the shared coverage module再び着手できるかも @dcalavrezo-qorix が 58 日前に担当しましたが、オープン中のプルリクエストはありません。 オープン
eclipse-score/tooling#427 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
eclipse-score/tooling の issue をすべて見る
似ている issue
-
RUSTSEC-2026-0348: Brotli certificate decompression can allocate up to 1 GiB before authenticationオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 60/100
-
難易度 1/5 1〜3時間 初心者へのやさしさ 62/100
-
core: Amount::from_str panics on values above 21M BTC instead of returning an error対応中かも @bhuvan-somisetty が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信
-
crate: spate-s3
難易度 2/5 半日 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信
-
write_iceberg ignores the table's write.parquet.compression-codec property対応中かも @YuangGao が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
Eventual-Inc/Daft#7606 ·
メンテナーはふだん 1 日以内に返信