Github Action无法在Pull Request上进行评论。

3
我正在使用一个 Github Action 来比较基准测试结果,并将它们作为评论发布在 PR 上。 这是该 Action 的文件 - https://github.com/smrpn/criterion-compare-action/blob/move_to_actions/main.js
它的含义是 -
try {
    await octokit.issues.createComment({
      ...context.repo,
      issue_number: context.payload.pull_request.number,
      body: resultsAsMarkdown,
    });
  } catch (e) {
    // If we can't post to the comment, display results here.
    // forkedRepos only have READ ONLY access on GITHUB_TOKEN
    // https://github.community/t5/GitHub-Actions/quot-Resource-not-accessible-by-integration-quot-for-adding-a/td-p/33925
    const resultsAsObject = convertToTableObject(myOutput);
    
    fs.writeFile('benchResults.txt', resultsAsObject, (err) => {
        if (err) throw err;
    });
    console.table(resultsAsObject);
    console.log("Failed to comment\n", e);
    core.debug(e);
    core.debug("Failed to comment");
  }

我正在使用另一个专门用于此目的(注释基准测试结果)的令牌 - BENCHMARK_TOKEN。但是,当PR来自分叉的存储库时,它不会进行注释。这就是现在的问题 - https://github.com/hackerchai/casbin-rs/runs/2648902413#step:5:614 修复方法是什么?我希望Github机器人在每个PR上发表评论。
1个回答

3

您可以使用pull_request_target事件在fork上打开的拉取请求上评论。在这里了解更多详情。

请注意,这将在fork的基础上运行,以避免运行不安全的代码。 以下是一个使用此事件的示例

这是GitHub文档中的警告:

警告:即使从fork触发,pull_request_target事件也被授予读/写存储库令牌,并且可以访问机密。虽然工作流在拉取请求的基础上运行,但您应确保不要使用此事件检查、构建或运行来自拉取请求的不受信任的代码。此外,任何缓存都与基础分支具有相同的范围,为防止缓存污染,如果存在缓存内容被更改的可能性,则不应保存缓存。有关详细信息,请参见 GitHub安全实验室网站上的“保持GitHub操作和工作流程的安全性:防止pwn请求”。


我正在使用与 https://github.com/boa-dev/boa 中相同的代码。请参见此链接 - https://github.com/boa-dev/boa/blob/master/.github/workflows/pull_request.yml。它在此存储库中运行正常 - https://github.com/boa-dev/boa/pull/1236。不明白为什么它能在那里正常工作,而在我的情况下却不能。 - eth_sign
@noob.rs 我非常确定它也可以在那个仓库上工作 :-). 你发送的PR没有针对一个分支进行操作。所以,评论是有效的。但是如果你看一下这个或者这个,它们是从分支中创建的,GitHub action 在它们上运行了(这里这里),但是没有添加评论。 - Thatkookooguy
1
@noob.rs,所以他们面临着相同的问题。解决这个错误(从分支中未添加评论到PR)的方法是使用pull_request_target,据我所知。 - Thatkookooguy
您唯一可以访问的秘密是 GITHUB_TOKEN,它在某种程度上应该有效。但是GitHub会阻止对其它任何秘密的访问,以防止通过在派生代码上运行的GitHub操作泄漏您的数据(如果它们可以访问,则可以将这些秘密保存在其他地方)。 - Thatkookooguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接