如何区分Gitlab Webhook中action为update的merge_request事件及操作标识?
区分GitLab Webhook中action为update的Merge Request事件
可以通过Webhook Payload里的changes字段及特定属性的变更,精准区分不同类型的update操作:
一、识别「标记为Ready」的操作
当把草稿/进行中(WIP/Draft)状态的MR切换为Ready时,Payload会出现以下明确特征:
object_attributes[work_in_progress]值从true变为false(GitLab 14.0+版本中object_attributes[draft]字段与该字段等价)changes字段会包含work_in_progress(或draft)的变更记录,示例:
"changes": { "work_in_progress": { "previous": true, "current": false } }
非草稿MR的普通编辑(比如修改标题、描述)不会触发这个字段的变更,以此就能和普通编辑操作区分开。
二、识别「解决所有线程」的操作
执行「解决所有线程」操作时,Payload的action仍为update,但会包含专属标识:
object_attributes[resolved_all_discussions]被设为truechanges字段中会出现该属性的变更记录,示例:
"changes": { "resolved_all_discussions": { "previous": false, "current": true } }
单独解决单个线程不会触发这个字段的变更,只有一次性解决所有讨论线程时才会出现该记录。
三、区分标签变更操作
标签变更时,changes字段会包含labels的变更明细,示例:
"changes": { "labels": { "previous": [{"id": 123, "title": "bug"}], "current": [{"id": 123, "title": "bug"}, {"id": 456, "title": "reviewed"}] } }
此时work_in_progress和resolved_all_discussions字段不会发生变化,可直接与前两种操作区分。
内容的提问来源于stack exchange,提问作者gobsej
相关产品推荐
相关产品推荐

