在 GitHub 上贡献代码分为三步:
- Fork 项目
- 创建 ISSUE
- 创建 Pull Request
1、Fork 项目
2、创建 ISSUE
ISSUE 需要以固定的前缀开头:
- RBIP-*: 是标识有特性和功能添加,比如 RBIP-09,RBIP-10,后面的序号是递增的。
- BUG: 表示这是一个 Bug。则可以 BUG:开头,接标题。
- MINOR:标识是修复或者增加一些小的功能。则可以 MINOR:开头,接标题。
示例如下:
3、提交 PR 失败的原因
License 错误
License checker / license-header-check (pull_request) 失败。 有的文件没加 License, 需要加一下,最好每次提交前执行下检查命令.
cargo install hawkeye
# 当前项目下执行, 检测有哪些文件没有加 License
hawkeye check
# 自动没每个代码文件加上 License
hawkeye format
标题格式错误
PR Title Checker / check (pull_request_target) 这个失败是 PR 的标题格式错误
前缀: 标题
前缀有这些选项:feat|fix|test|refactor|chore|style|docs|perf|build|ci|revert
feat: 新功能(feature)
例如:feat: Compatible with Rocksdb
fix: 修复 bug
docs: 文档变更
style: 代码风格变动(不影响代码逻辑),用于提交仅格式化、标点符号、空白等不影响代码运行的变更。
refactor: 代码重构(既不是新增功能也不是修复bug的代码更改)
perf: 性能优化
test: 添加或修改测试
chore: 杂项(构建过程或辅助工具的变动)
build: 构建系统或外部依赖项的变更
ci: 持续集成配置的变更,配置文件和脚本的修改。
revert: 回滚
3. 提交检查
检查代码格式
为了规范代码编写风格,RobustMQ 依赖 cargo fmt、cargo clippy 工具来规范代码,代码提交前可以在根目录执行下”sh codecheck.sh”,检查代码风格,根据提示进行修改,只要脚本执行成功,没有提示,则表示代码风格没问题。成功示例如下:
FWR3KG21WF:robustmq $ sh codecheck.sh
2024-10-21T23:27:58.725602+08:00 INFO hawkeye_fmt::git: git.rs:56 git config is resolved to enabled
2024-10-21T23:27:58.937762+08:00 INFO hawkeye::subcommand: subcommand.rs:191 All files have proper header.
warning: `/Users/.cargo/config` is deprecated in favor of `config.toml`
note: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`
warning: `/Users/.cargo/config` is deprecated in favor of `config.toml`
note: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`
warning: `/Users/.cargo/config` is deprecated in favor of `config.toml`
note: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`
warning: /Users/Desktop/code/robustmq-project/robustmq/Cargo.toml: unused manifest key: workspace.package.*
warning: /Users/Desktop/code/robustmq-project/robustmq/Cargo.toml: unused manifest key: workspace.package.journal-server
Compiling protocol v0.1.0-beta (/Users/Desktop/code/robustmq-project/robustmq/src/protocol)
Checking metadata-struct v0.1.0-beta (/Users/Desktop/code/robustmq-project/robustmq/src/common/metadata-struct)
Checking grpc-clients v0.1.0-beta (/Users/Desktop/code/robustmq-project/robustmq/src/grpc-clients)
Checking placement-center v0.1.0-beta (/Users/Desktop/code/robustmq-project/robustmq/src/placement-center)
Checking storage-adapter v0.1.0-beta (/Users/Desktop/code/robustmq-project/robustmq/src/storage-adapter)
Checking cli-command v0.1.0-beta (/Users/Desktop/code/robustmq-project/robustmq/src/cli-command)
Checking journal-server v0.1.0-beta (/Users/Desktop/code/robustmq-project/robustmq/src/journal-server)
Checking mqtt-broker v0.1.0-beta (/Users/Desktop/code/robustmq-project/robustmq/src/mqtt-broker)
Checking cmd v0.1.0-beta (/Users/Desktop/code/robustmq-project/robustmq/src/cmd)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.63s
运行测试用例
为了保证提交代码质量,RobustMQ 内置了完善的测试用例,在提交代码前,可以在根目录执行”make test”来检查测试用例是否全部正常。示例如下:
FWR3KG21WF:robustmq $ make test