我正在研究将存储库从 GitLab 迁移到 GitHub 的流程。
此流程需要做的事情之一是将来自 GitLab 的合并请求重新创建为 GitHub 中的拉取请求,以及它们的对话历史记录。
我设法使用 GitHub API 从原始 MR 创建 PR 和评论,但由于原始 MR 中的一些评论线程已经解决,我想使用 API 将 PR 中的这些对话也标记为已解决,但是我找不到办法做到这一点。现在我只是在对话中添加最后一条评论,表示它已解决,但我想知道是否有更好的方法来做到这一点。
目前仅在 GraphQL 中可用:
https://docs.github.com/en/graphql/reference/mutations#resolvereviewthread
GraphQL 看起来很简单,但事实并非如此。该突变的输入需要一个称为“审核线程”的 id,但 REST API 中没有这样的概念。通过 REST API 的 id 为“评论”,找到相应“评论线程”的唯一方法是检索所有评论线程并通过其中的评论进行过滤。
使用 gh 2.21.0(2022 年 12 月),您现在拥有
gh pr lock
,但对于所有对话,而不是个人评论:
gh pr lock --reason resolved
解锁将解锁之前已锁定的对话。否则,什么也做不了。
lock 将锁定之前已解锁的对话。
您可以选择从一组固定原因中指定锁定原因。
- “
”,off_topic
- “
”,resolved
- “
”,spam
- “
”too_heated
如果问题或拉取请求已被锁定,
将提示您确认是否要“重新锁定”对话,或者如果您忘记或不知道对话已被锁定,则中止“重新锁定”。gh
重新锁定的主要用途可能是更改锁定原因。
对于个人评论,您首先需要列出 PR 上的所有审核评论,以找到添加解决方案评论的正确位置:
gh api repos/:owner/:repo/pulls/:pull_number/comments
一旦您确定了正确的评论线程,您就可以对其发表评论:
gh api -X POST repos/:owner/:repo/pulls/:pull_number/comments -F body="That conversation was resolved in the original GitLab MR." -F in_reply_to=:comment_id
resolveReviewThread
那样“解决”,但至少会在线程中添加评论。