GitHub Actions 本身不生成 HTML 代码质量报告,仅调度第三方工具(如 Cppcheck、ESLint、CodeQL)执行分析并转换其输出;HTML 报告需借助配套工具(如 cppcheck-htmlreport-py3、eslint-formatter-html、sarif2html)生成,并通过 upload-artifact 或 gh-pages 持久化展示。

GitHub Actions 本身不生成 HTML 格式的代码质量等级报告,它只负责执行流程;真正产出 HTML 报告的是下游工具(如 Cppcheck、ESLint、SonarQube 或 CodeQL),而 Actions 只是调度器和宿主环境。
为什么直接用 GitHub Actions 无法“自动生成 HTML 等级报告”
GitHub Actions 是一个工作流引擎,不是分析引擎。它没有内置的代码质量评分模型,也不解析源码——它只能调用其他工具,并把它们的输出(比如 XML、SARIF、JSON)转成可发布的 HTML 页面。所谓“等级报告”,本质是第三方工具对缺陷数量、严重性、覆盖度等维度加权计算后的可视化呈现,Actions 不参与这个逻辑。
-
CodeQL会生成 SARIF 格式结果,GitHub Security tab 自动渲染为“可靠性/可维护性”评级,但不提供独立 HTML 文件下载 -
Cppcheck需配合--xml+ 外部 XSLT 转换,或用cppcheck-htmlreport工具才能生成 HTML -
ESLint原生不支持 HTML 输出,得靠eslint-formatter-html或jest-html-reporter这类插件补足 - 所有 HTML 报告若想持久化展示,必须显式用
actions/upload-artifact@v4上传,或推送到 gh-pages 分支
如何让 Cppcheck 在 Actions 中输出可读的 HTML 报告
Cppcheck 本身不带 HTML 渲染能力,必须借助配套脚本。常见做法是用官方提供的 cppcheck-htmlreport 工具,但它依赖 Python 2.7(已淘汰)或需手动适配 Python 3。更稳妥的方式是分两步走:
- 先用
cppcheck --xml-version=2 --enable=all . > cppcheck.xml生成标准 XML - 再用 Python 脚本(或 Node.js 工具如
xsltproc)将 XML 转为 HTML —— 推荐使用开源项目cppcheck-htmlreport-py3 - 确保 Actions 步骤中安装了
python3和lxml:pip install lxml - 最后用
actions/upload-artifact@v4上传report.html,否则报告仅在日志里一闪而过
ESLint + HTML 报告:别漏掉 formatter 和路径配置
很多人跑通了 ESLint 检查,却看不到 HTML 报告,问题常出在两处:formatter 未生效、输出路径被忽略。
立即学习“前端免费学习笔记(深入)”;
- 必须显式指定
--format=html,且安装对应包:npm install eslint-formatter-html --save-dev - 命令要带输出路径:
npx eslint . --ext .js,.ts --format html --output-file eslint-report.html - HTML 文件默认不包含 CSS 样式,需额外复制
node_modules/eslint-formatter-html/styles.css到同目录并引用 - 若用
actions/upload-artifact,路径必须写全:path: eslint-report.html,不能只写eslint-report.*
CodeQL 的“等级”是 GitHub 内置逻辑,不可导出为独立 HTML
CodeQL 扫描后在 Security > Code scanning alerts 显示的“可靠性”“可维护性”分级,是 GitHub 后端基于 SARIF 数据实时计算的结果,前端只渲染,不提供原始 HTML 文件。你无法通过 Actions 直接拿到这个页面的 HTML 源码。
- 能获取的是原始 SARIF 文件(
codeql-sarif.json),可用codeql github upload-sarif提交,但不等于 HTML 报告 - 想本地生成类似界面?得用
sarif2html工具转换:npx sarif2html codeql-sarif.json - 注意:SARIF 中 severity 字段(
error/warning/note)决定等级权重,但 GitHub 的具体算法未公开,复现“等级”数值不可靠
真正容易被忽略的点是:HTML 报告生成后,没人看 = 白做。必须配 actions/upload-artifact 并在 PR 描述里加链接,或者用 github-pages 自动部署到 https://<user>.github.io/<repo>/reports/——否则报告只存在于一次 CI 运行的日志末尾,三秒后就消失。



















