Skip to content

Latest commit

 

History

History
180 lines (119 loc) · 4.26 KB

CONTRIBUTING.zh.md

File metadata and controls

180 lines (119 loc) · 4.26 KB

贡献指南

本文档约定了一些操作步骤,以方便快速提交PR,并易于合并。

在提交PR前,请先提交一个Issue,以方便沟通。

Go

goInception使用 Go 语言编写,

GO版本应该在 1.12 及以上。

依赖管理

项目采用 Go Modules 管理依赖。

您仍须定义GOPATH,并修改PATH以访问您的Go二进制文件。

由于单元测试使用gofail做模拟测试,所以仍须使用GOPATH

例如:

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

工作流

Step 1: Fork项目

  1. 打开 https://github.com/hanchuanchuan/goInception
  2. 点击右上角 Fork 按钮,将项目fork到自己的仓库中,等待Fork完成。

Step 2: 克隆fork项目到本地

将代码放在你的GOPATH目录下,定义本地工作目录:

# 设置你的github用户名`user`:
user={your github profile name}

working_dir=$GOPATH/src/github.com/${user}
mkdir -p $working_dir
cd $working_dir

git clone https://github.com/${user}/goInception.git
# 或者: git clone git@github.com/${user}/goInception.git

cd $working_dir/goInception
git remote add upstream https://github.com/hanchuanchuan/goInception.git
# 或者: git remote add upstream git@github.com/hanchuanchuan/goInception.git

# 避免误推送
git remote set-url --push upstream no_push

# 配置检查
git remote -v
# 结果应该有四条:
# origin    git@github.com:$(user)/goInception.git (fetch)
# origin    git@github.com:$(user)/goInception.git (push)
# upstream  https://github.com/hanchuanchuan/goInception (fetch)
# upstream  no_push (push)

定义提交前检查

这个hook定义了提交前的格式检查

cd $working_dir/goInception/
ln -s `pwd`/hooks/pre-commit .git/hooks/
chmod +x $working_dir/goInception/.git/hooks/pre-commit

Step 3: 创建分支

获取最新版本的goInception

# 切换到项目目录
cd $working_dir/goInception/
# 获取最新更新
git fetch upstream

# 切换到本地master
git checkout master
# 版本合并
git rebase upstream/master

创建分支

# 创建并切换到新分支
# 新功能建议以feature开头,bug修改建议以fix开头
git checkout -b feature-test

Step 4: 开发

代码开发

现在可以在feature-test分支进行开发了.

准备测试环境

运行本地测试需要一个mysql环境,用来测试审核、执行及备份功能。

  • mysql建议版本: 5.7
  • mysql启动参数(可设置my.cnf) mysqld --log-bin=on --server_id=111 --character-set-server=utf8mb4
  • 测试数据库 mysql -e "create database if not exists test DEFAULT CHARACTER SET utf8;create database if not exists test_inc DEFAULT CHARACTER SET utf8;"
  • 测试用户 mysql -e "grant all on *.* to test@'127.0.0.1' identified by 'test';FLUSH PRIVILEGES;"

运行测试

运行完整测试

完整测试可能由于环境问题无法通过,此时需要保证GO111MODULE=on go test session/session_inception_*.go通过

# 单元测试
make dev

# 检查checklist
make checklist

运行指定测试

GO111MODULE=on go test session/session_inception_*.go
# 或者:
GO111MODULE=on go test session/session_inception_test.go

Step 5: 保持分支同步

分支在提交前需要先合并goInception最新版本,以免PR无法合并

# 在`feature-test`分支(`git checkout feature-test`)
git fetch upstream
git rebase upstream/master

Step 6: 提交

提交变更

git commit

Step 7: Push

推送分支到github.com

git push -f origin feature-test

Step 8: 创建PR

  1. 访问fork项目地址 https://github.com/$user/goInception
  2. 点击 feature-test 分支旁边的 Compare & pull request 按钮

Step 9: code review

在PR提交后,会自动进行travisci测试和circleci测试, 在review时,有什么变动可以直接在该分支上修改和提交,PR会使用最新的commit,不用再次提交PR, 如果一个PR涉及了多个功能或者修复,建议分成多个分支,以便于review以及合并。

代码风格

可参考Golang社区建议的编码风格 style doc