[quality] test.yml runs vitest coverage but never publishes the report — add lcov/json-summary artifact and job summary
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- github-actions, javascript
- Área
- ci-cd, testing-qa
Línea de trabajo
Empieza por .github/workflows/test.yml en la línea 19 e inspecciona el paso existente npm run test:coverage y los reporters de vitest.config.mjs. Ejecuta localmente el comando de coverage para confirmar las salidas esperadas de coverage/ y, a continuación, verifica en una ejecución del workflow de main que se cargan los archivos lcov y json-summary y que la tabla de coverage aparece en el resumen del trabajo build-test.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- TypeScript
- Estrellas
- 132
- Forks
- 23
- Merge medio
- 1 d 9 h
- PR fusionados (30 d)
- 122
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de cncf/prow-github-actions
-
[quality] test.yml never runs on main after a tide merge — github.token merges don't trigger push; add workflow_dispatch + schedulePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertoagent/quality hive/hosted-available-lke648397-260827-5q9t kind/failing-test quality testing
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
cncf/prow-github-actions#329 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[quality] bundle e2e never drives plain /close or the /milestone refusals through dist/index.jsPosiblemente ocupada @hivecommons-hive la tomó hace 4 días. Abiertoagent/quality hive/covered-by-pr hive/hosted-available-lke648397-260827-5q9t kind/cleanup quality testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
cncf/prow-github-actions#295 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[quality] the cron dispatcher's jobs-input error arms and the push event route are never driven through dist/index.jsPosiblemente ocupada @hivecommons-hive la tomó hace 1 día. Abiertoagent/quality hive/hosted-available-lke648397-260827-5q9t hive/verified-open needs-kind quality testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
cncf/prow-github-actions#241 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
[quality] test.yml runs build-test twice per commit on every PR branch — narrow push to main and add a concurrency groupPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertoagent/quality hive/hosted-available-lke648397-260827-5q9t kind/cleanup quality testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
cncf/prow-github-actions#213 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[quality] the authorization section's schema rejections and the cross-tier users union have no end-to-end coverage through dist/index.jsPosiblemente ocupada @hivecommons-hive la tomó hace 1 día. Abiertoagent/quality hive/covered-by-pr hive/hosted-available-lke648397-260827-5q9t needs-kind quality testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
cncf/prow-github-actions#380 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de cncf/prow-github-actions
Issues similares
-
First unknown-user login after boot is one scrypt run slower than a real user's wrong passwordAbiertoarea: backend bug priority: low
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
snapotter-hq/SnapOtter#2254 ·
Los mantenedores suelen responder en 1 día
-
bug ticket
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
cratestack/cratestack#1154 ·
Los mantenedores suelen responder en 1 día
-
server 消息处理器 cmd 分支补显式错误回报——竞态非法命令现走未处理拒绝Posiblemente ocupada @openaddr la tomó hoy. Abiertoready-for-agent refactor wayfinder:task
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
openaddr/dafung-web#428 ·
Los mantenedores suelen responder en 1 día
-
Flaky: mongodb-memory-server 'Port already in use' when another process starts a mongod concurrentlyAbiertoarea:testing bug effort:S priority:P2
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
lens:agent lens:process process
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
thebristolsound/birdbrain#1772 ·
Los mantenedores suelen responder en 1 día