如果你有逛GitHub的习惯,应该就已经发现,许多知名的开源项目的README上都有着花花绿绿的各式徽章。比如说这个:
五颜六色的徽章一如游园会摊位上的饰件,吸引着人们驻足欣赏。原本平白单调的页面,装扮上这些徽章后,显得丰富多彩,给人留下了更为深刻的印象。没有这些点缀,README可能就只是一张干涩的布告。
当然,这些徽章的作用并不仅仅是装饰。大部分徽章会是某个开源项目周边服务的入口。
我第一次见到这些徽章的时候,还是在几年前。
那时候GitHub正高速发展,频频出现在各大IT媒体的报道中,围绕着它的生态圈也开始出现。正如GitHub它自己声称的,GitHub是一个同性交友social programming的平台,渐渐地各种开发者相关的业务开始在它这个平台上扎根生长。
TravisCI就是这么一家做GitHub平台生意的商家。为了推广它收费的私有仓库CI服务,TravisCI宣布,公有仓库上的CI,一律免费!酒香还怕巷子深,仅仅免费是不够的,还要宣传到众人皆知的程度。所以TravisCI想了一招,派发Travis认证徽章。凡是有着下面的徽章:
就表示该项目的程序存在单元测试且全部通过了。
这是一个双赢的决策,通过贴上徽章,开源项目可以证明自己是拥有测试的,而且能够通过所有的单元测试;同时TravisCI也借这些徽章,登上了各大开源项目的首页。现在你只要打开某个知名开源项目的GitHub页面,就能看到TravisCI的小广告徽章;再进一步点进去就到了TravisCI的网站了。到了这一步,你可能就会停下来看看TravisCI的服务,毕竟他家的服务,对于公有仓库可是免费哦!
虽然TravisCI在公有仓库上持免费策略,不过这份在线CI的生意显然是有利可图的。因为我们可以找到许多同样也是做CI的公司,如 codeship、CircleCI、shippable、appveyor 等等。可以这么说,这一块的生意已经是个红海了。这些后来者也跟TravisCI采取了同样的策略,来自GitHub或BitBucket的开源项目免费,并且派发了一模一样的徽章小广告。所以现在看到类似于的徽章,也有可能来自于其他公司的。鉴于本文仅侃侃开源项目上的那些徽章,所以就不讲述如何给开源项目做CI了。有这个需求的请点进相关公司的主页。强调下,这里只谈徽章,无心软广。对于本文中提到的任何公司或服务,本人既不对其服务质量做任何保证,亦不对其服务效果做任何评价。
给开源项目贴徽章的热潮,就这么被TravisCI带起来了。后来除了各周边业务公司会派发徽章小广告,开发者们也会制作各种徽章,既起到吸引眼球的作用,也能给自己的项目贴贴金。
除了CI徽章,出现得最多的徽章莫过于release/version类的徽章了。
这些徽章是由开发者自己定制的。shields.io提供了自定义徽章的服务,你可以自制各种release/version徽章,在填数据的时候填上项目当前的版本号,然后就能生成一个svg图像。接下来你所要做的,就是把这个图像的链接加到README上。这样别人访问你的项目主页时,就能看到一个漂亮的徽章了,感觉上了个档次呢。反正README开头那么大一块空白,除了给别人打小广告,也应该给自己留多几个位置。
还有一部分徽章上写明了该项目在pypi/npm/rubygems上的下载量。这些徽章的定制服务同样也由shields.io所提供。你所需的,只是在填写项目链接时,把自己写的库的名字填上去,shields.io自然就能够获取你的库的下载量,生成对应的徽章:
对于npm包,除了可以使用shields.io的服务,也可以通过nodei.co来生成对应的下载量徽章:
看上了GitHub开发者这块蛋糕的,不止做CI的公司。各家做团队协作的公司也接踵而来。GitHub自身就提供了issue和pull request的管理面板,不过有些时候这些面板是不够的,你可能觉得还需要更加丰富的项目管理工具。waffle.io就打算做这方面的生意。其实它提供的服务相对比较简单。它会提供个项目面板给你,这个面板会以可视化的形式显示issue和pr列表上打了不同标签的事项的情况,还有对issue/pr的处理进度,等等。这样一来,整个项目的大体情况可以更加一目了然。它同样提供了徽章,命名规律是https://badge.waffle.io/$REPO/$REPO.svg
。
跟waffle.io相似的还有一个叫issuestats的网站。你可以在这个网站上查到某个GitHub上的项目对issue和pr的平均处理时间和处理用时的分布。当你想知道某个项目的开发是否活跃,可以在这个网站上查一下;当你想声明自己的项目很活跃,也可以贴上这个网站提供的徽章,用数据说话。
项目管理所不能或缺的,除了任务列表,另一个恐怕是即时沟通工具了。虽然比起商业公司中的项目,开源项目对即时沟通协作的需求并不很大,但还是有的。一些传统的开源项目,可能会使用IRC;不过一些新潮的开源项目,可能会使用 gitter.im。gitter.im的用法就像是个QQ群,你可以给自己的项目创建一个聊天室,并在项目页面上添加这个徽章: 和对应的gitter.im聊天室链接。别人一点进去,就可以加入到你的聊天室,问你各种问题了。所以要想做个勤劳的开源项目维护者真不容易啊,除了要解决随时而来的issue和pr,如果开了gitter.im,还要挂在那里蹲守,解决各种问题。不过据我亲身体会,实际上到gitter.im问问题的人并不多。也许需要即时沟通工具更多的是使用私有仓库的开发者。
如果你更喜欢用irc,kiwiirc 提供了个web页面的irc客户端,你同样也可以找到关于它的徽章。
如果有在公司项目中做CI的经验,你应该会理解CI可不仅仅是运行单元测试那么简单。一个完整的CI,还包括对代码复杂度的分析,对常见缺陷的扫描等等。有些复杂的CI系统还会定期进行性能回归测试。对比之下,TravisCI提供的仅能运行单元测试的CI真是弱爆了。不过“市场厌恶真空”,凡是出现了真空而又有利可图的地方,自然会出现其他商家。codeclimate就是这么一家公司,它会分析项目代码的三个指标(复杂度、冗余和规范),并计算出一个最终的GPA:。你可以把这个GPA做成徽章,贴到项目主页,就跟三好学生奖状一样。当然,如果分析出来的结果很难看,就不用贴出来丢人现眼了。另外一家公司coveralls则主打覆盖率统计。它能够统计项目代码的行覆盖率,然后你可以在shields.io上制作对应的徽章。一般来说,覆盖率在70%以上就已经算是可以拿出来晒了。在shields.io上也可以看到,同样提供代码扫描/覆盖率统计服务的公司还有不少。
假如你还有什么特别的需求,完全可以在shields.io直接定制一个徽章,比如下面这个就是:
或者更霸气一点的: