Skip to content

Commit

Permalink
Merge pull request #1216 from scottsut/master
Browse files Browse the repository at this point in the history
beta.7 release
  • Loading branch information
RichardShan authored Sep 12, 2019
2 parents 784ac33 + dc9e156 commit 9b28e1f
Show file tree
Hide file tree
Showing 600 changed files with 16,048 additions and 9,732 deletions.
208 changes: 208 additions & 0 deletions CONTRIBUTING-CH.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
# Contributing

非常感谢贡献 Davinci!在参与贡献之前,请仔细阅读以下指引。

## 贡献范畴

### Bug 反馈与修复
我们建议无论是 Bug 反馈还是修复,都先创建一个 Issue 来仔细描述 Bug 的状况,以助于社区可以通过 Issue 记录来找到和回顾问题以及代码。Bug 反馈 Issue 通常需要包含**完整描述 Bug 的信息**以及**可复现的场景**,这样社区才能快速定位导致 Bug 的原因并修复它。包含 `#bug` 标签的打开的 Issue 都是需要被修复的。

### 功能交流、实现、重构
在交流过程中,详细描述新功能(或重构)的细节、机制和使用场景,能够促使它更好更快地被实现。**如果计划实现一个重大的功能(或重构),请务必通过 Issue 或其他方式与核心开发团队进行沟通**,这样大家能以最效率的方式来推进它。包含 `#feature` 标签的打开的 Issue 都是需要被实现的新功能,包含 `#enhancement` 标签的打开的 Issue 都是需要改进重构的功能。

### Issue 答疑
帮助回答 Issue 中的使用问题是为 Davinci 社区做贡献的一个非常有价值的方式;社区中总会有新用户不断进来,在帮助新用户的同时,也可以展现你的专业知识。

### 文档改进
Davinci 用户手册文档在 docs/ 目录下,我们使用了 [jekyll](https://jekyllrb.com/) 作为 Davinci 的文档服务,可以编辑目录里的 Markdown 文件来对文档做改进。

### 国际化
非常抱歉,Davinci 目前仅支持中文语言;但项目前端依赖包含 [react-intl](https://github.com/formatjs/react-intl),代码结构上也支持国际化,欢迎对其他语言进行贡献。

## 贡献流程

### 分支结构
Davinci 源码可能会产生一些临时分支,但真正有明确意义的只有以下三个分支:

- master: 最近一次稳定 release 的源码,偶尔会多几次 hotfix 提交;
- dev-0.3: 主要开发分支;
- dev-0.2: 0.2 版本源码,目前 0.2 版本已经停止更新,如有 0.2 版本使用者或是需要进行二次开发的用户可以参考此分支。

### 开发指引
Davinci 前后端代码共用同一个代码库,但在开发上是分离的。在着手开发之前,请先将 Davinci 项目 fork 一份到自己的 Github Repositories 中, 开发时请基于自己 Github Repositories 中的 Davinci 代码库进行开发。

我们建议克隆 dev-0.3 分支来开发,这样在向 Davinci 主项目提交 PR 时合并冲突的可能性会小很多
```bash
git clone https://github.com/yourname/davinci.git --branch dev-0.3
```

#### 前端
前端代码在 webapp/ 目录中

##### 目录结构
```
├── app # 主应用源码
├── assets # 资源文件
├── components # 通用组件
├── containers # 路由容器组件
├── utils # 通用实用方法
└── app.tsx # 主应用入口
├── internals # 开发工程文件
├── libs # 改动后的项目依赖
├── server # 开发服务器
├── share # 分享页源码
└── package.json
```

##### 开发
```
npm install
npm start
```

##### Lint
```
npm run lint
```

##### Test
```
npm run test
```

##### 打包
```
npm run build
```

#### 后端
用户配置在项目根目录 /config/ 下,项目启动脚本和升级补丁脚本在项目根目录 /bin/ 下, 后端代码及核心配置在 server/ 目录下, 日志在项目根目录 /log/ 下。注意:此处所指项目根目录都指环境变量 DAVINCI3_HOME 所配置的目录,在使用 IDE 开发过程中也需要配置环境变量,如 Idea 关于环境变量加载的优先级:`Run/Debug Configurations` 中配置的 `Environment variables` —> IDE缓存的系统环境变量。

##### 目录结构

脚本
```
├── bin # 脚本目录
├── migration # 较大版本变动迁移脚本目录
├── patch # 数据库补丁
├── 001_beta5.sql # 已发布补丁(命名规则:“序列_版本”)
└── beta.sql # 当期未发布补丁(固定名称)
├── build.sh
├── davinci.sql # 完整系统数据库脚本(包含所有补丁)
├── initdb.bat # 针对 Windows 环境的初始化数据库批处理脚本
├── initdb.sh # 针对 Linux、Mac 环境的初始化数据库 Shell 脚本
├── phantom.js # 截图脚本(未来版本将不再使用)
├── restart-server.sh # 针对 Linux、Mac 环境的重启服务脚本
├── run.bat # 针对 Windows 环境的服务启停核心脚本
├── start.bat # 针对 Windows 环境的服务启动脚本
├── start-server.sh # 针对 Linux、Mac 环境的服务启动脚本
├── stop.bat # 针对 Windows 环境的服务停止脚本
└── stop-server.sh # 针对 Linux、Mac 环境的服务停止脚本
```

用户配置
```
├── config # 用户配置目录
├── application.yml.example # 应用配置模板
├── datasource_driver.yml.example # 自定义数据源配置模板
└── logback.xml # 日志配置
```

代码目录结构
```
├── server # Server 代码根目录
├── src # 源码
├── main
├── java
└── edp
├── core # 核心配置及通用代码
├── davinci # Davinci 业务代码
├── DavinciServerApplication # 系统启动类
└── SwaggerConfiguration # Swagger 配置类
└── resources
├── generator
├── mybatis # mybatis mapping 目录
├── templates # 邮件、Sql 模板目录
├── application.yml # 系统核心配置文件
└── banner.txt
└── test # 测试代码目录
└── pom.xml # Davinci Server maven 配置文件,继承自项目根目录pom.xml
```

日志目录
```
├── logs # 日志根目录
├── sys # 系统日志目录
└── user # 用户日志目录
├── opt # 用户操作日志
└── sql # 用户Sql日志
```

##### 环境变量
配置系统环境变量或 IDE 环境变量 DAVINCI3_HOME,推荐优先使用 IDE 环境变量。

##### 数据库
1. 自行创建 Davinci 系统数据库;
2. 修改 bin/initdb.sh 或 bin/initdb.bat 中的数据库相应信息并执行 或 直接在数据库客户端导入 bin/davinci.sql。

##### 配置文件
重命名 config/ 目录下 `application.yml.example` 文件为 `application.yml`,并配置相关属性。

##### 打包
1. 打完整 release 包需要修改根目录下 /assembly/src/main/assembly/assembly.xml 中相关版本信息,然后在根目录下执行: `mvn clean package` 即可;
2. 打 server 包可直接在 server/ 目录下执行 `mvn clean package`

### Pull Request 指引
- 如果你还不知道怎样向开源项目发起 PR,请参考[这篇说明](https://help.github.com/en/articles/about-pull-requests)
- 无论是 Bug 修复,还是新功能开发,请将 PR 提交到 dev-0.3 分支。
- PR 和提交名称遵循 `<type>(<scope>): <subject>` 原则,详情可以参考阮一峰的 [Commit message 和 Change log 编写指南](http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html) 这篇文章。
- 如果 PR 中包含新功能,理应将文档更新包含在本次 PR 中。
- 如果本次 PR 尚未准备好合并,请在名称头部加上 [WIP] 前缀(WIP = work-in-progress)。
- 所有提交到 dev-0.3 分支的提交至少需要经过一次 Review 才可以被合并

### Review 标准

在贡献代码之前,可以了解一下什么样的提交在 Review 中是受欢迎的。简单来说,如果一项提交能带来尽可能多增益和尽可能少的副作用或风险,那它被合并的几率就越高,Review 的速度也会越快。风险大、价值低的提交是几乎不可能被合并的,并且有可能会被拒绝连 Review 的机会都没有。

#### 增益
- 修复导致 Bug 的主要原因
- 添加或修复一个大量用户亟需的功能或问题
- 简单有效
- 容易测试,有测试用例
- 减少复杂度以及代码量
- 经社区讨论过的、确定需要改进的问题
#### 副作用和风险
- 仅仅修复 Bug 的表面现象
- 引入复杂度高的新功能
- 为满足小众需求添加复杂度
- 改动稳定的现有API或语义
- 导致其他功能不能正常运行
- 添加大量依赖
- 随意改变依赖版本
- 一次性提交大量代码或改动
#### Reviewer 注意事项
- 请使用建设性语气撰写评论
- 如果需要提交者进行修改,请明确说明完成此次 Pull Request 所需要修改的所有内容
- 如果某次 PR 在合并后发现带来了新问题,Reviewer 需要向 PR 作者联系并沟通解决问题;如果无法联系到 PR 作者,Reviewer 需要将此次 PR 进行还原

## 贡献进阶

### 关于 Committers(Collaborators)

#### 如何成为 Committer
如果你对 Davinci 代码有过颇具价值的 PR 并且被合并,你可以在这个 [Issue](https://github.com/edp963/davinci/issues/1194) 下评论,或是通过官方微信群联系核心开发团队申请成为 Davinci 项目的 Committer;核心开发团队和其他 Committers 将会一起投票决定是否允许你的加入,如果得到足够票数,你将成为 Davinci 项目的 Committer。

#### Committer 的权利
- 可以加入官方开发者微信群,参与讨论和制定开发计划
- 可以对 Issue 进行管理,包括关闭、添加标签
- 可以创建和管理项目分支,master、dev-0.3、dev-0.2 分支除外
- 可以对提交到 dev-0.3 分支的 PR 进行 Review
- 可以申请成为 Committee 成员

### 关于 Committee

#### 如何成为 Committee 成员
如果你是 Davinci 项目的 Committer,并且你贡献的所有内容得到了其他 Committee 成员的认可,你可以申请成为 Davinci Committee 成员,其他 Committee 成员将会一起投票决定是否允许你的加入,如果全票通过,你将成为 Davinci Committee 成员。

#### Committee 成员的权利
- 可以合并其他 Committers 和贡献者提交到 dev-0.3 分支的 PR
43 changes: 43 additions & 0 deletions MAINTAINING-CH.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Maintaining

## 项目管理

Davinci 项目通过 [Project](https://github.com/edp963/davinci/projects) 来管理开发计划和维护清单。

### 开发计划

开发计划在 [Roadmap](https://github.com/edp963/davinci/projects/4) 中管理。Committers 可以在 `To do` 栏中自行添加功能卡片,当功能还在卡片阶段时,意味着此功能还在设计和讨论阶段,卡片中应当包含:
- 功能描述标题
- 功能设计明细及原理
- 如果包含子功能项,请逐一列出

当功能经过设计和讨论阶段之后,可以将功能卡片转成 Issue,并打上相应的 Tags。如果有 Committers 计划开发实现它,请将 Issue 拖到 `In progress` 栏中,并添加自己到 Issue 的 Assignees 列表中。**请确保功能经过充分设计和讨论之后再开始开发,未经社区讨论过的功能 PR 不会被合并。**

### 维护清单

维护清单在 [Maintenance](https://github.com/edp963/davinci/projects/5) 中管理。Committers 可以在 To do 栏中自行添加 bug 或亟待修复的缺陷类 Issue。同样的,如果有 Committers 计划开发修复它,请将 Issue 拖到 `In progress` 栏中,并添加自己到 Issue 的 Assignees 列表中。

**为保证开发高效以及目标专注,建议每位 Committer 在所有 Project `In progress` 栏中的 Issue 不超过2个。**

## 版本发布周期及流程

当前阶段,如无特殊需求,每月发布一个 `minor` 版本,正式版本发布不遵循此规则

版本发布之前需要确认
- 所有功能可以正常运行
- 与此版本相关的 Issue 和 PR 已经被正确处理

编辑更新日志以及升级版本号
- 新建一个 PR 将 dev-0.3 分支合并到 master,所有发布操作需要在 master 分支上进行。**注意!不要使用 squash merge!防止提交信息丢失!**
- 从 master 新建一个 release 分支用来做发布的修改(例如:git checkout -b release-beta.7)
- 在 CHANGELOG.md 里添加发布日志,可以用 compare 功能找到当前和之前版本的区别,将有价值的改动如实反馈给用户
- 对用户使用上无感知的改动建议(文档修补、微小的样式优化、代码风格重构等等)不要提及,保持 changelog 的内容有效性
- 用面向开发者的角度和叙述方式撰写 changelog,不描述修复细节,描述问题和对开发者的影响
- 尽量给出原始的 PR 链接,社区提交的 PR 改动加上提交者的链接或 Issue 链接
- 如果不确定改动的真实目的,可以向提交者进行咨询
- push release 分支并发起 changelog 的 PR 请其他 Committee 成员进行 Review
- PR 的内容里填上 changelog 内容,好处是版本 changelog 的 PR 会关联在各个 issue 中,很容易知道 Issue 在哪个版本被改了

正式发布 release
- 更新日志的修改合并后,删除 release-x 分支,给当前 master 分支打上版本号 tag
- 上传 release 包,发布 release note
2 changes: 1 addition & 1 deletion assembly/src/main/assembly/assembly.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@


<assembly>
<id>dist-beta.6</id>
<id>dist-beta.7</id>
<formats>
<format>zip</format>
</formats>
Expand Down
66 changes: 66 additions & 0 deletions bin/davinci.sql
Original file line number Diff line number Diff line change
Expand Up @@ -604,4 +604,70 @@ CREATE TABLE `rel_role_dashboard_widget`
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4;

DROP TABLE IF EXISTS `davinci_statistic_visitor_operation`;
CREATE TABLE `davinci_statistic_visitor_operation` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`action` varchar(255) DEFAULT NULL COMMENT 'login/visit/initial/sync/search/linkage/drill/download/print',
`org_id` bigint(20) DEFAULT NULL,
`project_id` bigint(20) DEFAULT NULL,
`project_name` varchar(255) DEFAULT NULL,
`viz_type` varchar(255) DEFAULT NULL COMMENT 'dashboard/display',
`viz_id` bigint(20) DEFAULT NULL,
`viz_name` varchar(255) DEFAULT NULL,
`sub_viz_id` bigint(20) DEFAULT NULL,
`sub_viz_name` varchar(255) DEFAULT NULL,
`widget_id` bigint(20) DEFAULT NULL,
`widget_name` varchar(255) DEFAULT NULL,
`variables` varchar(500) DEFAULT NULL,
`filters` varchar(500) DEFAULT NULL,
`groups` varchar(500) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `davinci_statistic_terminal`;
CREATE TABLE `davinci_statistic_terminal` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`browser_name` varchar(255) DEFAULT NULL,
`browser_version` varchar(255) DEFAULT NULL,
`engine_name` varchar(255) DEFAULT NULL,
`engine_version` varchar(255) DEFAULT NULL,
`os_name` varchar(255) DEFAULT NULL,
`os_version` varchar(255) DEFAULT NULL,
`device_model` varchar(255) DEFAULT NULL,
`device_type` varchar(255) DEFAULT NULL,
`device_vendor` varchar(255) DEFAULT NULL,
`cpu_architecture` varchar(255) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `davinci_statistic_duration`;
CREATE TABLE `davinci_statistic_duration` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`start_time` timestamp NULL DEFAULT NULL,
`end_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `share_download_record`;
CREATE TABLE `share_download_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`uuid` varchar(50) DEFAULT NULL,
`name` varchar(255) NOT NULL,
`path` varchar(255) DEFAULT NULL,
`status` smallint(1) NOT NULL,
`create_time` datetime NOT NULL,
`last_download_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


SET FOREIGN_KEY_CHECKS = 1;
Loading

0 comments on commit 9b28e1f

Please sign in to comment.