【问题标题】:Force coverage increase in gitlab PRsgitlab PR 中的强制覆盖率增加
【发布时间】:2019-06-29 18:35:10
【问题描述】:

为了通过要求对托管在 gitlab 上的 EmberJS 项目的每个拉取请求进行单元测试来增加测试覆盖率,我希望管道如果覆盖率没有增加则失败

我可以使用istanbul 获得覆盖率输出,并使用以下正则表达式正确显示覆盖率徽章:

并使用这个gitlab-ci.yml

image: sergiolepore/ember-cli

before_script:
  - yarn --ignore-engines
  - bower --allow-root install

"Ember Unit Tests":
  script:
    - COVERAGE=true npm test -- --filter=Unit
    - grep -o '"pct":\d*\.\d*' coverage/coverage-summary.json | head -1

如果 PR 中的覆盖率降低,我如何让下一个管道失败?

【问题讨论】:

  • 您只需要使用非零退出代码退出,管道就会失败。

标签: ember.js gitlab code-coverage gitlab-ci


【解决方案1】:

经过大量挖掘https://docs.gitlab.com/ee/ci/yaml/,这是我找到的解决方案:

1。在执行测试时生成代码覆盖率

该管道将使用artifacts 将作业之间的覆盖百分比存储在coverage/.current

"Ember Unit Tests":
  artifacts:
    paths:
      - coverage/.current
  script:
    - COVERAGE=true yarn test --filter=Unit
  after_script:
    - grep -o <regex> coverage.json >> coverage/.current

2。将代码覆盖率与存储的“最大”覆盖率(默认为 0)进行比较

如果覆盖范围减少,只需返回一个非零退出代码(谢谢 Lux!)

"Increase Coverage":
  before_script:
    - MAX=`if [ -f coverage/.max ] ; then cat coverage/.max ; else echo 00.00 ; fi`
    - CURRENT=`cat coverage/.current`
  script: if [[ $CURRENT < $MAX ]] ; then exit 1 ; fi

3。合并拉取请求时更新“最大”覆盖率

"Update Max Coverage":
  except:
    - pushes
  before_script:
    - NEW_MAX=`cat coverage/.current`
  script: echo $NEW_MAX > coverage/.max

使用stages 连续运行这三个管道,不要忘记缓存管道之间的“最大”覆盖率:

cache:
  paths:
    - coverage/.max

【讨论】:

    猜你喜欢
    • 2021-08-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2021-10-07
    • 2018-02-17
    • 2022-01-18
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多