# DolphinDB 开源项目贡献指南 本文档用于指导社区用户参与开源项目贡献,以及 PMC(Project Management Committee)管理项目开发与协作。 - [1 如何参与](#1-如何参与) - [1.1 项目组织结构](#11-项目组织结构) - [1.2 贡献形式](#12--贡献形式) - [1.3 开源项目列表](#13-开源项目列表) - [2 项目协作流程](#2-项目协作流程) - [2.1 开发者](#21-开发者) - [2.2 操作流程](#22-操作流程) - [2.3 项目管理者](#23-项目管理者) ## 1 如何参与 ### 1.1 项目组织结构 DolphinDB 的开源项目由 PMC(Project Management Committee) 统一管理,通常由项目的最初开发者组成,并逐步接纳优秀的社区成员。项目相关参与者包括:用户、贡献者、提交者、维护者。 项目组织结构 **PMC** 项目管理委员会,负责项目开发组织机构,对产品的发展和质量负责。一般由项目开发者组成,并且会逐步接收出色的贡献者进入 PMC。PMC 包含两类角色:maintainer、committer。 **contributor** 贡献者,愿意参与项目开发,并贡献力量的社区人员。fork 项目代码,并提交 issue,pr。 **committer** 提交者,由 contributor 晋升而来,通常是在项目日常运营过程中,得到了项目核心维护团队的认可和提名。拥有仓库的代码提交权限。 **maintainer** 具有最高决策权力的群体,决策项目发展方向,同时对项目组织各层级的成员进行提名、投票等。 **users** 使用者,在项目生命周期中发挥着重要的作用。用户可以积极地反馈软件的相关需求和问题,促进项目的不断发展。 ### 1.2 贡献形式 欢迎各位开发者积极参与到 DolphinDB 开源项目中,为 DolphinDB 的发展贡献自身的力量,星星之火可以燎原。开发者能以多种形式参与项目,对项目发展做出贡献。包括: - 报告 bug 测试合报告相关 bug,如有可能指出相关问题代码。 - 修复 bug 搜索带有 bug 标签的 issue 进行修复。 - 实现新功能 搜索带有 enhancement 标签的 issue, 选择实现相关的功能。 - 提交文档 文档对于开发人员、使用者非常关键。欢迎提交设计文档、使用文档,以及指出现有文档中的错漏之处。文档请使用 markdown 格式编写,内容需简洁、实用。 - 翻译 将现有文档翻译至其他语言(目前主要是英文)。 - 关注 关注项目本身也是一种贡献,比如点击 star,watch,帮助回答一些新人的问题等。这都有助于提升项目的热度,进而促进项目的良性发展。 ### 1.3 开源项目列表 在 github 上搜索 [DolphinDB](https://github.com/dolphindb) 。目前有以下项目开源: | **项目** | **项目说明** | **地址** | **备注** | | :--------------- | :----------------------------------------------------------- | :----------------------------------------------------------- | :----------------------------------------------------------- | | DolphinDBPlugin | C++ 编写的各种插件,扩展 DolphinDB 功能,如可以连接访问外部数据源的 MySQL、ODBC 插件等。开发前请阅读 [DolphinDB 插件开发教程](https://gitee.com/dolphindb/Tutorials_CN/blob/master/plugin_development_tutorial.md) | [GitHub - dolphindb/DolphinDBPlugin](https://github.com/dolphindb/DolphinDBPlugin) | 主开发分支:
release130: 适配 DolphinDB 1.30版本
release200: 适配 DolphinDB 2.00版本 | | DolphinDBModules | 以 DolphinDB script 编写的 package | [GitHub - dolphindb/DolphinDBModules](https://github.com/dolphindb/DolphinDBModules) | 主开发分支:master | | jdbc | Java JDBC connector | [GitHub - dolphindb/jdbc: DolphinDB JDBC](https://github.com/dolphindb/jdbc) | 主开发分支:master | | api-java | DolphinDB Java API 开发前请阅读(下同)[API 交互协议](https://gitee.com/dolphindb/Tutorials_CN/blob/master/api_protocol.md) | [GitHub - dolphindb/api-java](https://github.com/dolphindb/api-java) | 主开发分支:
release130: 适配DolphinDB 1.30版本
release200: 适配DolphinDB 2.00版本 | | api-cplusplus | DolphinDB C++ API | [GitHub - dolphindb/api-cplusplus](https://github.com/dolphindb/api-cplusplus) | 主开发分支:
release130: 适配DolphinDB 1.30版本
release200: 适配DolphinDB 2.00版本 | | api-python-cpp | DolphinDB Python API,由 C++、Python编写 | [GitHub - dolphindb/api-python-cpp: DolphinDB Python API with C++ core](https://github.com/dolphindb/api-python-cpp) | 主开发分支: release130 | | api-csharp | DolphinDB C# API | [GitHub - dolphindb/api-csharp: DolphinDB C# API](https://github.com/dolphindb/api-csharp) | 主开发分支:
release130: 适配DolphinDB 1.30版本
release200: 适配DolphinDB 2.00版本 | | api-go | DolphinDB Go API | [GitHub - dolphindb/api-go](https://github.com/dolphindb/api-go) | 主开发分支:
release130: 适配 DolphinDB 1.30版本
release200: 适配 DolphinDB 2.00版本 | | gui | 以 Java 编写的图形化工具 | [GitHub - dolphindb/gui: DophinDB Java GUI](https://github.com/dolphindb/gui) | 主开发分支:main | | api-javascript | DolphinDB JavaScript API | [GitHub - dolphindb/api-javascript](https://github.com/dolphindb/api-javascript) | 主开发分支:main | | api-rust | DolphinDB Rust API | [GitHub - dolphindb/api-rust](https://github.com/dolphindb/api-rust) | 主开发分支:master | | api-r | DolphinDB R API | [GitHub - dolphindb/api-r](https://github.com/dolphindb/api-r) | 主开发分支:master | | web | web 图形化工具 | [GitHub - dolphindb/web: DolphinDB database web management interface](https://github.com/dolphindb/web) | 主开发分支:main | | vscode-extension | VSCode 插件,可以编写调试 DolphinDB 脚本 | [GitHub - dolphindb/vscode-extension: DolphinDB VSCode Extension](https://github.com/dolphindb/vscode-extension) | 主开发分支:main | ## 2 项目协作流程 ### 2.1 开发者 大部分简单的事务可以先从 [GitHub Discussion](https://github.com/apache/airflow/discussions) 开始进行必要的讨论。如果相关行为得到确认,例如确实发现了一个 bug,能稳定复现,可以进一步提交 [issue](https://github.com/apache/airflow/issues/new/choose)。Issue 得到项目 PMC 回复后可以着手相关开发工作。最终通过提交 pr 解决问题。总体流程如图: 这里解释下几个关键行为: - Discussion 这里可以讨论问题,尤其对于不熟悉项目的人可以在这里发表讨论话题。 - Issue 已经比较确定的行为在这里报告。比如新功能需求、bug。 - PR pull request,完成相关内容开发后,向项目提交 pr。pr 应该具备以下规范: 1. 详细的解释 bug/功能,提交充分且客观的说明、证据。 2. 如果是新功能应当有测试代码、记录。 3. 不要一次提交太多的内容(这样不利于 review),推荐一次提交一个 bug 修复,或者一个功能。 4. 提交 pr 至相应分支。如果 pr 过程中分支已经更新,需要 rebase。如有冲突,请解决冲突后再提交 pr 。 - Slack 除了 github 提供的原生交流方式外,也可以在 [DolphinDB Slack](http://dolphindb.slack.com/) 中进行即时交流。 ### 2.2 操作流程 以 DolphinDBPlugin 项目为例: - 提交 issue 在 issue 界面中,提交具体问题,标题以 [label] xxx 形式,label 包括:bug,help wanted, question, enhancement 等。 提交 issue 后,耐心等待项目 Maintainer 回复,持续交流至问题解决,解决后由 Maintainer 关闭。 - PR 1. fork fork 项目至个人仓库。点击 **fork** → **Create a new fork** 即可。 2. clone 至本地 将个人仓库中的项目 clone 到本地以便后续开发。 ``` git clone https://github.com/peeyee/DolphinDBPlugin.git ``` 3. push 至个人仓库 根据需求,提交相关内容,如果是文档以 markdown 编写,代码风格请循序 [google-styleguide](https://zh-google-styleguide.readthedocs.io/en/latest/contents/)。 ``` git commit -a -m "add a document about xxx." && git push ``` 4. 提交 PR 在 dolphindb / DolphinDBPlugin 项目中,切换至 Pull requests 页面,点击 **New pull request** → **compare across forks**,选择个人仓库的分支即可。 在描述中详细说明提交的内容及必要性。输入 “#” 可以关联相关的 issue,以便 maintainer 能更好地 review。 ### 2.3 项目管理者 对 pr 进行 review,检查是否符合规范,质量,并进行相关测试。接受到 pr 后,可以在 github 上进行 review,备注 comment,要求修改或者接受 pr。 - pr review 在 **File changes** 选项中 review 相关代码,并提交 review 意见: **Approve**,接受合并。 **Request changes**,退回合并请求,给出意见并要求整改。 - pr test 除了一些简单的提交,如去除无意义代码,拼写错误,增加文档等情况,一般都是要先测试。将 pr 进行本地测试。 具体参考:[Checking out pull requests locally - GitHub Docs](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally) ,这里简单说明下关键步骤: 1. 安装 git cli Ubuntu 上安装 ``` type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y) curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ && sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ && sudo apt update \ && sudo apt install gh -y ``` 不同平台的安装参考 [GitHub - cli/cli: GitHub’s official command line tool](https://github.com/cli/cli#installation) 。 2. check out pr 在 pr 列表中找到相应内容,并复制命令: ``` gh pr checkout ``` checkout 到相应分支并进行测试,将相关测试结果反馈至 pr review 中。