评论拉取请求 - GitHub Actions
这是什么?
这是一个GitHub action,可以用给定的消息评论与推送分支相关联的拉取请求。 你甚至可以通过上下文和表达式语法添加动态数据。
使用方法
经典用法
on: pull_request
jobs:
example_comment_pr:
runs-on: ubuntu-latest
name: 评论PR的示例作业
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 评论PR
uses: thollander/actions-comment-pull-request@v2
with:
message: |
你好,世界!👋
评论文件内容
通过filePath
输入,可以评论文件内容。
你可以传入绝对文件路径或相对路径,默认情况下会从GITHUB_WORKSPACE
中检索。
(注意,如果同时提供了message
和filePath
,将优先使用message
。)
- name: 用文件内容评论PR
uses: thollander/actions-comment-pull-request@v2
with:
filePath: /path/to/file.txt
设置反应
你还可以通过reactions
输入为评论设置一些反应。
它只接受有效的反应,并将其添加到你刚创建的评论中。(参见 https://docs.github.com/en/rest/reactions#reaction-types)
- name: 带反应的PR评论
uses: thollander/actions-comment-pull-request@v2
with:
message: |
你好,世界!👋
reactions: eyes, rocket
指定要评论的拉取请求
你可以通过传入pr_number
输入来明确指定应该评论哪个拉取请求。
这对于手动工作流(如workflow_run
)特别有用。
...
- name: 评论PR
uses: thollander/actions-comment-pull-request@v2
with:
message: |
你好,世界!👋
pr_number: 123 # 这将评论拉取请求 #123
更新评论
通过comment_tag
输入,还可以编辑现有评论。
借助这个参数,可以识别你的评论,然后对其进行更新。 如果一开始没有找到评论,它将创建一个新评论。
这在PR中多次提交并且你只想打印最后一次执行报告时特别有用。它可以避免PR被大量评论淹没。
...
- name: 用执行编号评论PR
uses: thollander/actions-comment-pull-request@v2
with:
message: |
_(执行 **${{ github.run_id }}** / 尝试 **${{ github.run_attempt }}**)_
comment_tag: execution
注意:mode
输入可用于upsert
(默认)或recreate
(删除并创建)评论
删除评论
通过comment_tag
输入结合mode: delete
,也可以删除现有评论。
这将在作业结束时删除评论。
...
- name: 写一条将在作业结束时删除的评论
uses: thollander/actions-comment-pull-request@v2
with:
message: |
PR正在构建中...
comment_tag: to_delete
mode: delete
输入
Action 输入
名称 | 描述 | 必需 | 默认值 |
---|---|---|---|
GITHUB_TOKEN | 用于创建评论的令牌。默认为 ${{ github.token }} | ✅ | |
message | 评论内容 | ||
filePath | 应该被评论的文件路径 | ||
reactions | 评论的反应列表(逗号分隔)。参见 https://docs.github.com/en/rest/reactions#reaction-types | ||
pr_number | 要创建评论的拉取请求编号 | 当前拉取请求/问题编号(从上下文推断) | |
comment_tag | 用于在替换时识别评论的标签 | ||
mode | 用于更新评论的模式(upsert/recreate/delete) | upsert | |
create_if_not_exists | 如果未找到comment_tag ,是否应创建评论 | true |
输出
Action 输出
你可以从这个action获得一些输出:
名称 | 描述 |
---|---|
id | 创建或更新的评论id |
body | 评论内容 |
html_url | 创建或更新的评论URL |
输出示例
- name: 评论PR
uses: thollander/actions-comment-pull-request@v2
id: hello
with:
message: |
你好,世界!👋
- name: 检查输出
run: |
echo "id : ${{ steps.hello.outputs.id }}"
echo "body : ${{ steps.hello.outputs.body }}"
echo "html_url : ${{ steps.hello.outputs.html_url }}"
权限
根据授予你的令牌的权限,你可能缺少一些权限。 要成功运行,这个action至少需要:
permissions:
pull-requests: write
如果遇到Resource not accessible by integration
错误,请添加这个。
有关更多信息,请参见jobs.<job_id>.permissions。
注意,如果PR来自fork,尽管在action中为
pull_request
事件给予了权限,它仍然只有读取权限。 在这种情况下,你可以使用pull_request_target
事件。使用这个事件,可以毫无问题地授予权限(区别在于它将从目标分支执行action,而不是从原始PR执行)。
贡献
构建
构建步骤将src/main.ts
转译为lib/index.js
,后者在NodeJS环境中使用。
这由vercel/ncc
编译器处理。
$ npm run build