Github Issue Robot 思路

需求

在项目开源(公开)后,使用者会对项目提供意见、反馈、建议等。这些issue当中会存在「不合要求」的issue,并对项目开发产生干扰。

在这种情况下,假设出现了「不合格」的issue,如果要进行人工处理,将是比较庞大的工作,而我们并不期望这些琐事占用我们太多的时间。

目标

使用🤖来判断issue是否「合格」。如果「不合格」,则直接关闭issue。

实现

基于以上,我们要构建这样的🤖,需要具备:

  1. 项目本身要有Webhook可被调用
  2. 机器人要有对项目的权限

Github配置

  1. 开通项目的Webhook,并设置screctpayload地址(回调)
  2. 为机器人开通帐号,并获取身份标识token

基本时序

程序由webhook触发,因此本程序是一个服务端运行的程序。具体时序图:

sequenceDiagram
Github->>Robot: Here is a new event
Note right of Robot: Robot think How to deal with the event?
Robot->>Github: Deal it follow my opinion

流程

当接受到一次调用,程序处理逻辑:

graph TB
recieve[recieve event]-->type{type?}
type--> |created| judge{is valid?}
type--> |other| nothing[nothing to do]
judge--> |invalid| nothing
judge--> |valid| order[invoke github hook]
order--> addComment[add comment]
order--> addLabel[add label]
addComment-->close
addLabel-->close

实现

搭建框架

由于是纯接口操作,我们只需要构建一个服务端。本质上用任何一个可实现服务端的语言/框架都可以,选择我们较为熟悉的js语法,并通过node来构建web服务。为了减少底层工作,比如「文件操作」、「HTTP协议」处理,我们选择让koa框架来处理这些事,我们专注于自身业务逻辑。

模块划分

  1. 主模块 用来整合其他模块并处理网络请求
  2. github模块 处理向github发送的各种命令
  3. 日志模块 调试用,并记录请求
  4. 业务逻辑模块 对接受到的消息进行判断和处理

参考

  1. https://github.com/ant-design/ant-bot
  2. https://github.com/iview/iview-bot