在开源社区中,danger 的应用尤其广泛,它能够拿来主动判断每个人提交的代码合并申请(github 中叫 Pull Request,下文简称 PR,gitlab 中叫 Merge Request,下文简称 MR)是否符合规范,自动化一些费时费力的人工查看,从而保障代码品质,是项目管理的利器。
比方开源我的项目 styled-componet 的这个主动回复机器人就是用 danger 实现的。
Danger 最后是由 ruby 社区倒退起来,之后减少了对 js 语言的反对,衍生出 DangerJs。从它的标语中即可看出此工具存在的意义:Stop saying “you forgot to …” in code review,实际上,此工具可做的事件要远比标语中形容的多。
在整个代码合并流程中,danger 的地位通常在测试和代码规范化查看的后一步,人工查看的前一步,相当于是足球中的清道夫的角色,
danger 常见的应用场景是:通过自定制的脚本自动化解决一些劳神的人工查看。我以前在我的项目中应用 dangerjs 在 gitlab 上实现过这样的查看:合并代码时有没有勾选“合并后删除远端分支”的复选框,有没有勾选“合并时压缩 git 节点”的复选框,有没有在合并题目中写上对应电子看板的工作卡 ID 等等,如果没有操作这些则禁止代码合并,及其不便的标准了整个团队的 git 开发流程。
在上篇介绍 lerna 的文章里,用 dangerjs 实现了子项目权限查看:断定以后提交人是否满足某个目录的提交权限,不满足则不容许代码合并,成果如下图所示。
装置 Dangerjs
Dangerjs 反对 github 和 gitlab 两大代码托管平台,也反对公有 gitlab 服务器,不过它对 github 的反对最好,简略几步在即可在一个 github 我的项目中退出 danger 查看。
在你的我的项目中,dangerjs 用起来就像其余任何 npm 包一样,一行命令即可装置。(留神包名没有 js 后缀)
yarn add -D danger
设置 github 的 token
danger 须要应用你的 token 受权来做相应操作,比方增加评论到对应的 PR 下方给出提醒。你能够点击此链接在 github 上生成对应 token,token 的名称能够轻易起,权限要记得给足。
将 token 保留到环境变量中
须要把 token 的变量名命名为DANGER_GITHUB_API_TOKEN
,并且保留在 CI 的配置里,比方我在 github 中应用了 circleci 作为继续集成的工具,token 就须要保留到如下地位,见截图:
留神,如果是 gitlab 公网上的我的项目,那变量名就不一样了,需设置为 DANGER_GITLAB_API_TOKEN
, 如果是公有 gitlab 服务器,还须要增加另外一个变量DANGER_GITLAB_HOST
将地址指向你本人的服务器,详情可参考官网链接。
创立 dangerfile.js 文件
我的项目根目录下创立 dangerfile.js 文件用于编写对应的脚本,比方上面几行代码就是最罕用的写法。
import {danger, fail, warn} from 'danger'
fail('This is a failure message') // 显示一条错误信息
warn('This is a warn message') // 显示一条正告信息
const {title} = danger.github.pr
if (!title.startsWith('feature/')) {fail('题目必须要由"feature/"结尾')
}
本地测试 danger 脚本
在脚本正式推向 CI 环境前,能够本地测试一下脚本是否合乎预期。首先要创立 Pull Requst,而后获取此 PR 的地址,之后应用 npm 或者 yarn 执行命令:
yarn danger pr 创立的 PR 的地址
此时,你可能会碰到上面这样的提醒,这是因为还没有在本地设置 token 变量。
本地间接执行一下命令来申明变量即可。
export DANGER_GITHUB_API_TOKEN=xxxxxx
设置 token 变量后从新执行 danger pr
的命令。拜访对应的 PR 地址,如果看到下图这样的成果,阐明你写的 dangerjs 脚本失效了。
最初,把 yarn danger ci
或者 npm danger ci
放在你的 CI 文件中的适合地位,这样 danger 就增加实现了。
另外,你能够申请一个 github 账号名为 ’xxxx-bot’,再贴一张机器人图片作为头像,并用此账号的 token 作为变量来主动回复,最终能让整个成果更显技术含量。
能获取到的数据
除了题目之外,danger 能获取以后 PR 中的各种信息字段,比方用户信息、批改的文件、代码审核人、代码合并的配置等等,从上面的截图里蕴含了一些常用字段。
除此之外,dangerjs 的官网也给出了具体的类型数据,你能够依据须要定制合乎本人我的项目需要的查看脚本。
结语
danger 能够在合并代码时提供自定义的合并规定,能标准整个我的项目的开发流程,把它整合到 CI 中能帮你自动化很多繁琐的人工查看,无论是开源我的项目还是日常开发我的项目,danger 都是我的项目流程治理的利器,一旦试过你就再也戒不掉。
相干材料
integrate-danger-js-in-5-minutes
dangerjs 官网
文章中的 PR 地址