[quality] test.yml runs vitest coverage but never publishes the report — add lcov/json-summary artifact and job summary
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ó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 78/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- github-actions, javascript
- Lĩnh vực
- ci-cd, testing-qa
Hướng nghiên cứu
Bắt đầu với .github/workflows/test.yml ở dòng 19 và kiểm tra step npm run test:coverage hiện có cùng các reporters trong vitest.config.mjs. Chạy lệnh coverage cục bộ để xác nhận các output coverage/ dự kiến, sau đó xác minh trong một lần chạy workflow main rằng các tệp lcov và json-summary được tải lên và bảng coverage xuất hiện trong phần tóm tắt của job build-test.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Finding
.github/workflows/test.yml:19 runs npm run test:coverage on every push and PR, and vitest.config.mjs gates it with thresholds (85/83/91/85). But the report is never published: reporters are text + text-summary only, so the numbers exist solely in the job log. Nothing is uploaded as an artifact, written to the job summary, or sent to a coverage service.
Consequences:
- A PR that drops coverage from 96% to 86% passes green with no visible signal — the threshold gate only fires ~10 points below the current floor (the raise in #202 narrows but does not close that window).
- No coverage trend across
main; the "did this PR add or remove coverage" question requires opening the raw log of both runs. - Coverage-gap analysis (this lane's and any maintainer's) has to be regenerated locally each time rather than read from CI.
Evidence, main @ 187c5e3 (run 35910387179, green): npm ci && npm run test:coverage → All files | 96.35 stmts | 94.55 branch | 99.14 funcs | 96.16 lines. The prow / prow check on PRs dogfoods the built action but emits no coverage data, so there is no end-to-end coverage source to publish either — this is purely a unit-coverage reporting gap.
Recommendation
Emit machine-readable coverage from the existing step and publish it as an artifact plus a job-summary table. Uses CLI reporter overrides so vitest.config.mjs is untouched (that file is currently held by #202).
Exact replacement for .github/workflows/test.yml — replace line 19 ( - run: npm run test:coverage) with:
- run: >-
npm run test:coverage --
--coverage.reporter=text
--coverage.reporter=text-summary
--coverage.reporter=lcov
--coverage.reporter=json-summary
- name: Coverage summary
if: always()
run: |
[ -f coverage/coverage-summary.json ] || exit 0
node -e '
const t = require("./coverage/coverage-summary.json").total;
const row = k => `| ${k} | ${t[k].pct}% | ${t[k].covered}/${t[k].total} |`;
console.log("### Coverage (`vitest --coverage`)\n\n| Metric | % | Covered |\n|---|---|---|");
for (const k of ["statements","branches","functions","lines"]) console.log(row(k));
' >> "$GITHUB_STEP_SUMMARY"
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: always()
with:
name: coverage-${{ github.sha }}
path: coverage/
retention-days: 14
Notes for the maintainer applying this:
--coverage.reporter=is repeatable and replaces the config'sreporterarray for that invocation, sotextandtext-summaryare restated to keep the existing log output.coverage/is already git-ignored (git check-ignore coverage→ match), so the latergit status --porcelain dist/drift check is unaffected.- The
lcovoutput is what a service such as Codecov consumes if the project ever wants one; no service is proposed here. - Pin the
upload-artifactSHA against the current v4 release before applying; the SHA above is v4.6.2 at time of filing.
Why no PR: the change is entirely inside .github/workflows/. This agent's App token is minted at the contributor tier without the Workflows permission, so GitHub rejects any push touching that directory. It needs a human or an ISSUES_PRS_MERGE-tier agent to land. No part of the fix lies outside .github/workflows/ (adding reporters to vitest.config.mjs would work too, but that file is occupied by #202, and the CLI override above makes it unnecessary).
Completion criteria
-
test.ymlemitslcov+json-summarycoverage and uploadscoverage/as an artifact - Coverage table appears in the
build-testjob summary on amainrun
Priority
- Impact: low — coverage is high today; this is visibility, not a correctness gap
- Effort: low
Filed by quality agent (hold-gated mode)
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5q9t | SHA: unknown
— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88
- Ngôn ngữ chính
- TypeScript
- Star
- 135
- Fork
- 24
- Merge trung bình
- 1 ngày 6 giờ
- Pull request đã merge (30 ngày)
- 232
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của cncf/prow-github-actions
-
agent/quality kind/cleanup stage/045-needs-decision testing
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 15/100
cncf/prow-github-actions#672 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[quality] chart: CronJob name exceeds the 52-character API limit for release names of 32+ characters; no test pins resource-name lengthCó thể đã có người làm @mrbobbytables đã nhận 5 ngày trước. Đang mởagent/quality kind/cleanup stage/040-covered-by-pr testing
Độ khó 3/5 Nửa ngày Mức phù hợp với người mới 50/100
cncf/prow-github-actions#667 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
🐝 Hive Advisory ReportĐang mởhive/advisory kind/cleanup
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 15/100
cncf/prow-github-actions#170 · 9 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của cncf/prow-github-actions
Issue tương tự
-
twilio.webhook() rejects valid requests when the query string has an encoded `?` and a `+` spaceĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
twilio/twilio-node#1232 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Tiling managers are not destroyed in disable(), so window-created handlers keep running (Gio.Settings constructed without schema)Có thể đã có người làm @gnacho đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
domferr/tilingshell#641 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
🐛 bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
LibreChat-AI/LibreChat#17887 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
`isCI` is `true` inside a running Google Cloud Run service (also Railway, Render, Deno Deploy)Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100