threeal/gcovr-action
GitHub: threeal/gcovr-action
一个用于在GitHub Actions中自动化C/C++项目测试覆盖率检查和报告生成的工具。
Stars: 21 | Forks: 8
# Gcovr 操作
使用 [gcovr](https://gcovr.com/en/stable/) 在 [GitHub Actions](https://github.com/features/actions) 上检查 C/C++ 项目的测试覆盖率并生成报告。
## 主要功能
- 检查使用 [GCC](https://gcc.gnu.org/) 和 [LLVM Clang](https://clang.llvm.org/) 编译的 C/C++ 项目的测试覆盖率。
- 生成 HTML、[Cobertura](https://cobertura.github.io/cobertura/) 和 [Coveralls](https://coveralls.io/) 格式的测试覆盖率报告。
- 支持文件排除,如果覆盖率低于特定阈值则构建失败。
- 支持直接将报告发送至 Coveralls。
- 在 GitHub Actions 上自动安装并缓存 gcovr 程序。
## 可用输入
下表列出了此 Action 支持的所有可用输入。请注意,这些输入都是可选的。
| 名称 | 值类型 | 描述 |
| --- | --- | --- |
| `root` | 路径 | 源文件的根目录。默认为当前目录。文件名将相对于此目录进行报告。 |
| `gcov-executable` | 可执行文件名,可带参数 | 使用特定的 [gcov](https://gcc.gnu.org/onlinedocs/gcc/Gcov.html) 可执行文件。它必须与您使用的编译器匹配,例如,对于 LLVM Clang,使用 `llvm-cov gcov`。 |
| `excludes` | 一个或多个正则表达式模式 | 排除匹配这些过滤器的源文件。 |
| `filter` | 一个或多个正则表达式模式 | 筛选匹配这些过滤器的源文件。 |
| `fail-under-line` | 0 - 100 | 如果总行覆盖率低于此值则构建失败。 |
| `fail-under-branch` | 0 - 100 | 如果总分支覆盖率低于此值则构建失败。 |
| `fail-under-function` | 0 - 100 | 如果总函数覆盖率低于此值则构建失败。 |
| `fail-under-decision` | 0 - 100 | 如果总决策覆盖率低于此值则构建失败。 |
| `html-out` | 路径 | 生成的 HTML 报告的输出文件。 |
| `html-details` | `true` 或 `false` | 启用后,将带注释的源代码报告添加到 HTML 报告中。默认为 `false`。 |
| `html-theme` | 字符串 | 覆盖 HTML 报告的默认颜色主题。 |
| `html-title` | 字符串 | 覆盖 HTML 报告的默认标题。 |
| `xml-out` | 路径 | 生成的 Cobertura 报告的输出文件。 |
| `coveralls-out` | 路径 | 生成的 Coveralls 报告的输出文件。 |
| `coveralls-send` | `true` 或 `false` | 将生成的 Coveralls 报告发送到其端点。默认为 `false`。 |
| `decisions` | `true` 或 `false` | 在 HTML、JSON 和摘要报告中报告决策覆盖率。默认为 `false`。 |
| `calls` | `true` 或 `false` | 在 HTML 和摘要报告中报告调用覆盖率。默认为 `false`。 |
| `jobs` | `true`、`false` 或数字 | 设置并行使用的线程数。当设置为 `true` 而不指定数字时,将使用所有可用的处理器。默认为 `false`。 |
| `print-summary` | `true` 或 `false` | 在标准输出上打印一份简短的报告,显示行、函数、分支的百分比覆盖率,以及可选的决策和调用覆盖率。这是除其他报告之外的额外报告。默认为 `false`。 |
| `github-token` | 令牌 | 您项目的 [GitHub 令牌](https://docs.github.com/en/actions/security-guides/automatic-token-authentication)。默认为 [`github.token`](https://docs.github.com/en/actions/security-guides/automatic-token-authentication)。成功将 Coveralls 报告发送到其端点是必需的。 |
| `working-directory` | 路径 | 执行 gcovr 的工作目录。 |
| `cobertura-out` | 路径 | 生成 Cobertura XML 报告。 |
| `cobertura-pretty` | `true` 或 `false` | 格式化输出 Cobertura XML 报告。默认为 `false`。 |
| `jacoco-out` | 路径 | 生成的 JaCoCo 报告的输出文件。 |
| `json-out` | 路径 | 生成 JSON 报告。 |
| `json-pretty` | `true` 或 `false` | 格式化输出 JSON 报告。默认为 `false`。 |
| `json-summary-out` | 路径 | 生成 JSON 摘要报告。 |
| `json-summary-pretty` | `true` 或 `false` | 格式化输出 JSON 摘要报告。默认为 `false`。 |
| `lcov-out` | 路径 | 生成 LCOV 覆盖率报告。 |
| `sonarqube-out` | 路径 | 生成 SonarQube 通用覆盖率报告。 |
| `txt-out` | 路径 | 生成的文本报告的输出文件。 |
## 使用示例
此示例演示了如何在 GitHub Actions 上使用此 Action 检查 C/C++ 项目的测试覆盖率。默认情况下,如果未提供其他输入,此操作会将测试覆盖率报告打印到日志中。
```
name: test
on:
push:
jobs:
test-project:
runs-on: ubuntu-24.04
steps:
- name: Checkout Project
uses: actions/checkout@v5.0.0
- name: Build Project
uses: threeal/cmake-action@v2.1.0
- name: Test Project
uses: threeal/ctest-action@v1.1.0
- name: Check Test Coverage
uses: threeal/gcovr-action@v1.2.0
```
### 指定测试覆盖率阈值
要指定最低所需测试覆盖率阈值,请设置 `fail-under-line`、`fail-under-branch` 和/或 `fail-under-function` 输入,使用一个 0-100 之间的数字表示阈值百分比。例如,以下将检查并断言测试行覆盖率是否高于 80%:
```
- name: Check Test Coverage
uses: threeal/gcovr-action@v1.2.0
with:
fail-under-line: 80
```
### 生成 HTML 报告
指定 `html-out` 输入以生成 HTML 格式的测试覆盖率报告:
```
- name: Generate HTML Report
uses: threeal/gcovr-action@v1.2.0
with:
html-out: coverage.html
```
还有其他选项可用于自定义生成的 HTML 输出:
```
- name: Generate HTML Report
uses: threeal/gcovr-action@v1.2.0
with:
html-out: coverage.html
html-details: true
html-title: My Project Test Coverage Report
html-theme: github.green
```
### 生成 Cobertura 报告
指定 `xml-out` 输入以生成 Cobertura 格式的测试覆盖率报告:
```
- name: Generate Cobertura Report
uses: threeal/gcovr-action@v1.2.0
with:
xml-out: cobertura.xml
```
### 生成 Coveralls 报告
指定 `coveralls-out` 输入以生成 Coveralls 格式的测试覆盖率报告:
```
- name: Generate Coveralls Report
uses: threeal/gcovr-action@v1.2.0
with:
coveralls-out: coveralls.json
```
除了将报告输出为文件外,还可以通过将 `coveralls-send` 输入设置为 `true` 直接将其发送至 Coveralls:
```
- name: Send Coveralls Report
uses: threeal/gcovr-action@v1.2.0
with:
coveralls-send: true
```
### 使用 LLVM Clang
默认情况下,gcovr 可以很好地处理使用 GCC 编译的项目。但是,对于使用 LLVM Clang 编译的项目,`gcov-executable` 输入必须正确指定与该编译器配合使用的 `gcov` 程序。更多详情请参见 [此处](https://gcovr.com/en/stable/guide/compiling.html#choosing-the-right-gcov-executable)。
```
- name: Check Test Coverage
uses: threeal/gcovr-action@v1.2.0
with:
gcov-executable: llvm-cov gcov
```
## 许可证
此项目根据 [MIT 许可证](./LICENSE) 的条款获得许可。
版权所有 © 2022-2026 [Alfi Maulana](https://github.com/threeal/)
标签:Anchore, Bash脚本, C/C++项目, Clang, Cobertura, Coveralls, GCC, gcovr, GitHub Actions, HTML报告, pocsuite3, SOC Prime, UML, 代码覆盖率, 开发工具, 开源框架, 持续集成, 文件过滤, 测试覆盖率, 自动化攻击, 自动笔记, 软件测试, 阈值检查