贡献代码

非常感谢能有心为WeCross贡献代码!

社区开发者可以针对代码中的BUG、不足和功能点发起Pull Request(PR)来申请对代码的修改。

社区将牢记每一份来自社区成员的贡献,并且会奖励每一位贡献者。

代码分支策略

贡献代码之前,你需要了解WeCross项目版本控制策略。WeCross采用的是git-flow的工作流程:

  • master:最新的稳定分支
  • dev:待发布的稳定分支
  • feature-xxx:一个正在开发xxx特性分支
  • bugfix-xxx:一个正在修复xxx Bug的分支

代码贡献流程

无论是修复Bug还是开发新特性,都是基于以下流程:

  • Fork项目仓库到个人仓库
  • 确定好你的工作基础,拉取相应分支并创建一个新分支
  • 编写代码以及单元测试,确保所有测试都已通过
  • 提交你的工作,具体格式详见之后的PR规范
  • CI系统会自动测试所有的提交请求,包括单元测试和集成测试;如果CI报错,请根据错误提示完成更改
  • CI通过后,你的PR将会由社区进行审核,他们可能会提出一些修改建议:
    • 完成更改后,需要重新审核你的PR
    • 如果PR过期,你可以使用GitHub的update branch按钮
    • 如果存在冲突,你可以在本地通过Rebase或者Merge解决,然后强制推送到你的PR分支;你不需要仅为解决冲突而重新审核,但是如果有重大更改,则应该申请重新审核。
  • 审核通过后会合并你的PR,感谢你的贡献

如何快速参与

如果你已经对WeCross有一定了解,并且希望能够为WeCross贡献代码,Help Wanted Issues为你列出了很多合适的开发任务,每一项都标注了难度级别,详见Task挑战介绍。当然里面也会有一些极具挑战的任务,期待极客的你迎难而上,马到功成!

如果你想搞点大事情,例如添加新的功能组件、改变目前的使用方式或者进行较大的项目优化,在实践之前请务必确保你已经在Issue区发起了一个改进提案CIP,并经过了社区的充分讨论和设计。

PR规范

为了让你的工作快速得到其它社区成员的理解和认可,每个PR需要你遵循一些比较粗略的约定,例如表达清楚你更改了什么,以及更改的原因。PR的Comment栏建议包含如下内容:

<子系统/模块>: <标注当前PR更改了什么>
<空白行>
<详细描述为什么要这样更改>
<空白行>
Signed-off-by: <你的名字> <你的电子邮箱> 

代码规范

WeCross作为开源项目,需要严格把控代码质量,增强其可读性和可扩展性,以便于其它的社区成员理解WeCross代码,并快速地加入项目的开发和维护。

代码风格

WeCross项目代码采用Google Java风格,基于Gradle插件google-java-format-gradle-plugin完成代码的格式化,提交PR之前需要执行如下命令格式化代码:

bash gradlew goJF

代码质量

WeCross项目发布新版本之前会对代码进行安全扫描和渗透测试。为了避免反复的漏洞修复和检测,在提交PR之前需要使用安全工具扫描代码,并解决报告里的中高危漏洞以及不规范的编程习惯。推荐使用

Sonarlint代码扫描工具,主流的IDE包括Idea和Eclipse都有对应的插件集成。

测试规范

为了保证代码的正确性,以及约束后续PR不会影响之前的代码逻辑,对于任何有逻辑改动的PR,都需要添加对应的单元测试。如果该PR为项目新增了功能点,那么还需要添加相应的集成测试以覆盖该功能点。

单元测试

以类为界限测试该类中所有方法的正确性,如果涉及到其它类的调用,可以使用单元测试工具Mockito模拟其它类的功能。在编写单元测试时,不仅要关注正确执行的代码流程,还要确保所有异常情况的处理都符合你的预期。务必重视单元测试,从效果上而言,单元测试就像是能执行的文档,描述了在各种条件调用这段代码时,你所期望这段代码完成的功能和效果。

集成测试

单元测试的作用收敛在了单个模块或函数,但是 WeCross是复杂的大型项目,还需要集成测试来保证所有模块组合之后整个项目依然符合预期。WeCross中的集成测试由CI触发,会搭建复杂的跨链网络,测试WeCross所有的功能点和周边组件的正确性。