50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

No qualifying bean of type

0x5d0de9

java spring-boot

高规格、高并发、即开即用:和鲸携手北中医,打造 AI 人才选拔的最佳实践

ModelWhale

人工智能 大数据 高等教育 人才选拔 实践考核

CODING 界面全新升级,代码仓库 Rebase 变基合并、批量复制事项等功能上线!

CODING DevOps

低代码平台为企业应用开发提速

树上有只程序猿

低代码

GraphQL 查询使用指南:语法示例和最佳实践

Apifox

最佳实践 前端 后端 API graphql

低代码:避免重复造轮子的高效工具

互联网工科生

低代码 造轮子 JNPF

统一观测丨使用 Prometheus 监控 SQL Server 最佳实践

阿里巴巴云原生

阿里云 云原生 Prometheus

golang面试基础-sync.map

Quincy

golang 数据结构 面试 后端

Chrome 118 版本中的新功能

南城FE

CSS chrome 前端 浏览器

是否拥有具身智能,是扫地机器人能否打破“内卷”的关键

脑极体

AI 智能扫地机器人

以科技力量引领医疗数字化转型,英特尔携手中移动成研院打造边缘融合算力网络解决方案

E科讯

PPT制作软件哪个好?各种类型的10款好用PPT软件盘点!

彭宏豪95

效率 PPT PPT模板 办公软件 效率办公

Cloud Kernel SIG 月度动态:发布多个 ANCK 版本,引入多个第三方硬件驱动

OpenAnolis小助手

Linux 龙蜥社区 anck kernel 龙蜥sig

1000字扫盲RTC

X2Rtc

开源 音视频 CDN RTC

鹅厂练习 13 年 Coding 后,我悟了

CODING DevOps

如何通过 NFTScan API 按照 NFT 合约地址检索数据?

NFT Research

NFT NFT\ NFTScan

文心一言 VS 讯飞星火 VS chatgpt (112)-- 算法导论10.2 3题

福大大架构师每日一题

福大大架构师每日一题

一个“旷世“难题:IT团队的绩效要不要跟企业经营结果挂钩

凌晞

团队管理 高绩效团队

与领航者共话湖仓, StarRocks Summit 2023 技术专场分论坛剧透来了!

StarRocks

StarRocks 湖仓 新范式

MetaGPT( The Multi-Agent Framework):颠覆AI开发的革命性多智能体元编程框架

汀丶人工智能

人工智能 深度强化学习 大语言模型 多智能体

下载安装Ipa Guard

基于 EventBridge 轻松搭建消息集成应用

阿里巴巴云原生

阿里云 云原生 EventBridge

全力以赴,火山引擎边缘云代表团出战亚运会

火山引擎边缘云

电竞 边缘云 边缘云原生 亚运会

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