You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GitHub Action将PHPUnit覆盖率报告截图嵌入PR评论?

解决方案:通过GitHub API上传PR专属附件实现图片直接显示

可以实现你想要的效果——利用GitHub的REST API将截图上传到PR专属的资产存储位置,再将返回的图片链接嵌入PR评论,就能让图片直接显示在评论内,完全复现手动拖拽上传的逻辑。

核心原理

手动拖拽图片到PR评论时,本质是调用了GitHub的「上传Issue资产」API,将文件存储到与PR绑定的专属位置,返回的URL是公开可直接渲染的。我们可以在GitHub Action中复现这个流程:

  1. 调用API将截图上传到当前PR的资产库
  2. 用返回的图片URL生成带Markdown图片语法的评论内容
  3. 调用API发布评论到PR

GitHub Action 实现示例

下面是完整的Action步骤,包含权限配置、图片上传和评论发布:

jobs:
  coverage-comment:
    runs-on: ubuntu-latest
    permissions:
      issues: write # 必须配置此权限才能上传资产和发布评论
    steps:
      # 先执行你的PHPUnit测试、生成截图的步骤,示例:
      # - name: Run PHPUnit & generate coverage screenshot
      #   run: ./your-coverage-screenshot-script.sh

      - name: Upload screenshot to PR and add comment
        uses: actions/github-script@v6
        with:
          script: |
            const fs = require('fs');
            const screenshotPath = './coverage-screenshot.png'; // 替换为你的截图实际路径

            // 读取截图文件内容
            const fileBuffer = fs.readFileSync(screenshotPath);

            // 上传图片到PR专属资产位置
            const uploadResult = await github.rest.repos.uploadIssueAsset({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              name: 'phpunit-coverage-report.png', // 自定义显示的文件名
              data: fileBuffer
            });

            // 发布包含图片的评论
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: `
### PHPUnit 代码覆盖率报告
![PHPUnit覆盖率截图](${uploadResult.data.url})
              `
            });

关键注意事项

  • 权限配置:必须在job中设置permissions: issues: write,否则GITHUB_TOKEN没有权限上传资产和发布评论。
  • 文件路径:确保screenshotPath指向你的截图实际生成路径,避免找不到文件的错误。
  • API稳定性:使用actions/github-script比直接用curl更可靠,它已封装了GitHub API的调用逻辑,无需手动处理认证和JSON解析。

为什么之前的方案不可行

  • Base64编码的data URI:GitHub明确禁止在PR/Issue评论中渲染此类链接,属于安全限制。
  • 构建产物链接:构建产物的URL是临时的,且需要GitHub认证才能访问,无法在公开评论中直接渲染图片。

这个方案完全复刻了手动上传图片的流程,生成的图片链接是PR专属的,无需公开上传到外部存储,且能直接在评论中显示。

内容的提问来源于stack exchange,提问作者Xenology

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:03:42