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, 代码覆盖率, 开发工具, 开源框架, 持续集成, 文件过滤, 测试覆盖率, 自动化攻击, 自动笔记, 软件测试, 阈值检查