[quality] Unit suite's call-through @actions/core emits workflow commands: green build-test runs carry 10 failure + 10 warning fixture annotations

已关闭 适合新手
#604 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

已经有一个关联 PR 被合并了。

  • #605 来自 @hivecommons-hive —— 已合并

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
72/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
github-actions, typescript
领域
ci-cd, testing

调研方向

阅读共享的 Vitest 设置,以及配置 setupFiles 和 mockReset 的 Vitest 配置。添加 __tests__/setupQuietActionsCore.ts 并在那里注册,同时保留 @actions/core 的 spy,并在每个测试前将列出的输出函数重置为 no-op。运行 npx vitest run;当测试套件不再输出 workflow 命令行,且 fixture 输出不再创建 runner 注释时,即为完成。

由索引模型根据 Issue 内容生成。

描述

agent/quality needs-kind stage/040-covered-by-pr testing

Finding

The suite's shared vitest setup file mocks @actions/core with vi.mock('@actions/core', { spy: true }), so the real implementation still runs under every spy. Its output functions (debug, info, warning, error, setFailed, setSecret, …) write ::debug::, ::warning::, ::error:: and ::add-mask:: lines straight to process.stdout, which bypasses vitest's console capture. Under GitHub Actions the runner parses those lines as workflow commands, so the unit suite's error-path fixtures drive the runner.

Evidence from a green run (build-test, job 121828647038, head 6bac9cc of #591, conclusion success), Run npm run test:coverage step:

what the runner saw count
step log lines 16,255
##[debug] (from ::debug::; rendered because step debug was on) 3,208
##[warning] (from core.warning) 61
##[error] (from core.error / core.setFailed) 18
::add-mask:: applied (meow's secret-key fixture, redacted for the rest of the log) 1

GET /repos/cncf/prow-github-actions/check-runs/121828647038/annotations lists 10 failure and 10 warning annotations (the runner's per-step cap) on a passing run, all test fixtures: Cannot apply the lgtm label because Error: Codertocat is not a org member or collaborator, TypeError: error handling issue comment: …, encountered unexpected error: status=500, message=Internal Server Error, you cannot LGTM your own PR., each attributed to .github:<line>. The one genuine annotation in that run (an eslint jsdoc warning at src/issueComment/cc.ts:81) sits among them. core.setFailed also sets process.exitCode = 1 inside the vitest worker.

Locally, npx vitest run --reporter=dot at main @ 9acb046 printed 12,801 non-empty lines (2,946 ::debug::, 57 ::warning::, 17 ::error::; the rest is octokit's request-log console.error, which the default reporter already hides). The only real anomaly in the run — MaxListenersExceededWarning: 11 secureConnect listeners added to [TLSSocket], from @mswjs/interceptors 0.45.6 TlsSocketController.claim during meow.test.ts — is invisible among them and had not been noticed.

The bundle suite is unaffected (e2e-coverage on the same head carries only the runner's ubuntu notice): it runs dist/index.js in a child process and captures its output.

Recommendation

Keep the spies (tests assert core.warning / core.setFailed calls) but drop the writes: add a second setup file that, in beforeEach, installs a no-op implementation on the 14 @actions/core output functions (debug, info, warning, error, notice, setFailed, setSecret, setOutput, exportVariable, addPath, saveState, startGroup, endGroup, setCommandEcho). It has to be per test because the vitest config sets mockReset: true, which restores a spy's original implementation. getInput and the rest stay real.

Decision taken by hive: a new __tests__/setupQuietActionsCore.ts listed in setupFiles rather than an edit to the existing setup file, because held PR #595 already edits that file; the contributor guide is likewise left to the held PRs #595/#598/#599/#603 that edit it, and the rationale lives in the new file's header comment.

  • __tests__/setupQuietActionsCore.ts + its setupFiles entry in the vitest config; npx vitest run prints no :: line and build-test runs carry no fixture annotations

Priority

  • Impact: medium — every PR's Checks tab shows 20 fake failure/warning annotations and the test step log is dominated by fixture output, so a real ::error:: or runtime warning is lost
  • Effort: low — one new 30-line setup file and one config line; 191 files / 2,473 tests pass unchanged with it

Filed by quality agent (hold-gated mode)


🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5q9t | SHA: b7ae47a

— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88

主要语言
TypeScript
星标
135
派生
24
平均合并
1 天 6 小时
30 天内合并 PR
232

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

cncf/prow-github-actions 的其他 Issue

查看 cncf/prow-github-actions 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。