如何参与 Databend 开源协作

Databend 是一个开源的云数仓项目,这意味着你可以轻松参与“设计->研发->使用->反馈”的整个链路。这篇文章总结了参与 Databend 开源协作时需要注意的一些事项,以使贡献流程更加清晰和透明。

在这篇文章中,主要从“沟通”和“实施”两个方面介绍 Databend 的开源协作。

沟通

沟通是参与开源的重要环节,正是得益于开源世界中沟通的公开与透明,才能迸发出如此生机与活力。

参与 Databend 开源协作的主要沟通方式有 Issues 、RFCs 以及 Channels 三种。

Issues

Issues 通常用于 Bug 反馈和新特性请求,Databend 使用 GitHub Issues 来跟踪和管理这些反馈。

https://github.com/datafuselabs/databend/issues/new/choose

Bug 反馈

Databend 提供了一个基本的 Bug 反馈模板以确保沟通的顺畅进行。

在进行 Bug 反馈之前,请检索是否存在已知的解决方案,并确定你正在运行的版本,最好包含 commit id

当然,提供清晰的问题描述和可复现步骤也是非常重要的环节。

好例子:https://github.com/datafuselabs/databend/issues/6564

Databend 的迭代速度非常快,每天都会发布新的 nightly 供用户尝鲜,建议尝试新版本以确定能否复现。

新特性请求

对于新特性请求,请尽可能提供详细的描述或是预期的行为,如果有可以参考的文档就更好了。

好例子:https://github.com/datafuselabs/databend/issues/5979

RFCs

对于小的功能点,打开 Issues 进行沟通就足够了。而大的功能、设计上的变动或者是需要充分讨论和同步的想法,请以 RFC 的形式提交。

在设计和沟通的早期阶段,推荐使用 Discusssions 进行讨论。

一旦确认实施和落地,提交 RFC 文档并建立用于跟踪的 Issues 则是更为合适的做法。

好例子:https://github.com/datafuselabs/databend/discussions/5438

Channels

Channels 通常用于一般的交流和讨论,Databend 团队鼓励使用 GitHub Discusssions 进行一般问题的咨询和讨论,形成一个“知识库”,方便检索和参与。

当然,Databend 也提供 Slack 频道和微信群用于日常交流与讨论。

Slack:https://link.databend.rs/join-slack

实施

进入到实施环节,你将亲自动手改进 Databend 的代码或者文档,并踏上成为 Databend 维护者的道路,接下来让我们一起看一下有哪些环节需要重视。

编码

前置环境

在「Databend 贡献之路 | 如何设置 Databend 开发环境」一文中,已经详细介绍过如何配置 Databend 开发环境。

需要注意的是,考虑到不同系统和发行版之间的差异,你可能需要自行安装 gccpythonopenssl 等相关基础程序。

代码文档

任何公共字段、函数和方法都应该用 Rustdoc 进行文档化。

必要的时候,请使用 Diagon 或其他 ASCII 图像生成器生成示意图以对设计进行充分描述。

下面给出一个简单的例子:

/// Represents (x, y) of a 2-dimensional grid
///
/// A line is defined by 2 instances.
/// A plane is defined by 3 instances.
#[repr(C)]
struct Point {
    x: i32,
    y: i32,
}

文档

前置环境

本机上需要安装有用于 node 环境管理的 nvm ,以及用于 node 依赖管理的 yarn

文档的开发环节需要进入 website 目录后根据 README.md 中的描述进行配置。

通常情况下,包含以下步骤:

  • 使用指定的 node 版本:nvm use
  • 安装依赖:yarn install
  • 本地预览:yarn start

重要提示

文档应当正确放置在 docs 目录下,请本地预览确认无误后再进行提交。

最终文档会托管到 https://databend.rs

准备

License 检查

如果引入了新文件,建议执行 License 以确认是否添加了合适的许可信息。对于非代码文件,可能需要编辑 .licenserc.yaml 以跳过检查。

make check-license

代码风格

请运行下述命令以完成代码风格的统一:

make lint

依赖审计

如果你引入了一些新的依赖项,可以使用:

cargo udeps --workspace
cargo audit

测试

在「Databend 贡献之路 | 如何为 Databend 添加新的测试」中,已经对测试做了详细的描述。

通常情况下,使用 make test 一次性执行 单元测试功能测试 就可以。

但是,也建议执行 集群 相关的测试,以确保分布式执行不会出现差错。

拉请求(Pull Request)

一般流程

  • 分叉 Databend 的 repo 并从 main 创建分支。
  • 如果不存在跟踪的问题,请打开一个对应的问题并提供上下文
  • 提交一份「草稿请求(Draft Pull Request)」,以标记你正在进行相关工作。
  • 如果涉及编写代码,请添加对应的单元测试。
  • 进行测试,验证并确保测试套件通过。
  • 确保代码能够通过风格审计,make lint
  • 将状态更改为「准备检查(Ready for review)」。
  • 当心 @mergify 的回复,它会提供一些指导。

PR 标题填写

PR 标题需要符合 <类型>(<范围>): <描述> 的约束。

fix(query): fix group by string bug
^--^  ^------------^
|     |
|     +-> Summary in present tense.
|
+-------> Type: feat, fix, refactor, ci, build, docs, website, chore

PR 模板填写

Databend 提供了一个基本的 PR 模板,请不要修改模板上下文,并填充对本次 PR 的总结信息,包括是否修复/修复了哪个已知的 Issue 。

I hereby agree to the terms of the CLA available at: https://databend.rs/dev/policies/cla/

## Summary

Summary about this PR

Fixes #issue

好例子:https://github.com/datafuselabs/databend/pull/6665

持续集成

持续集成相关的文件位于 .github 目录中的 actionsworkflows 目录下。

文档

文档相关的持续集成会通过 Vercel 进行,需要关注 Status ,并点击 Visit Preview 查看渲染情况。

检查

包括 License 检查、代码风格检查、依赖关系审计等内容。

  • Dev Linux / check (pull_request)

构建

主要是测试跨平台构建,主要是针对 x86_64 和 aarch64 架构,对 Linux 的 GNU 和 MUSL 支持处于第一优先级别。MacOS 虽然标记为 optional ,但是需要尽量保证。

  • Dev MacOS / build_x86_64_macos(optional)
  • Dev MacOS / build_aarch64_macos(optional)
  • Dev Linux / build_x86_64_gnu (pull_request)
  • Dev Linux / build_aarch64_gnu (pull_request)
  • Dev Linux / build_x86_64_musl (pull_request)
  • Dev Linux / build_aarch64_musl (pull_request)
  • Dev Linux / build_hive (pull_request)

测试

主要是执行各种测试确保代码和功能都符合要求,包括单元测试、功能测试、分布式测试、模糊测试等:

  • Dev Linux / test_unit (pull_request)
  • Dev Linux / test_metactl (pull_request)
  • Dev Linux / test_compat (pull_request)
  • Dev Linux / test_meta_cluster (pull_request)
  • Dev Linux / test_stateless_standalone_linux (pull_request)
  • Dev Linux / test_stateless_cluster_linux (pull_request)
  • Dev Linux / test_sqllogic_standalone_linux (pull_request)
  • Dev Linux / test_stateful_standalone_linux (pull_request)
  • Dev Linux / test_fuzz_standalone_linux (pull_request)
  • Dev Linux / test_stateful_hive_standalone (pull_request)
  • Dev MacOS / test_stateless_cluster_macos(optional)

合并

有两位或两位以上维护者投下赞同票,并满足下述条件,Mergify 将会帮助我们完成代码合并工作:

  • 所有测试都通过
  • 所有审核意见都已经解决
  • 没有代码冲突

在合并之后,你的 git name 将收集在 Databend 的 system.contributors 表中,在新版本 release 之后,执行 SELECT * FROM system.contributors 即可查看。