VeryGoodOpenSource/very_good_coverage
GitHub: VeryGoodOpenSource/very_good_coverage
一个用于解析 lcov 报告并在 GitHub Actions 中强制执行最低代码覆盖率阈值的 CI 工具。
Stars: 172 | Forks: 19
# 非常好的 Coverage
[][very_good_ventures_link_light]
[][very_good_ventures_link_dark]
[][ci_badge_link]
[][license_badge_link]
一个用于帮助强制执行最低代码覆盖率的 GitHub Action。
## 迁移指南
通过将您的工作流步骤替换为该仓库中提供的可复用工作流,您可以从 `VeryGoodOpenSource/very_good_coverage` 迁移到 [Very Good Workflows][very_good_workflows_link]。
**之前:**
```
- name: Very Good Coverage
uses: VeryGoodOpenSource/very_good_coverage@v2
with:
path: '/coverage/lcov.info'
min_coverage: 95
exclude: '**/*_observer.dart **/change.dart'
```
**之后:**
```
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
with:
min_coverage: 95
coverage_excludes: '**/*_observer.dart **/change.dart'
```
有关可用输入和工作流选项的完整列表,请参阅 [Very Good Workflows 文档][very_good_workflows_link]。
## 输入项
Very Good Coverage 接受以下配置输入:
| 输入项名称 | 描述 | 默认值 | 可选 |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | -------- |
| path | lcov.info 文件的绝对路径。 | `"/coverage/lcov.info"` | ✅ |
| min_coverage | 允许的最低覆盖率百分比。必须是 0 到 100 之间的数字。 | `100` | ✅ |
| exclude | 要从覆盖率报告中排除的路径列表,以空格分隔。支持使用 [globs]() 来描述文件模式。 | `""` | ✅ |
## 示例用法
```
uses: VeryGoodOpenSource/very_good_coverage@v2
with:
path: '/coverage/lcov.info'
min_coverage: 95
exclude: '**/*_observer.dart **/change.dart'
```
## 常见问题
#### 如何避免 Very Good Coverage 报告为空或不存在的覆盖率文件?
[相关问题](https://github.com/VeryGoodOpenSource/very_good_coverage/issues/167)
对于不存在的覆盖率文件导致的失败,可以通过将 path 输入项设置为已生成的 lcov 文件所在的路径来解决。
```
uses: VeryGoodOpenSource/very_good_coverage@v2
with:
path: 'my_project/coverage/lcov.info'
```
如果您生成的 lcov 文件为空,这可能是因为您没有测试文件,或者您的测试没有生成任何覆盖率数据。
如果您希望始终绕过这些警告,我们建议您在工作流中使用条件语句,以避免在 lcov 文件为空或不存在时运行 Very Good Coverage action。
例如,如果您不存在或为空的覆盖率文件预计位于 `/coverage/lcov.info`,您可以这样做:
```
- name: Check for existing and non-empty coverage file
id: test_coverage_file
run: if [ -s "/coverage/lcov.info" ]; then echo "result=true" >> $GITHUB_OUTPUT ; else echo "result=false" >> $GITHUB_OUTPUT; fi
- name: Very Good Coverage
if: steps.test_coverage_file.outputs.result == 'true'
uses: VeryGoodOpenSource/very_good_coverage@v2
with:
path: '/coverage/lcov.info'
```
#### 为什么我的输入路径不是相对于指定的 `working-directory` 的?
[相关问题](https://github.com/VeryGoodOpenSource/very_good_coverage/issues/35)
输入路径必须是绝对路径。指定的 working directory 会被输入路径忽略。这是因为从 action 中[无法](https://github.com/actions/runner/issues/467)访问 working directory。换句话说,Very Good Coverage 始终从您的仓库根目录运行。
例如,如果您的 working directory 是 `my_project`,而您的文件位于 `/my_project/coverage/lcov.info`,您必须这样做:
```
jobs:
build:
defaults:
run:
working-directory: my_project/
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Very Good Coverage
uses: VeryGoodOpenSource/very_good_coverage@v2
with:
path: /my_project/coverage/lcov.info
```
标签:GitHub Action, SOC Prime, 代码覆盖率, 开发工具, 开源框架, 持续集成, 自定义脚本