写点什么

GitHub 项目的同行审查自动化工具

  • 2015-07-31
  • 本文字数:2007 字

    阅读完需:约 7 分钟

作为一名程序员,肯定听说过 GitHub。作为全球最大的社交编程及代码托管网站,GitHub 允许程序员们分享和协作开发开源项目。对于微软的开源软件工程师 Felix Rieseberg 来说,他们的团队有时会在 GitHub 上,通过撰写研究案例的方式向微软内部和外部的工程师们来介绍他们所做的一些具有技术含量的工作。为了在研究案例发布之后尽量少发现错误,在将案例合并到代码库之前通过一些同行评审(peer review,PR)是必要的过程。假如用户的博客是一个 GitHub 的页面,意味着每一个后面增加到网站的 post 都是以 pull request 的形式。然而检查和跟踪 GitHub 上同行评审的 pull request 是相当繁琐的工作,因此 Felix Rieseberg 编写了一个基于 Node.js 的机器人来自动化整个流程。

管理工作流程很困难

管理同行评审工作的流程并不是一件有趣的事情。根据团队的规模,可能同时有一大堆的 pull request,如果再加上团队的工程文化比较好,会经常提前收集一些反馈信息,这就意味着 pull request 列表中会有各种不同阶段的 pull request,导致同行评审工作的流程变得困难。

有人会认为自我管理是一个很好的解决方案,的确现实中往往也是这样的。很多团队对一些未完成的 pull request 仅仅是在标题中加上一个“WIP”或“wip”的标签,任何人打开这个 pull request,它都会被更新。对一个极具创意和非常有成效的团队来说,如果是通过手动的方式检查和跟踪研究案例的状态,比如它们在哪里评审,以及它们是否已经准备好发布等,这往往是说不过去的。

自动化却很容易

代替雇人去不断检查所有 pull request,Rieseberg 决定自己开发一个自动化工具,通过注册了一个小的 Node.js 机器人,可以对以下事件作出响应:

  • 检查是否有新的 pull request 被打开或对已有的 pull request 有新的评论。
  • 如果有,机器人从 GitHub 上收集关于 pull request 的最新信息。
  • 一旦得到信息,检查 pull request 是否已被标记。如果它被标记为“no-review”或“peer-reviewed”,停止一切动作。
  • 如果还没有这样做,发表评论来对过程进行解释。
  • 如果其他人已经评论过,检查是否收到了足够的’LGTM’或’ Looks good to me! “评论。如果收到,更新标签。
  • 如果机器人被配置为允许自动合并 pull request,让 GitHub 合并它。如果 pull request 是不可以合并的,GitHub 会自动拒绝。

在这种情况下,这个机器人还只是单一接口的小规模应用程序:

复制代码
http://botaddress.com/pullrequests

一个 GET HTTP 请求为打开的 pull request 检查配置,而 POST HTTP request 需要一个 GitHub 风格 JSON 有效载荷,并且仅仅处理提到的 pull request。

自行构建机器人

除了简要介绍他们的自动化机器人,Felix 还为读者提供了如何自行构建机器人的方法。如果想查看代码库中 pull request 的同行评审,在开始之前,需要做一些必要的准备工作:

为机器人创建一个 GitHub 用户

机器人需要一个 GitHub 用户来与 GitHub 交互。在 GitHub 网页上,可以使用已有的用户,或者从众多的机器人( Terminator,Tinman,Bender )中选择一个,创建一个新用户。
虽然机器人使用用户名 / 密码组合就可以正常工作,但我们还是建议建立一个 OAuth2 令牌。 GitHub 上有 API 速率限制, OAuth 认证的机器人可以获得更高一些的速率。

部署机器人

如果是使用 Azure,建立一个机器人大约只需要一分钟。只需导航到同行评审机器人的代码库,并点击“Deploy to Azure '按钮。 Azure 的部署向导会自动为用户创建一个网站,而且还会为配置机器人设置环境变量。

如果是使用其他平台,确保是在运行的节点(至少在 0.10.x)上。然后,通过直接编辑 config.js 或通过设置环境变量来设置配置。选项如下:

  • User 拥有代码库的用户 / 组织
  • repo 代码库(研究案例)
  • botUser 机器人的 GitHub 用户名
  • botPassword 机器人的 Github 密码
  • labelReviewed 表示获得足够的同行评审的标签名
  • labelNeedsreview 表示没有同行评审的标签名
  • reviewsNeeded 需要的评审数量
  • instructionsComment 当一个新 PR 打开,机器人发布的评论,如果在评论中使用 reviewsNeeded,它会自动替换为需要的评审数量
  • mergeOnReview(默认值:false) 如果设置为 true,机器人会自动合并 PR,并迅速将其当做评审过的 PR
  • pullRequestsStatus(默认:open)pull request 状态。选项包括:all|open|closed
  • oauth2token 如果设置,将使用 OAuth 令牌代替用户名 / 密码组合对机器人验证。
  • excludeLabels 如果设置,机器人会自动忽略带有“no-review”、“ i-hate-reviews”标签的 PR。

配置完成后,使用 npm start 或 node ./bin/www 启动机器人。这样,一个机器人就可以帮助管理同行评审工作流了,而程序员则可以将精力放在更需要他们的地方。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-07-31 01:293820
用户头像

发布了 268 篇内容, 共 138.3 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

OpenHarmony Meetup 广州站 OpenHarmony正当时—技术开源

OpenHarmony开发者

OpenHarmony

学习Java 8 Stream,提升编码能力!

互联网工科生

Java stream Java11 Stream API

React和Vue的区别,大家怎么看?

FinFish

Vue React 小程序容器 混合app

NFTScan | 08.07~08.13 NFT 市场热点汇总

NFT Research

NFT\

亚信科技AntDB &U8 cloud联合产品亮相U8 cloud信创云ERP新品体验会(西安站)

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 8 月 PK 榜

湖仓一体:国产基础软件的创新突破与弯道超车

极客天地

【墨菲安全实验室】Smartbi未授权设置Token回调地址获取管理员权限

墨菲安全

网络安全 安全 BI

软件测试/测试开发丨Python 虚拟环境及pip环境管理

测试人

Python 程序员 软件测试 测试开发

ByConity 首次 TPC-DS 测试结果发布 & 新活动邀请!

字节跳动开源

大数据 开源 字节跳动 数仓 社区

生成式AI在电信行业的有所为与有所不为

百度开发者中心

人工智能 文心一言

生成式AI:未来内容产业的变革力量

百度开发者中心

人工智能 百度文心一言

2023-08-14:用go语言写算法。给出两个长度相同的字符串 str1 和 str2 请你帮忙判断字符串 str1 能不能在 零次 或 多次 转化 后变成字符串 str2 每一次转化时,你可以将

福大大架构师每日一题

福大大架构师每日一题

【墨菲安全实验室】 Apache Airflow Drill Provider < 2.4.3 存在任意文件读取漏洞(CVE-2023-39553)

墨菲安全

Apache 网络安全 安全 漏洞 apache 社区

软件测试/测试开发丨Python 常用第三方库 yaml

测试人

Python 程序员 软件测试 测试开发

深度学习入门

统信软件

如何选择最佳的文件传输协议?(FTP、TFTP、Raysync)

镭速

文件传输协议

SaaS出海:黄粱易得,黄金难收

ToB行业头条

面部表情识别研究:解读情绪的密码

数据堂

使用FTP文件传输协议的潜在风险

镭速

文件传输协议

生成式AI:人工智能新生产力

百度开发者中心

人工智能 百度文心一言

生成式AI发展前景展望:创新、应用与市场规模

百度开发者中心

人工智能 百度文心一言

生成式AI助力人工智能下半场

百度开发者中心

人工智能 百度文心一言

RHG之人工智能漏洞挖掘

云起无垠

更方便的集成使用!IoTDB plugin 上线 Grafana 官网!

Apache IoTDB

软件测试/测试开发丨Python 模块与包 学习笔记

测试人

Python 程序员 软件测试 测试开发

IT工程化,提升数科公司运营能力

用友BIP

数科公司

面部表情识别技术的伦理问题与应对策略

数据堂

SpringBoot有几种获取Request对象的方法?

王磊

java面试

面部表情识别:心理学与计算机科学的交汇点

数据堂

GitHub项目的同行审查自动化工具_GitHub_张天雷_InfoQ精选文章