AntDesign成功的背后——开源项目运营管理之道
前言
近几年,网易集团对集团内部的开源行为的鼓励和扶持力度越来越大,从去年网易技术奖(NTA)的奖项设置中,足足有三个奖项(开源引入奖、社区贡献奖、自研开源奖)与开源有关就可以看出集团对于开源行为的重视程度。
然而,无论参与社区贡献还是自研开源,都不是一件简单的事,很多刚开始非常好的项目,都因为在开源之后运营管理不善,最终变得无人问津,泯然众人矣。本人有幸参与国际知名前端框架AntDesign项目的开源贡献,并成功加入AntDesign团队,成为该项目的维护者之一。在参与该项目的维护过程中,看到了这样一个维护8年多仍然保持者极高活跃度与贡献度的项目究竟是如何管理与运转的,因此,也借此机会跟大家分享一下,希望对集团内部想要参与开源贡献的小伙伴们提供一些借鉴和帮助。
权限管理
任何一个开源项目,如果只有你一个人参与贡献,就算不上真正的开源项目。真正的开源项目,往往都是靠着开源社区的广大开源贡献者你一砖我一瓦一步步地码出来的。既然需要让其他开源贡献者一同参与项目的迭代与维护,那么,势必就需要为这些贡献者分配必要的权限,让他们更好的维护这个项目。通常,大部分的开源项目会以邀请合作者或邀请加入成为组织成员的方式让为这个项目做出较大贡献的贡献者拥有更多这个项目的权限,让他们可以更加深入的参与这个项目的维护。
拿AntDesgin项目举例:AntDesign创建了一个组织,而这个组织下面,可以让我们创建若干个团队,每个团队都可以邀请成员加入。我们可以为不同的团队开放不同的权限用以控制该组织下面的项目的维护权限。这样,我们只要建好相应的团队,如:Ant Design Collaborators的团队,然后给这个团队分配相应的权限,那么只要邀请贡献者加入这个团队,这个贡献者就自动拥有了该团队所分配的权限了。
贡献者接受了你的邀请之后,在贡献者的GitHub首页就会提示你已经加入了该团队,至此就已经完成了邀请新人的操作了。
信息沟通与消息同步机制
开源项目的贡献者遍布于全球,如果没有一个比较完善的信息沟通与同步机制的话,开发与维护的效率会受到极大的阻碍。甚至有可能出现维护者自说自话,自以为这个功能很好,但实际对用户来说没啥用的情况。
在AntDesign团队,有着多重沟通与信息同步机制,以保障维护者与用户之间,维护者与维护者之间信息沟通与同步的通畅:
-
ISSUE问题讨论
ISSUE
是GitHub
为我们提供的高效的提问与讨论渠道,用户通常会在这边提一下项目的Bug、新特性的需求以及一些使用问题。我们可以在这里贴近用户,获取用户最直接的问题和意见反馈,让项目的维护者能够始终与用户站在同一个频道上,不至于脱离用户。 -
Discussions讨论专区
在
GitHub
的讨论专区,维护者可以建立一些诸如新版本规划的讨论、对于新组件的设计细节的讨论(RFC)、以及一切与该项目有关的讨论,而用户也可以在这里创建讨论以获得其他社区成员或维护者的帮助,帮他们解决一些使用过程中的一些问题以及提出的一些具有建设性和可行性的新特性需求。 -
用户问题反馈大群(钉钉)与每周 Collaborators 同步会(钉钉)
上面两种方式其实已经覆盖了社区交流的极大部分的场景了,但有一个极大地缺陷,那就是实时性较差,用户可能反馈了一个问题,过了好几天才有维护者进行回复,又或者是维护者 PR 过程中,其他的维护者对他的代码
Review
时提了意见或建议,但 PR 的发起者可能未能明确其中的含义,期望进一步的沟通细节,此时在 ISSUE 当中一来一回的回复效率未免太低了。因此,AntDesign 为了解决上述的沟通实时性的痛点,采取了以下措施:-
用户交流群:创建用户问题反馈与交流群,用户可以在这里提一些与项目相关的 Bug 或咨询一些使用上的问题,维护者会在群里答疑跟进,拉近了维护者与用户之间的距离,同时也可以为用户提供一个相互交流与沟通的渠道,很多简单的问题,无需维护者参与,其他用户就能为你解答,可以极大的分担维护者的压力。
-
维护者交流群:创建维护者交流群,相较于用户交流群而言,该群会设立一定的入群门槛,需要对 AntDesign 有所贡献的志愿者(比如为 AntDesign 及其关联项目提 PR)才能入群。这个群的目的主要是为维护者之间相互讨论开发与设计细节提供一个平台,在这里讨论问题,比在 ISSUE 当中沟通效率得到了极大地提升。此外,也可以在群里面发布一些近期要做的任务计划等,贡献者们可以根据自己的时间安排自由认领。同时,也方便同步一些重要消息,拉齐贡献者们的认知水平。
-
定期同步会:AntDesign还会定期举行合作者同步会,同步会期间,会有同学进行相关的技术分享,如在对项目优化的过程中,遇到了哪些问题和痛点,尝试了哪些解决方案,最后又选择了哪个,选择的方案相较于其他方案有哪些优势等。这可以让贡献者们能够有更多学习与成长的机会,看看其他人遇到某些问题,是如何解决的,可以整体提升贡献者们的职业素养和专业能力。并最终会将分享内容公开加入到AntDesign官网的博客专栏Blog当中,所有对AntDesign感兴趣的同学都可以查看。
此外,如果有新的需求,我们还会在同步会上过一下 RFC,大家一起讨论新需求的设计和开发细节,力求让方案更加完善。
最后,我们还会将上一周同步会到目前为止没有处理的 ISSUE 都统一处理一下,能解决的解决,不能解决的给用户一个详细的解释后关闭,以免 ISSUE 堆积。
-
审核机制
开源社区是依靠无数的贡献者共同维护才能壮大的,但每个人的代码风格、习惯、专业能力、认知都是不一样的,因此提交上来的代码也都是千人千面的,如果没有一个完善的代码审核机制,我们的项目问题将会越来越多,最终到达完全无法维护的地步。AntDesign之所以能够在开源8年之后,依旧有着相当稳健的持续更新与相当高的用户粘性,甚至有社区同学戏称是:“年轻人最爱的开源项目”,都得益于 AntDesign 完善且缜密的代码审核机制。那么,我们来看一下,AntDesign 的审核机制究竟是怎样的呢?
-
GPT代码审核
搭上最近爆火的GPT早班车,AntDesign项目紧跟技术前沿,从各方位尝试利用GPT的能力提升项目维护的效率和体验,其中包括:对提交的 PR 生成 Review 结果、自动生成更好的 ChangeLog 等,这些改进,让我们对这个项目维护的效率和体验得到了极大地提升,也能节省我们的时间,去关注更加重要的事情。
-
人工审核
尽管目前GPT的代码评审已经越来越精准了,但还是难免有疏漏的地方,因此,我们还需要有细致的人工审核阶段。每一个 PR,都会有推荐的代码审核者,这是根据本次 PR 改动文件的历史维护者进行推荐,这样能够对这些文件进行更加细致且全面的审核,以保证提交代码的质量、风格的统一、性能的高效等。
-
Action工作流
再细致的人工审核,也总有无法兼顾的地方,比如说样式的细微改变,需要某些特殊操作才会触发的场景等等,我们不可能每一个场景都纯人工的审核校验。因此,我们利用
GitHub
的 Action 执行项目中的一些测试,如:单元测试、覆盖率测试、代码安全检测、e2e视图变更检测等等,一旦有哪一个环节出问题,我们立马就能发现,这对我们保证代码质量是尤为重要的。 -
维护者授权
当一个 PR 经过了审核,没有什么问题之后,还需要至少一个项目维护者执行 Approve 操作,代表接受本次更改,准备合并到目标分支了。如果你也是项目的维护者之一,同样也需要另一个维护者 Approve 确认后,才可以自行将 PR 合并到目标分支,以此来避免未经审核的代码直接合并到主干造成不必要的问题。
轮值管理制度
每个开源项目,维护者的数量都是有限的,他们不仅需要对项目进行日常维护与需求迭代,还需要审核其他贡献者的提交的 PR,每周需要发布一个 Patch 版本,每个月需要发布一个 Minor 版本。这样看来,每一个维护者的任务都是极其繁重的,因此,在 AntDesign 当中,施行轮值管理制度,每一个周期由一个对流程熟悉的维护者进行跟进,这个跟版的维护者是轮流担任的,这一次由 A 负责,下一次就是 B,这样,就可以让其他的维护者从这些流程当中解放出来,更多地参与其他社区工作,让社区工作有条不紊的运行。AntDesign轮值管理规则
投票机制
如果某一个贡献者对项目有了较大的贡献,可以是长期参与项目维护,可以是承接了某个大版本新特性的开发。那么,AntDesign就会触发其邀请成为团队成员的投票机制。当然,如果你自认为自己已经为该项目贡献挺多了,也可以直接到下面链接留言申请加入AntDesign团队(申请加入团队)。投票环节开启后,现有的项目维护者就会对这个人过往的贡献情况进行投票,如果觉得符合要求,我们将会向该用户发起邀请成为团队成员的邮件。
当然,除了邀请新成员加入之外,还有很多的其他场景,如果想要收集社区内的意见或建议的,也都会发起投票的形式向社区征集意见。
结语
以上是 AntDesign 团队管理开源项目的一部分流程,希望对所有对开源有兴趣的朋友有所帮助。也希望有越来越多的同学能够拥抱开源,参与开源,共建开源社区。
相信集团内部有着极为庞大的用户群体,集团内部包括但不限于:KM、OA系统等等都有在使用AntDesign,如果对这个项目有任何的意见或建议,也欢迎留言评论,也真心希望更多同学能够加入AntDesign的社区贡献,让AntDesign成为更对你胃口的项目。