单测覆盖率

testing:coverage

通过单测结果报告,计算单测覆盖率结果,并上报徽章。

# 适用事件

所有事件

# 全量覆盖率

coverage coverage coverage coverage

从本地覆盖率报告文件解析而来,目前可识别以下格式的报告:

  • json(js)(推荐使用)
  • json-summary
  • lcov(推荐使用)
  • jacoco
  • golang

# 增量覆盖率

coverage-pr coverage-pr coverage-pr coverage-pr

变更行对应的单测覆盖率,仅支持 pull_requestpull_request.target 事件

# 参数

# pattern

  • type: String
  • required: false

glob 格式,指定覆盖率报告文件位置,相对于当前工作目录。 缺省时,将尝试查找当前目录(包括子目录)下的以下文件:coverage.json、jacoco*.xml、lcov.info、*.lcov。

# lines

  • type: Number
  • required: false

指定全量覆盖率红线,判断如果全量覆盖率百分比小于该值,阻断工作流退出流水线。

# diffLines

  • type: Number
  • required: false

指定增量覆盖率红线,判断如果全量覆盖率百分比小于该值,阻断工作流退出流水线。 pull_requestpull_request.target 事件支持计算增量覆盖率结果,其他事件只计算全量覆盖率。

# allowExts

  • type: String
  • required: false

参与覆盖率计算的代码文件类型白名单,逗号分隔, 如:.json,.ts,.js。 缺省时报告中的文件都会参与计算。

# lang

  • type: String
  • required: false

当覆盖率结果报告目标格式为 golang 时,请指定此参数 为 go,否则会出现计算误差。其他情况可忽略该参数。

# breakIfNoCoverage

  • type: Boolean
  • required: false

没有找到覆盖率报告文件时,是否抛出错误终止流程。

# 输出结果

{
    // 代码行覆盖率,例如 100,计算出错时值为 NA
    lines,
    // 代码增量行覆盖率,例如 100,计算出错时值为 NA
    diff_pct,
}

# 配置样例

#.cnb.yml
main:
  push:
    - stages:
        - name: coverage
          type: testing:coverage
          options:
            breakIfNoCoverage: false
          exports:
            lines: LINES
        - name: result
          script: echo $LINES