大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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:293772
用户头像

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

关注

评论

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

BI软件漫谈

格林海文

BI Tableau 帆软

量化策略APP系统开发,马丁策略交易平台

13530558032

BuildPacks 打包

Zhang

Docker image CNB OCI

火爆 GitHub!这个图像分割神器开源了

百度开发者中心

人工智能 开源 最佳实践 图像

最好用的 Angular 甘特图组件 ngx-gantt

PingCode研发中心

软件 工具 甘特图 ngx-gantt

Tron波场链智能合约系统开发案例|波场链源码搭建

Geek_23f0c3

TRONex波场智能合约 DAPP智能合约交易系统开发 波场DAPP

Socket 通信原理

一个大红包

8月日更

做正确的事情,而不是把事情做正确

非著名程序员

个人成长 提升认知 认知提升 8月日更

适女化科技(一):伪需求,真消费

脑极体

亚信数据库AIDB通过统信UOS认证,国产自主可控项目新选择

亚信AntDB数据库

国产化 国产数据库 亚信数据库AIDB

跨团队项目的集成测试实践分享

PingCode研发中心

软件测试 测试

Agora 教程丨一个典型案例,教你如何使用水晶球“数据洞察”

声网

Agora 教程 水晶球

干货!DataPipeline2021数据管理与创新大会全篇划重点

DataPipeline数见科技

大数据 数据融合 数据管理

项目进度经常超时怎么办?项目经理如何有效管理项目进度?

优秀

项目管理工具

Python代码阅读(第16篇):列表求差集

Felix

Python 编程 Code Programing 阅读代码

Go- switch-case结构

HelloBug

Go 语言 switch case

docker概念很乱?俺来替你理一下!

Java Docker 架构 后端

ipfs矿机公司哪家好?ipfs矿机公司实力排行?

分布式存储 Filecoin ipfs挖矿 ipfs矿机 ipfs矿商排名

英特尔CEO帕特·基辛格:面向未来的数字化需求,推进未来计算创新、探索与颠覆

科技新消息

上游思维:凭一己之力能做些什么?

石云升

读书笔记 8月日更 上游思维

Vue进阶(五十九):ES数组操作:splice() 实现数组删除、替换、增加指定元素

No Silver Bullet

Vue 8月日更 splice

探索技术与应用融合的区块链 实现产业良性发展

CECBC

模块五:微博评论模块高性能高可用计算架构设计

kk

架构实战营

InnoDB 表空间

leonsh

MySQL innodb 表空间

Go- 函数返回值

HelloBug

函数 返回值 Go 语言

云与AI真的能互相成就?还是最好各自独立行走?

脑极体

快手基于 Flink 构建实时数仓场景化实践

阿里云大数据AI技术

Go- for循环

HelloBug

for Go 语言

再也不怕 JavaScript 报错了,怎么看怎么处理都在这

前端依依

学习 技术 大前端 js

Go- break和continue

HelloBug

Go 语言 break continue

Go- goto和label

HelloBug

Go 语言 goto label

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