Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

feat: merge lcov reports from sharded test runs

Đang mở
#1,754 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
42/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
dart
Lĩnh vực
cli, testing-qa

Hướng nghiên cứu

Start in lib/src/cli/test_cli_runner.dart, reading CoverageMetrics.fromLcovRecords and MinCoverageNotMet to understand the existing coverage parsing and reporting flow. Review the sharding behavior from #1707 and the requirements for combining records, path handling, configuration, and output. Done means a command merges multiple lcov files, applies the existing coverage checks and very_good.yaml fallback, writes the result, and includes the requested documentation and CI updates.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

feature

Description

#1707 adds --shard-index and --total-shards to very_good test and very_good dart test, so a suite can be split across CI runners with a strategy.matrix. Sharding and --min-coverage don't mix well yet. Each shard runs only part of the suite, so its coverage/lcov.info reflects only the code that slice touches. With --collect-coverage-from all, _enhanceLcovWithUntestedFiles also adds every file the shard never loaded at 0%. A shard's percentage is always well below the real number, and a threshold check on it fails healthy builds.

#1707 handles this by rejecting an explicit --min-coverage when sharding. The error tells users to collect coverage per shard with --coverage, merge the lcov reports, and enforce the threshold once in a separate job. The CLI has no way to do those last two steps today, so teams have to reach for lcov or a custom script. A threshold set in very_good.yaml is also ignored silently when sharding, so teams that rely on it lose enforcement without being told.

This issue proposes that the CLI merge the shard reports and run the coverage checks on the merged result.

A possible shape:

jobs:
  test:
    strategy:
      matrix:
        shard: [1, 2, 3]
    steps:
      - run: very_good test --coverage --shard-index ${{ matrix.shard }} --total-shards 3
      - uses: actions/upload-artifact@v4
        with:
          name: coverage-${{ matrix.shard }}
          path: coverage/lcov.info

  coverage:
    needs: test
    steps:
      - uses: actions/download-artifact@v4
      - run: very_good test coverage merge coverage-*/lcov.info --min-coverage 100

The command name and placement are open for discussion. It could live under very_good test or as a new top-level command.

Things the merge has to get right:

  • Union hits, don't average percentages. A line counts as covered when any shard hit it. For each source file, sum the per-line hit counts across reports and recompute totals from the merged lines.
  • 0% records from --collect-coverage-from all must merge cleanly. A file one shard added at 0% and another shard actually covered should end up covered.
  • Path consistency. Reports from different runners have to agree on each file's path. If SF: entries can be absolute and runners check out to different directories, paths need normalizing relative to the project root.
  • Reuse the existing checks. --min-coverage, --exclude-coverage and --show-uncovered should behave exactly as they do in a normal run. CoverageMetrics.fromLcovRecords and MinCoverageNotMet in lib/src/cli/test_cli_runner.dart already do the parsing and reporting, so the merge only needs to feed them a combined set of records.
  • Fall back to very_good.yaml. The merge step should pick up the threshold from very_good.yaml the same way very_good test does, which closes the silent-skip gap for sharded runs.
  • Write the merged report to disk so it can still go to Codecov or be rendered with genhtml.

#804 asked for something close to this for multi-package apps run with -r, where each package writes its own lcov file. It was closed without a merge feature. The same merge logic would serve both cases, so it's worth designing with both in mind.

Requirements

  • A command merges two or more lcov files into a single report.
  • Hit counts are combined per file and per line, so a line covered in any input counts as covered.
  • --min-coverage, --exclude-coverage and --show-uncovered work on the merged report and match the output of a normal very_good test run.
  • The minimum coverage threshold falls back to very_good.yaml when the flag is not passed.
  • The merged report is written to a configurable output path.
  • The --min-coverage usage error added in #1707 points to the new command.
  • Docs describe the sharded CI workflow from start to finish.
  • All CI/CD checks are passing.
  • There is no drop in the test coverage percentage.

Additional Context

  • #1707: sharding PR that rejects --min-coverage and suggests merging reports
  • #1538: original sharding request
  • #804: earlier request for a single coverage report across multi-package runs
Ngôn ngữ chính
Dart
Star
2.4k
Fork
244
Merge trung bình
21 giờ 32 phút
Pull request đã merge (30 ngày)
33

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của VeryGoodOpenSource/very_good_cli

Tất cả issue của VeryGoodOpenSource/very_good_cli

Issue tương tự

Thêm issue về Dart

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.