# graph engine 个人开发工具链使用说明

GE开发者工具链是graph engine中的一套面向个人开发者的自动化脚本工具链。

目前支持基于容器开发环境准备、构建依赖的自动下载安装和配置、代码格式化、编译、测试、代码覆盖率检查、文档生成等一系列开发者常用功能。

## 前置准备

下面是使用GE开发者工具链，需要手动进行的前置准备；

下列是经过验证后的性能最佳推荐配置：

1. 操作系统，以下任选其一：
    - 原生的Linux操作系统，如ubuntu；
    - Windows操作系统，推荐安装WSL的ubuntu系统，强烈建议登录WSL内直接下载代码，不要挂卷（构建性能差）！
    - MAC OS；

2. docker安装：
    - docker安装成功，并且相关镜像源已经设置正确，可正常下载外部镜像。

3. OS支持的命令行工具： 原生Linux or WSL shell；

可用但不推荐的配置：

- 在windows中直接安装docker，采用仿linux bash（Cygwin，minGW等）执行ge工具链；
  （使用这种方式也可以执行所有GE工具链的操作，但是因为windows和容器异构内核的文件访问限制会导致构建速度比较慢）

## 快速上手

GE工具链对应的脚本在scripts下，可以按照下面流程来执行：

1. 进入到scripts目录：

```sh
$ cd ./scripts
```

2.执行`ge env`自动下载容器环境，并登陆到环境中

```sh
$ ./ge.sh env 
```

3.配置外部依赖服务器信息
```sh
ge config -i=121.36.**.** -u=asc**, -p=Asc***\#@\!$     (Need add escape character \ before special charactor $、#、!)
```

4.下载和安装构建所依赖的外部库 

```sh
$ ge update 
```

（注：进入容器后，`ge`命令已经自动注册进系统，因此容器内不需要写脚本全称）

5.执行测试，默认执行单元测试用例，`ge test`会自动触发构建

```sh
$ ge test
```

## 详细用法

在scripts目录下，运行./ge.sh -h 即可查看到所有的子命令集合。

```sh
$ ./ge.sh -h

Usage: ge  COMMANDS

Run ge commands

Commands:
    env         Prepare docker env
    config      Config dependencies server
    update      Update dependencies
    format      Format code
    lint        Static verify
    build       Build code
    test        Run test of UT/ST
    cov         Run Coverage
    docs        Generate documents
    clean       Clean
```

脚本内置的每个子命令，代表一个独立功能；每个子命令还提供了二级参数用于灵活指定执行方式。

每个子命令可以通过`-h`查看支持的可配参数。

例如查询`env`子命令的参数，可以使用如下命令：

```sh
$  ./ge.sh env -h
```

每个子命令在不带参数时，会有一个默认的行为。

### `ge env`

该命令用于准备构建和测试使用的容器环境，具体包含参数如下：

```
$  ./ge.sh env -h

Usage: ge env [OPTIONS]

Prepare for docker env for build and test

Options:
    -b, --build  Build docker image
    -p, --pull   Pull  docker image
    -e, --enter  Enter container
    -r, --reset  Reset container
    -h, --help
```

参数详细解释：
- `-b  -- build`： 依据“scripts/env/Dockerfile”生成需要运行的容器镜像；
- `-p  -- pull` ： 从本地配置的容器中央仓拉取需要的的容器镜像；
- `-e  -- enter`： 在本地已有容器镜像的前提下，登录容器运行环境；
- `-r  -- reset`： 删除本地运行的容器镜像环境；

默认：从中央容器仓拉取对应的容器镜像，运行实例并登陆。

### `ge config`

配置外部依赖服务器，具体参数如下：

```sh
$ ge config -h

Usage: ge config [OPTIONS]

update server config for ge, you need input all config info (ip, user, password)

Options:
    -i, --ip           Config ip config
    -u, --user         Config user name
    -p, --password     Config password
    -h, --help

Example: ge config -i=121.36.**.** -u=asc**, -p=Asc***\#@\!$     (Need add escape character \ before special charactor $、#、!)
```

参数详细解释：

- `-i,  --ip`          : 配置依赖库服务器IP地址；
- `-u,  --usr`         : 配置依赖库服务器用户名；
- `-p,  --password`    : 配置依赖库地址；

默认：打印帮助信息。


### `ge update`

安装graph engine构建所需的外部依赖库，具体参数如下：

```sh
$ ge update -h

Usage: ge update [OPTIONS]

update dependencies of build and test

Options:
    -d, --download     Download dependencies
    -i, --install      Install dependencies
    -c, --clear        Clear dependencies
    -h, --help
```

参数详细解释：

- `-d,  --download` : 下载构建需要外部依赖库；
- `-i,  --install`  : 安装外部依赖包到对应位置；
- `-c,  --clear`    : 清除下载的外部依赖包；

默认：根据"scripts/update/deps_config.sh"的配置下载外部依赖库并安装到对应目录。
（注：请确保“scripts/update/server_config.sh”中的服务器地址、用户名、密码已经配置）

### `ge format`

使用clang-format进行代码格式化，具体参数如下：

```sh
$ ge format -h
Options:
    -a format of all files
    -c format of the files changed compared to last commit, default case
    -l format of the files changed in last commit
    -h Print usage
``` 

参数详细解释：

- `-a` : 格式化所有代码；
- `-c` : 只格式化本次修改的代码；
- `-l` : 格式化上次提交的代码；

默认：格式化本次修改代码。

### `ge lint`

使用clang-format进行代码格式化检查，具体参数如下：

```sh
$ ge lint -h

Options:
    -a Check code format of all files, default case
    -c Check code format of the files changed compared to last commit
    -l Check code format of the files changed in last commit
    -h Print usage
``` 

参数详细解释：

- `-a` : 检查所有代码格式；
- `-c` : 只检查修改的代码格式；
- `-l` : 检查上次提交的代码格式；

默认：检查本次修改代码格式。

### `ge build`

执行构建 (注：调用原有build.sh脚本，改造中...)；

### `ge test`

构建和运行测试用例，目前可以支持参数如下：

```sh
$ ge test -h

Usage: ge test [OPTIONS]

Options:
    -u, --unit          Run unit Test
    -c, --component     Run component Test
    -h, --help
```

参数详细解释：

- `-u, --unit`      : 执行单元测试
- `-c, --component` : 执行组件测试

默认：执行单元测试。

### `ge cov`

执行代码覆盖率检查, 支持全量覆盖和增量覆盖的功能，该命令需要已经跑完测试用例，目前可以支持参数如下：

```sh
$ ge cov -h

Usage: ge cov [OPTIONS]

Options:
    -a, --all          Full coverage
    -i, --increment    Increment coverage
    -d, --directory    Coverage of directory
    -h, --help
```

参数详细解释：

- `-a, --all`       : 执行全量覆盖率统计；
- `-i, --increment` : 执行增量覆盖率检查，默认是分析未提交修改的代码覆盖率（如果存在新增加的git未跟踪文件，需要先git add 添加进来才可以）；
- `-d, --directory` : 代码进行增量覆盖率检查的代码路径，支持传入路径参数；

默认：执行增量覆盖率检查；

下面的命令演示了如何检查ge目录下所有代码的增量覆盖率：

```sh
$ ge cov -d=ge 
```

### `ge docs`

Doxygen文档生成，包含代码逻辑和物理结构和关系，方便阅读和理解代码；目前可以支持参数如下：

```sh
$ ge docs -h

Usage: ge docs [OPTIONS]

Options:
    -b, --brief  Build brief docs
    -a, --all    Build all docs
    -h, --help
```

参数详细解释：

- `-b, --brief` : 生成简要文档，忽略部分关系图生成，速度快；
- `-a, --all`   : 生成全量文档，包含各种代码关系图，速度相对慢；

默认： 生成全量代码文档。

### `ge clean`

清除各种下载或生成的中间文件，目前支持的参数如下：

```sh
$ ge clean -h

Usage: ge clean [OPTIONS]

Options:
    -b, --build         Clean build dir
    -d, --docs          Clean generate docs
    -i, --install       Clean dependenices
    -a, --all           Clean all
    -h, --help
```

参数详细解释：

- `-b, --build`   : 清除生成的编译构建临时文件；
- `-d, --docs`    : 清除生成的文档临时文件；
- `-i, --install` : 清除安装的依赖文件；
- `-a, --all`     : 清除所有下载和生成的临时文件；

默认：清除编译构建产生临时文件。

## Follow us

工具链的功能还在不断完善中，有问题请提issue，谢谢！
