NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

公司想要大龄程序员么?

escray

学习 面试

我喜欢的工作,喜欢我么?

escray

学习 面试

大数据技术发展(三):Spark 代替 Hadoop ? Spark Or Flink ?

cristal

Java 大数据 flink hadoop spark

Week 11命题作业

Jeremy

四十不惑,准备面试

escray

学习 面试

如何通过技术面试?

escray

学习 面试

一看就懂的三次握手

书旅

TCP 三次握手 操作系统 协议族

我以后去做什么,技术还是业务?

escray

学习 面试 职业规划

【Elasticsearch 技术分享】—— Elasticsearch ?倒排索引?这都是什么?

程序员小航

elasticsearch ELK 倒排索引 ES 技术分享

MySQL系列(一):MySQL深入学习先导篇之基础架构

z小赵

MySQL 数据库

如何使 Grafana as code

郭旭东

翻译 Grafana

对于结果不同程度的追求,决定了这个人的身价

非著名程序员

程序员 个人成长 思维模型 结果思维

一个@Transaction哪里来这么多坑?

程序员DMZ

spring 事务 读写分离

一文读懂jar包的小秘密

程序那些事

Java jar jar包的小秘密 java解密

简单交互式页面的思考(C)

Alex

指针 C语言 交互设计

Week 11 学习总结

Jeremy

究竟要找什么样的工作?

escray

学习 面试

星火PLUS交易所打造无边界数字经济联盟,掀起币圈追捧热潮

InfoQ_967a83c6d0d7

再见C++

Sunny.

c++ 踩坑

终于可以职业规划了么?

escray

学习 面试

SpreadJS 应用案例:电力自动化在线数据采集报表系统

葡萄城技术团队

SpreadJS 电力 报表

Python中的bytes、str以及unicode区别

王坤祥

Python Python PEP

3 分钟生成一个单元测试报告,这个样式爱了

程序员小富

Java 测试

a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站…z站?

程序员生活志

搞一搞Elasticsearch

北漂码农有话说

我是合适的人选么?

escray

学习 面试

Flink的2种部署模式-2

小知识点

scala 大数据 flink

Docker 的前世今生

哈喽沃德先生

Docker 容器 微服务 虚拟化

联邦学习初识

soolaugust

学习

性能全开的十代酷睿,造就惠普光影精灵 6 的电竞燃魂

最新动态

Centos7下service配置知识

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