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 # 被评论的目标所在的企业信息。 }