|
1 | 1 | # ospp-cr-bot |
2 | 2 | 开源之夏 - 一种通用的 Code Review 机器人 |
3 | 3 |
|
| 4 | +## 背景 |
| 5 | + |
| 6 | +Code Review 是软件研发协作中的重要⼀环,⼤家在代码提交后都需要等待 Reviewer 的 Review;同时当Reviewer 提交了“修改建议”后,PR/MR 的提交者还需要根据“修改建议”相 应更新⾃⼰的代码。在这个过程中可能代码提交者等了半天也没有⼈来 Review,或者 Reviewer 提交了“修改建议”后等了半天也没有看到提交者修改。所以各⽅及时收到“动作通知”,⾼效完成⾃⼰的“Review/Fix”⼯作是⾮常重要的。 |
| 7 | + |
| 8 | +## 目标 |
| 9 | + |
| 10 | +1. 通过 webhook 实现通过对 GitHub 的 PR/MR/Review/Comment 等事件的监听 |
| 11 | +2. 创建⻜书机器⼈应⽤,并调⽤ fastwego 的⻜书 SDK 实现对⻜书机器⼈发送消息函数 的封装 |
| 12 | +3. 设计配置⽂件格式,使项⽬可以优雅的读⼊⻜书号/群 与 Github/Gitlab Repo 之间 的映射关系 |
| 13 | +4. 实现对推送⼈的持续通知等需求 |
| 14 | +5. 通过 helm 完成部署 |
| 15 | + |
| 16 | +> Ref: https://summer-ospp.ac.cn/#/org/prodetail/22abc0185 |
| 17 | +
|
| 18 | +## 方案 |
| 19 | + |
| 20 | +### 整体架构 |
| 21 | + |
| 22 | + |
| 23 | + |
| 24 | +### 业务流程时序图 |
| 25 | + |
| 26 | + |
| 27 | + |
| 28 | +## ShowCase |
| 29 | + |
| 30 | + |
| 31 | + |
| 32 | +## 私有化指南 |
| 33 | + |
| 34 | +### 部署指南 |
| 35 | + |
| 36 | +1. 创建飞书应用 |
| 37 | + |
| 38 | +在飞书开放平台的开发中后台(https://open.feishu.cn/app)创建应用。 |
| 39 | + |
| 40 | + |
| 41 | + |
| 42 | +2. 项目启动配置 |
| 43 | + |
| 44 | + |
| 45 | + |
| 46 | + |
| 47 | + |
| 48 | +在应用根目录下创建 .env文件, 填入如上四个凭证: |
| 49 | + |
| 50 | +```yaml |
| 51 | + LarkAppId=cli_xxx |
| 52 | + LarkAppSecret=xxx |
| 53 | + VerificationToken=xxx |
| 54 | + EncryptKey=xxx |
| 55 | +``` |
| 56 | + |
| 57 | +在权限管理中为应用开通必要权限 |
| 58 | + |
| 59 | + |
| 60 | + |
| 61 | +在 事件订阅/应用功能-机器人 中分别填入接口 URL 做鉴权,URL 分别为: |
| 62 | + |
| 63 | +```bash |
| 64 | +http://domain:port/api/lark/cardCallback |
| 65 | +http://domain:port/api/lark/callback |
| 66 | +``` |
| 67 | + |
| 68 | + |
| 69 | + |
| 70 | + |
| 71 | + |
| 72 | +3. 获取群聊 ID 及用户 ID 并配置 yaml 文件 |
| 73 | + |
| 74 | +启动应用后,在需要订阅消息的群聊中@cr-bot,会收到以 @oc_ 开头的一串字符,此为该群聊群号,向 bot 发送私聊消息 ID 会收到以 @ou_ 开头的一串字符,此为该用户 ID |
| 75 | + |
| 76 | + |
| 77 | + |
| 78 | + |
| 79 | + |
| 80 | +此时可参照 common.yaml.example 文件填写 bot 配置并创建 common.yaml 文件: |
| 81 | + |
| 82 | +```yaml |
| 83 | +tasks: |
| 84 | +- name: "Task 1" |
| 85 | + repo: lyleshaw/repoTest // GitHub URL |
| 86 | + repoType: github // 仓库类型,可选 github 和 gitlab |
| 87 | + receiver: oc_xxxxxxxx // 该仓库指定的群聊 |
| 88 | + pushChannel: lark // 推送渠道,可选 lark 和 slack |
| 89 | +maps: |
| 90 | +- name: "1" |
| 91 | + github: lyleshaw // github ID |
| 92 | + lark: ou_xxxxxx // 飞书用户 ID |
| 93 | + role: member // 角色 |
| 94 | + boss: 0 // 上级的 GitHub 账号,若无则填 0 |
| 95 | +- name: "2" |
| 96 | + github: abc |
| 97 | + lark: ou_xxxxxx |
| 98 | + role: contributor |
| 99 | + boss: lyleshaw |
| 100 | +scheduler: |
| 101 | + - timeUnread1: 30 // PR/Issue 消息第一次发送消息后若未读,经过 TimeUnread1 分钟后重发 |
| 102 | + - timeUnread2: 30 // PR/Issue 消息第二次发送消息后若未读,经过 TimeUnread2 分钟后发送给上级 |
| 103 | + - timeUnread3: 660 // PR/Issue 消息第三次发送消息后若未读,经过 TimeUnread3 分钟后抄送群聊 |
| 104 | + - commentUnread: 60 // Comment 消息第一次发送后若未读,经过 CommentUnread 分钟后抄送群聊 |
| 105 | +``` |
| 106 | +
|
| 107 | +修改完配置后,重启项目即可开始使用 |
| 108 | +
|
| 109 | +### 修改指南 |
| 110 | +
|
| 111 | +1. 修改升级逻辑 |
| 112 | +
|
| 113 | +见 internal/pkg/eventListener/eventListener.go 文件及其注释 |
| 114 | +
|
| 115 | +2. 修改推送内容 |
| 116 | + |
| 117 | +参考 https://open.feishu.cn/tool/cardbuilder?from=howtoguide 搭建消息卡片,并修改 internal/pkg/pushChannel/lark/messageTemplate 下的文件 |
| 118 | +
|
| 119 | +## Check List |
| 120 | +- [x] 主体功能 |
| 121 | + - [x] 读取配置 |
| 122 | + - [x] GitHub 消息接收 |
| 123 | + - [x] PR |
| 124 | + - [x] Issue |
| 125 | + - [x] Comment |
| 126 | + - [x] Review |
| 127 | + - [x] 飞书消息卡片 |
| 128 | + - [x] PR |
| 129 | + - [x] Issue |
| 130 | + - [x] Comment |
| 131 | + - [x] Review |
| 132 | + - [x] 消息升级 |
| 133 | + - [x] PR/Issue 30 分钟后未读重复提醒 |
| 134 | + - [x] PR/Issue 60 分钟后未读提醒上级 |
| 135 | + - [x] PR/Issue 12 小时后未读抄送群聊 |
| 136 | + - [x] Comment/Review 无@成员抄送群聊 |
| 137 | + - [x] Comment/Review 有@成员提醒 |
| 138 | + - [x] Comment/Review 有@成员 30 分钟后未读抄送群聊 |
| 139 | + - [ ] Helm 部署 |
| 140 | +- [x] 测试 |
| 141 | + - [x] PR/Issue 部分 |
| 142 | + - [x] Comment/Review 部分 |
| 143 | +- [x] 代码优化 |
| 144 | + - [x] Log 打点 |
| 145 | + - [x] 细节 |
| 146 | +- [ ] 后续支持 |
| 147 | + - [ ] Slack 支持 |
| 148 | + - [ ] GitLab 支持 |
| 149 | +======= |
4 | 150 | ## How to Build |
5 | 151 |
|
6 | 152 | ```bash |
@@ -50,4 +196,4 @@ tasks: |
50 | 196 | 请在启动服务后,拉入群聊并 @cr-bot-test,bot 会获取你的 Lark ID 并回复。 |
51 | 197 |
|
52 | 198 |  |
53 | | - |
| 199 | + |
0 commit comments