通用 pull_request 事件和其他更具体的 pull_request 事件(如 pull_request.opened)的意义
Significance of the generic pull_request event and other more specific pull_request events like pull_request.opened
我正在使用 nodejs 和 probot 框架开发 GitHub App .我可以看到 probot 框架的 Application class (https://probot.github.io/api/latest/classes/application.html) 包含如下事件:
> event: "pull_request" | "pull_request.assigned" |
> "pull_request.closed" | "pull_request.edited" | "pull_request.labeled"
> | "pull_request.opened" | "pull_request.reopened" |
> "pull_request.review_request_removed" |
> "pull_request.review_requested" | "pull_request.unassigned" |
> "pull_request.unlabeled" | "pull_request.synchronize
我注意到当 "Create pull request" 按钮被点击时,pull_request 以及pull_request.opened 事件被触发。
为了理解这种 在单击同一个按钮时触发多个看似相似的事件的行为,我尝试重新打开一个已关闭的请求并打印出两者的 Context 对象pull_request事件以及pull_request.reopened事件。
我对两个上下文进行了差异比较,发现两个事件返回的上下文是
完全相同,只是 pull_request 事件的上下文包含在 附加 属性下面:
merged: false,
mergeable: null,
rebaseable: null,
mergeable_state: 'unknown',
merged_by: null,
comments: 6,
review_comments: 0,
maintainer_can_modify: false,
commits: 1,
additions: 1,
deletions: 0,
changed_files: 1 },
repository:
{ id: 123456789,
node_id: '',
name: '',
full_name: '',
private: true,
owner: [Object],
html_url: 'some-url-here'
.
.
///////////////////--------many more urls-------//////////////////////
created_at: '2020-04-0',
updated_at: '2020-04-0',
我们知道返回的上下文对象的一般格式如下:
Context {
name: 'pull_request',
id: '187128937812-8219-89891892133-16752-1234576765545',
payload:
{ action: 'reopened',
number: 1,
pull_request:
{ url:
.
.
.and so on.......
上述信息在两种上下文中都有。我们可以看到,这也告诉我们执行的具体操作,用 context.payload.action 表示。因此,如果某人的要求是获得 pull_request.opened he/she 只需使用 pull_request事件如下:
app.on('pull_request', async context => {
console.log('---------------------- on pull_request event')
console.log('Context returned :----', context)
})
并且不需要关心其他更具体的事件(这里pull_request.opened)即除了上面代码实现的内容之外,下面的代码会不提供真正的额外帮助:
app.on('pull_request.opened', async context => {
console.log('---------------------- on pull_request.opened')
console.log('Context returned :----', context)
})
所以这是困扰我的问题:
pull_request 事件的目的是什么,如果它的其他特定形式(如 pull_request.reopened)没有携带不同的信息(更准确地说,如果他们的上下文不包含不同的信息)?
我很确定它背后确实隐藏着一些智慧。我无法在 Internet 上找到任何内容,文档中也没有任何内容可以解释这一点。
请帮助我了解隐藏的智慧。
编辑 1:开始
忘了提一个观察结果,那就是:重新打开拉取请求也会触发 issue_comment.created 事件。所以,所以一个动作触发三个事件(点击创建拉取请求)。
编辑 2:开始
What is the purpose of the pull_request event , if its other specific forms (like pull_request.reopened) carry no different information(more precisely, if their contexts contain no different infos) ?
这只是 Probot 的一项功能,用于简化来自 GitHub 的 webhook 事件的处理。我会尝试解释它为什么有用。
如果您要在没有 Probot 的情况下使用 webhook 事件,则必须解析每个 pull_request
事件,检查 action
字段中的案例,然后决定是否处理它。
有几个事件在有效负载中具有顶级 action
字段,包括:
check_run
issue
project
pull_request
- 还有更多in the docs...
他们决定简化回调,而不是让应用程序开发人员自己执行这种解析和检查 JSON在收到匹配的事件和操作时调用回调。
因此您有两种处理 pull_request
事件的选择:
- 如果您不知道需要哪些事件,或者需要动态处理事件,订阅
pull_request
是您接收所有拉取请求事件的方式
- 如果您知道应该处理哪些事件,并且可以忽略其余事件,订阅显式
pull_request.[event]
应该会简化您的应用程序代码
您也可以订阅 *
,它表示 probot 应用程序接收的所有事件,而不是明确列出您的应用程序中支持的所有事件。
我正在使用 nodejs 和 probot 框架开发 GitHub App .我可以看到 probot 框架的 Application class (https://probot.github.io/api/latest/classes/application.html) 包含如下事件:
> event: "pull_request" | "pull_request.assigned" |
> "pull_request.closed" | "pull_request.edited" | "pull_request.labeled"
> | "pull_request.opened" | "pull_request.reopened" |
> "pull_request.review_request_removed" |
> "pull_request.review_requested" | "pull_request.unassigned" |
> "pull_request.unlabeled" | "pull_request.synchronize
我注意到当 "Create pull request" 按钮被点击时,pull_request 以及pull_request.opened 事件被触发。
为了理解这种 在单击同一个按钮时触发多个看似相似的事件的行为,我尝试重新打开一个已关闭的请求并打印出两者的 Context 对象pull_request事件以及pull_request.reopened事件。
我对两个上下文进行了差异比较,发现两个事件返回的上下文是 完全相同,只是 pull_request 事件的上下文包含在 附加 属性下面:
merged: false,
mergeable: null,
rebaseable: null,
mergeable_state: 'unknown',
merged_by: null,
comments: 6,
review_comments: 0,
maintainer_can_modify: false,
commits: 1,
additions: 1,
deletions: 0,
changed_files: 1 },
repository:
{ id: 123456789,
node_id: '',
name: '',
full_name: '',
private: true,
owner: [Object],
html_url: 'some-url-here'
.
.
///////////////////--------many more urls-------//////////////////////
created_at: '2020-04-0',
updated_at: '2020-04-0',
我们知道返回的上下文对象的一般格式如下:
Context {
name: 'pull_request',
id: '187128937812-8219-89891892133-16752-1234576765545',
payload:
{ action: 'reopened',
number: 1,
pull_request:
{ url:
.
.
.and so on.......
上述信息在两种上下文中都有。我们可以看到,这也告诉我们执行的具体操作,用 context.payload.action 表示。因此,如果某人的要求是获得 pull_request.opened he/she 只需使用 pull_request事件如下:
app.on('pull_request', async context => {
console.log('---------------------- on pull_request event')
console.log('Context returned :----', context)
})
并且不需要关心其他更具体的事件(这里pull_request.opened)即除了上面代码实现的内容之外,下面的代码会不提供真正的额外帮助:
app.on('pull_request.opened', async context => {
console.log('---------------------- on pull_request.opened')
console.log('Context returned :----', context)
})
所以这是困扰我的问题: pull_request 事件的目的是什么,如果它的其他特定形式(如 pull_request.reopened)没有携带不同的信息(更准确地说,如果他们的上下文不包含不同的信息)?
我很确定它背后确实隐藏着一些智慧。我无法在 Internet 上找到任何内容,文档中也没有任何内容可以解释这一点。
请帮助我了解隐藏的智慧。
编辑 1:开始
忘了提一个观察结果,那就是:重新打开拉取请求也会触发 issue_comment.created 事件。所以,所以一个动作触发三个事件(点击创建拉取请求)。
编辑 2:开始
What is the purpose of the pull_request event , if its other specific forms (like pull_request.reopened) carry no different information(more precisely, if their contexts contain no different infos) ?
这只是 Probot 的一项功能,用于简化来自 GitHub 的 webhook 事件的处理。我会尝试解释它为什么有用。
如果您要在没有 Probot 的情况下使用 webhook 事件,则必须解析每个 pull_request
事件,检查 action
字段中的案例,然后决定是否处理它。
有几个事件在有效负载中具有顶级 action
字段,包括:
check_run
issue
project
pull_request
- 还有更多in the docs...
他们决定简化回调,而不是让应用程序开发人员自己执行这种解析和检查 JSON在收到匹配的事件和操作时调用回调。
因此您有两种处理 pull_request
事件的选择:
- 如果您不知道需要哪些事件,或者需要动态处理事件,订阅
pull_request
是您接收所有拉取请求事件的方式 - 如果您知道应该处理哪些事件,并且可以忽略其余事件,订阅显式
pull_request.[event]
应该会简化您的应用程序代码
您也可以订阅 *
,它表示 probot 应用程序接收的所有事件,而不是明确列出您的应用程序中支持的所有事件。