跳到主要内容

WebHook 推送数据类型说明

webhook 钩子的推送数据中带有丰富的 json 聚合信息,按信息的聚合单元区分,大致可分为如下几种

辅助说明:
1、[] 里的键值对是视数据情况而定的,不确保存在 2、*user、*commit 等表示引用对应的 json 数据聚
3、该文档仅供参考,请以实际收到的数据为准
4、如果发现文档有误,十分抱歉,请到 Gitee 反馈中心 提 issue

# 标签。issue 和 pull request 的对应标签
label: {
id: Number,
name: String, # 标签名。eg:fixbug
color: String # 标签的颜色。eg:000000
}

# 企业信息
enterprise: {
name: String, # 企业名。eg:开源中国
url: String # 企业在 Gitee 上的 url。eg:https://gitee.com/oschina
}

# 评论信息
note: {
id: Number,
body: String, # 评论内容。eg:好的东西应该开源...
user: *user, # 评论的作者信息。
created_at: String, # 评论的创建时间。eg:2020-01-01T00:00:00+08:00
updated_at: String, # 评论的更新时间。eg:2020-11-11T11:11:11+08:00
html_url: String, # 这条评论在 Gitee 上的 url。eg:https://gitee.com/oschina/git-osc#note_1
[position: String], # 在代码 commit 评论中对应的代码位置。eg:76ec1c6df700af34ae5f8dd00bd7bcb56c1bd706_9_9
[commit_id: String] # 在代码 commit 评论中对应的 commit id。eg:611de62f634d353bb75a290f59fa238ff2d8d3c7
}

# 用户信息
user: {
[id: Number],
name: String, # 用户的昵称。eg:红薯
email: String, # 用户的邮箱。eg:git@oschina.cn
[username: String], # 用户的 Gitee 个人空间地址。eg:gitee
[user_name: String], # 与上面的 username 一致。
[url: String], # 用户的 Gitee 个人主页 url。eg:https://gitee.com/gitee
[login: String], # 与上面的 username 一致。
[avatar_url: String || null], # 用户头像 url。eg:https://gitee.com/assets/favicon.ico
[html_url: String], # 与上面的 url 一致。
[type: String], # 用户类型,目前固定为 User。
[site_admin: Boolean], # 是不是管理员。
[time: String], # git commit 中的时间。eg:2020-01-01T00:00:00+08:00
[remark: String] # 用户备注名。eg:Ruby 大神
}

# git commit 中的信息
commit: {
id: String,
tree_id: String, # commit tree oid。eg:db78f3594ec0683f5d857ef731df0d860f14f2b2
parent_ids: [String], # commit parent_ids。eg:['a3bddf21a35af54348aae5b0f5627e6ba35be51c']
message: String, # commit 的信息。eg:fix(cache): 修复了缓存问题
timestamp: String, # commit 的时间。eg:2020-01-01T00:00:00+08:00
url: String, # commit 对应的 Gitee url。eg:https://gitee.com/mayun-team/oauth2_dingtalk/commit/664b34859fc4a924cd60be2592c0fc788fbeaf8f
author: *user, # 作者信息。
committer: *user, # 提交者信息。
distinct: Boolean, # 特殊的 commit,没任何改动,如 tag
added: [String] || null, # 新加入的文件名。eg:['README.md']
removed: [String] || null, # 被移除的文件名。eg:['README.md']
modified: [String] || null # 修改过的文件名。eg:['README.md']
}

# 里程碑信息
milestone: {
html_url: String, # Gitee 上对应的 url。eg:https://gitee.com/oschina/git-osc/milestones/1
id: Number,
number: Number, # 与上面的 id 一致
title: String, # 里程碑的标题。eg:开源计划
description: String || null, # 里程碑的详细描述。eg:走向世界
open_issues: Number, # 开启状态的 issue 数量
closed_issues: Number, # 关闭状态的 issue 数量
state: String, # 里程碑的状态。eg:open
created_at: String, # 里程碑创建的时间。eg:2020-01-01T00:00:00+08:00
updated_at: String, # 里程碑更新的时间。eg:2020-01-01T00:00:00+08:00
due_on: String || null # 里程碑结束的时间。eg:2020-01-01T00:00:00+08:00
}

# issue 信息
issue: {
html_url: String, # Gitee 上对应的 url。eg:https://gitee.com/oschina/git-osc/issues/1
id: Number,
number: String, # issue 对应的标识。eg:IG6E9
title: String, # issue 标题。eg:这是一个 issue 标题
user: *user, # issue 创建者。
labels: [*label] || null, # issue 对应的标签。
state: String, # issue 状态。eg:open
state_name: String, # issue 状态名。eg:代办的
type_name: String, # issue 类型。eg:任务
assignee: *user || null, # issue 负责人。
collaborators: [*user] || null, # issue 协助者。
milestone: *milestone || null, # issue 所属的里程碑。
comments: Number, # issue 的评论总数
created_at: String, # issue 的创建时间。eg:2020-01-01T00:00:00+08:00
updated_at: String, # issue 的更新时间。eg:2020-01-01T00:00:00+08:00
body: String # issue 的内容体。eg:数据库优化...
}

# project 信息
project: {
id: Number,
name: String, # 仓库名。eg:gitee
path: String, # 仓库所属的空间地址。eg:oschian
full_name: String, # 完整的名字,name + path。eg:gitee/oschian
owner: *user, # 仓库的所有者。
private: Boolean, # 是否公开。
html_url: String, # 对应 Gitee 的 url。eg:https://gitee.com/oschina/git-osc
url: String, # 与上面 html_url 一致
description: String, # 仓库描述。eg:这是一个开源仓库...
fork: Boolean, # 是不是 fork 仓库。
created_at: String, # 仓库的创建时间。eg:2020-01-01T00:00:00+08:00
updated_at: String, # 仓库的更新时间。eg:2020-01-01T00:00:00+08:00
pushed_at: String, # 仓库的最近一次推送时间。eg:2020-01-01T00:00:00+08:00
git_url: String, # 仓库的 git 地址。eg:git://gitee.com:oschina/git-osc.git
ssh_url: String, # 仓库的 ssh 地址。eg:git@gitee.com:oschina/git-osc.git
clone_url: String, # 仓库的 clone 地址。eg:https://gitee.com/oschina/git-osc.git
svn_url: String, # 仓库的 svn 地址。eg:svn://gitee.com/oschina/git-osc
git_http_url: String, # 与上面的 clone_url 一致。
git_ssh_url: String, # 与上面的 ssh_url 一致。
git_svn_url: String, # 与上面的 svn_url 一致。
homepage: String || null, # 仓库的网页主页。eg:https://gitee.com
stargazers_count: Number, # 仓库的 star 数量。
watchers_count: Number, # 仓库的 watch 数量。
forks_count: Number, # 仓库的 fork 数量。
language: String, # 仓库的编程语言。eg: Ruby
has_issues: Boolean, # 仓库的是否开启了 issue 功能。
has_wiki: Boolean, # 仓库的是否开启了 wiki 功能。
has_pages: Boolean, # 仓库的是否开启了 page 服务。
license: String || null, # 仓库的开源协议。eg:MIT
open_issues_count: Number, # 仓库开启状态的 issue 总数。
default_branch: String, # 仓库的默认复制。eg:master
namespace: String, # 仓库所属的 Gitee 地址。eg:oschina
name_with_namespace: String, # 与上面的 full_name 一致。
path_with_namespace: String # 仓库的在 Gitee 的资源唯一标识。eg:oschia/git-osc
}

# 分支信息
branch: {
label: String, # 分支标记。eg:oschina:master
ref: String, # 分支名。eg:master
sha: String, # git 提交记录中 sha 值。eg:51b1acb1b4044fcdb2ff8a75ad15a4b655101754
user: *user, # 分支所在仓库的所有者信息
repo: *project # 分支所在仓库的信息
}

# PR 信息
pull_request: {
id: Number,
number: Number, # 与上面 id 一致
state: String, # PR 状态。eg:open
html_url: String, # PR 在 Gitee 上 url。eg:https://gitee.com/oschina/pulls/1
diff_url: String, # PR diff 信息 url。eg:https://gitee.com/oschina/pulls/1.diff
patch_url: String, # PR patch 信息 url。eg:https://gitee.com/oschina/pulls/1.patch
title: String, # PR 的标题。eg:这是一个 PR 标题
body: String || null, # PR 的内容。eg:升级服务...
created_at: String, # PR 的创建时间。eg:2020-01-01T00:00:00+08:00
updated_at: String, # PR 的更新时间。eg:2020-01-01T00:00:00+08:00
closed_at: String || null, # PR 的关闭时间。eg:2020-01-01T00:00:00+08:00
merged_at: String || null, # PR 的合并时间。eg:2020-01-01T00:00:00+08:00
merge_commit_sha: String || null, # PR 合并产生的 commit id。eg:51b1acb1b4044fcdb2ff8a75ad15a4b655101754
merge_reference_name: String, # PR 的源分支目标。eg:refs/pull/1/MERGE
user: *user, # PR 的创建者。
assignee: *user || null, # PR 的负责人。
assignees: [*user] || null, # PR 的审核人。
tester: *user || null, # PR 的测试者。
testers: [*user] || null, # PR 的所有测试者。
need_test: Boolean, # PR 是否需要测试。
need_review: Boolean, # PR 是否需要审核。
milestone: *milestone || null, # PR 所属的里程碑。
head: *branch || null, # PR 的源分支。
base: *branch, # PR 要合并的目标分支
merged: Boolean, # PR 是否已合并。
mergeable: Boolean, # PR 是否可以合并。
merge_status: String, # PR 的合并状态。eg:unchecked
updated_by: *user || null, # PR 的修改者。
comments: Number, # PR 的总评论数量。
commits: Number, # PR 的总 commit 数量。
additions: Number, # PR 新增了多少行。
deletions: Number, # PR 删除了多少行。
changed_files: Number # PR 修改了多少行。
}

目前 Gitee 支持的四类 webhook 钩子

Issue Hook 数据格式

{
hook_id: self.id, # 钩子 id。
hook_url: hook_url, # 钩子路由。
hook_name: String, # 钩子名,固定为 issue_hooks。
password: String, # 钩子密码。eg:123456
timestamp: Number, # 触发钩子的时间戳。eg: 1576754827988
sign: String, # 钩子根据密钥计算的签名。eg: "rLEHLuZRIQHuTPeXMib9Czoq9dVXO4TsQcmQQHtjXHA="
action: String, # issue 状态。eg:open
issue: *issue, # issue 信息。
repository: *project || null, # 仓库信息。
project: *project || null, # 仓库信息。
sender: *user, # 触发 hook 的用户信息。
target_user: *user || null, # 被委托处理 issue 的用户信息。
user: *user, # issue 创建者。
assignee: *user || null, # issue 负责人。
updated_by: *user, # 触发 hook 的用户信息。
iid: String, # issue 对应的标识。eg:IG6E9
title: String, # issue 标题。eg:这是一个 issue 标题
description: String, # issue 的内容体。eg:数据库优化...
state: String, # issue 状态。eg:open
milestone: String || null, # 里程碑的标题。eg:开源计划
url: String, # issue 在 Gitee 上对应的 url。eg:https://gitee.com/oschina/git-osc/issues/1
enterprise: *enterprise || null # issue 所属的企业信息。
}

Push / Tag Hook 数据格式

{
hook_id: self.id, # 钩子 id。
hook_url: hook_url, # 钩子路由。
hook_name: String, # 钩子名,固定为 push_hooks/tag_push_hooks。
password: String, # 钩子密码。eg:123456
timestamp: Number, # 触发钩子的时间戳。eg: 1576754827988
sign: String, # 钩子根据密钥计算的签名。eg: "rLEHLuZRIQHuTPeXMib9Czoq9dVXO4TsQcmQQHtjXHA="
ref: String, # 推送的分支。eg:refs/heads/master
before: String, # 推送前分支的 commit id。eg:5221c062df39e9e477ab015df22890b7bf13fbbd
after: String, # 推送后分支的 commit id。eg:1cdcd819599cbb4099289dbbec762452f006cb40
[total_commits_count: Number], # 推送包含的 commit 总数。
[commits_more_than_ten: Boolean], # 推送包含的 commit 总数是否大于十二。
created: Boolean, # 推送的是否是新分支。
deleted: Boolean, # 推送的是否是删除分支。
compare: String, # 推送的 commit 差异 url。eg:https://gitee.com/oschina/git-osc/compare/5221c062df39e9e477ab015df22890b7bf13fbbd...1cdcd819599cbb4099289dbbec762452f006cb40
commits: [*commit] || null, # 推送的全部 commit 信息。
head_commit: commit, # 推送最前面的 commit 信息。
repository: *project, # 推送的目标仓库信息。
project: *project, # 推送的目标仓库信息。
user_id: Number,
user_name: String, # 推送者的昵称。
user: *user, # 推送者的用户信息。
pusher: *user, # 推送者的用户信息。
sender: *user, # 推送者的用户信息。
enterprise: *enterprise || ull # 推送的目标仓库所在的企业信息。
}

Pull Request Hook 数据格式

{
hook_id: self.id, # 钩子 id。
hook_url: hook_url, # 钩子路由。
hook_name: String, # 钩子名,固定为 merge_request_hooks。
password: String, # 钩子密码。eg:123456
timestamp: Number, # 触发钩子的时间戳。eg: 1576754827988
sign: String, # 钩子根据密钥计算的签名。eg: "rLEHLuZRIQHuTPeXMib9Czoq9dVXO4TsQcmQQHtjXHA="
action: String, # PR 状态。eg:open
pull_request: *pull_request, # PR 的信息。
number: Number, # PR 的 id。
iid: Number, # 与上面 number 一致。
title: String, # PR 的标题。eg:这是一个 PR 标题
body: String || nil, # PR 的内容。eg:升级服务...
state: String, # PR 状态。eg:open
merge_status: String, # PR 的合并状态。eg:unchecked
merge_commit_sha: String, # PR 合并产生的 commit id。eg:51b1acb1b4044fcdb2ff8a75ad15a4b655101754
url: String, # PR 在 Gitee 上 url。eg:https://gitee.com/oschina/pulls/1
source_branch: String || null, # PR 的源分支名。eg:fixbug
source_repo: {
project: *project, # PR 的源仓库信息。
repository: *project # PR 的源仓库信息。
} || null,
target_branch: String, # PR 的目标分支名。master
target_repo: {
project: *project, # PR 的目标仓库信息。
repository: *project # PR 的目标仓库信息。
},
project: *project, # PR 的目标仓库信息。
repository: *project, # PR 的目标仓库信息。
author: *user, # PR 的创建者信息。
updated_by: *user, # PR 的更新者信息。
sender: *user, # PR 的更新者信息。
target_user: *user || null, # 被委托处理 PR 的用户信息。
enterprise: *enterprise || null # PR 仓库所在的企业信息。
}

Note Hook 数据格式

{
hook_id: self.id, # 钩子 id。
hook_url: hook_url, # 钩子路由。
hook_name: String, # 钩子名,固定为 note_hooks。
password: String, # 钩子密码。eg:123456
timestamp: Number, # 触发钩子的时间戳。eg: 1576754827988
sign: String, # 钩子根据密钥计算的签名。eg: "rLEHLuZRIQHuTPeXMib9Czoq9dVXO4TsQcmQQHtjXHA="
action: String, # 评论的动作。eg:comment
comment: *note, # 评论的数据信息。
repository: *project || null, # 评论所在仓库的信息。
project: *project || null, # 评论所在仓库的信息。
author: *user, # 评论的作者信息。
sender: *user, # 评论的作者信息。
url: String, # 这条评论在 Gitee 上的 url。eg:https://gitee.com/oschina/git-osc#note_1
note: String, # 评论内容。eg:好的东西应该开源...
noteable_type: String, # 被评论的目标类型。eg:Issue
noteable_id: Number, # 被评论的目标 id。
[issue: *issue], # 被评论的 Issue 信息。
[pull_request: *pull_request], # 被评论的 PR 信息。
title: String || null, # 被评论的目标标题。eg:这是一个 PR 标题
per_iid: String, # 被评论的目标标识。eg:IG6E9
short_commit_id: String || null, # 被平路的 commit 提交中的简短 sha。eg:51b1acb
enterprise: *enterprise || null # 被评论的目标所在的企业信息。
}