diff --git a/zh/sig-infra/Repository.md b/zh/sig-infra/Repository.md new file mode 100644 index 0000000000000000000000000000000000000000..af5aa384daf165c63743c647c65974a0e39f40dd --- /dev/null +++ b/zh/sig-infra/Repository.md @@ -0,0 +1,168 @@ +# 仓库 + +## 维护 + +### 背景 + +在openEuler社区有成百上个仓库。 +这是非常困难的去维护在每一个仓库中的所有成员。 +我们需要一个自动化的工具去解决这些问题从而节约团队的工作量。 + +### 解决方案 + +基础设施团队构建了一种机制去简化仓库的维护工作。 +所有openEuler的仓库和仓库成员都放在 +[openeuler.yaml](https://gitee.com/openeuler/infrastructure/blob/master/repository/openeuler.yaml)文件中, +而所有src-openEuler的仓库和仓库成员都放在 +[src-openeuler.yaml](https://gitee.com/openeuler/infrastructure/blob/master/repository/src-openeuler.yaml)文件中。 +如果这些yaml文件被一个pull request所修改,`openeuler-ci-bot`将会检测到这些改变 +然后自动化地完成一些操作,例如`创建一个仓库`,`为一个仓库添加成员`, +`从一个仓库移除成员`,`保护一个分支`,`移除一个保护分支`等基于Gitee API的操作。 + +### 如何创建一个仓库 + +``` yaml +repositories: + - name: abattis-cantarell-fonts + description: "fonts repo" + type: private +``` + +如果你想要在openEuler社区里面新增一个仓库, +你可以基于上面的示例提交一个pull request修改 +[openeuler.yaml](https://gitee.com/openeuler/infrastructure/blob/master/repository/openeuler.yaml) +或者[src-openeuler.yaml](https://gitee.com/openeuler/infrastructure/blob/master/repository/src-openeuler.yaml)。 + +* `abattis-cantarell-fonts`: 你想创建的新仓库名字。 +* `fonts repo`: 新仓库描述。 +* `private`: 表示仓库的类型。 + + `private`意味着新仓库只对某些特定的人群可见。 + + `public`意味着新仓库对所有人可见。 + +一旦你的pull request被合入,```openeuler-ci-bot```将会立即创建一个新仓库。 + +### 如何创建或者删除一个成员 + +``` yaml +community: + name: openeuler + managers: + - zhuchunyi + - overweight + developers: + - igorkorkin + viewers: + - jianminw +repositories: + - name: abattis-cantarell-fonts + description: "fonts repo" + type: private + - name: accountsservice + description: "account repo" + type: private + managers: + - dogsheng + developers: + - igorkorkin + viewers: + - jianminw +``` + +如果你想要添加或者删除一个仓库的成员, +你可以基于上面的示例提交一个pull request +修改[openeuler.yaml](https://gitee.com/openeuler/infrastructure/blob/master/repository/openeuler.yaml) +或者[src-openeuler.yaml](https://gitee.com/openeuler/infrastructure/blob/master/repository/src-openeuler.yaml)。 + +* `openeuler`: openEuler组织名称, 另外还有一个组织`src-openeuler`,实际上不需要做修改。 +* `managers`: 你想在`community`或者`repositories`下指定的管理员。 + 这里需要Gitee账号,例如 `zhuchunyi`。 +* `developers`:你想在`community`或者`repositories`下指定的开发者。 + 这里需要Gitee账号,例如`igorkorkin`。 +* `viewers`: 你想在`community`或者`repositories`下指定的观察者。 + 这里需要Gitee账号,例如`jianminw`。 + +***注意***:你可能已经发现`managers`,`developers`和`viewers`是同时存在于`community`和`repositories`。 +让我们来看看它们的不同之处: + +* 通常情况下你想要为所有仓库添加或删除一个管理员,开发者或者观察者, + 你可以修改`community`下的`managers`,`developers`或者`viewers`。 +* 特定的情况下你想要为一个指定的仓库添加或删除一个管理员,开发者或者观察者, + 你可以修改指定的仓库例如`accountsservice`下的`community`下的`managers`,`developers`或者`viewers`。 +* 如果一个仓库没有指定任何成员(包括`managers`,`developers`和`viewers`),例如`abattis-cantarell-fonts`仓库, + `openeuler-ci-bot`将会使用`community`下的`managers`,`developers`和`viewers` + 来为这个仓库例如`abattis-cantarell-fonts`仓库创建成员。 +* 如果一个仓库指定了一些成员(包括`managers`,`developers`和`viewers`),例如`accountsservice`仓库, + `openeuler-ci-bot`将会使用这个仓库下的`managers`,`developers`和`viewers` + 来为这个仓库例如`accountsservice`仓库创建成员。 +* 如果一个Gitee账号是存在于`managers`,`developers`和`viewers`之中, + 这个Gitee账号将会是一个管理员,因为从Gitee的权限来讲,`managers` > `developers` > `viewers`。 + +### 如何创建或者删除一个保护分支 + +```yaml +community: + name: openeuler + protected_branches: + - master +repositories: + - name: abattis-cantarell-fonts + description: "fonts repo" + type: private + - name: accountsservice + description: "account repo" + protected_branches: + - master + - dev + type: private +``` + +如果你想要在一个仓库上创建或者删除一个保护分支, +你可以基于上面的示例提交一个pull request +修改[openeuler.yaml](https://gitee.com/openeuler/infrastructure/blob/master/repository/openeuler.yaml) +或者[src-openeuler.yaml](https://gitee.com/openeuler/infrastructure/blob/master/repository/src-openeuler.yaml)。 + +* `openeuler`:openEuler组织名称, 另外还有一个组织`src-openeuler`,实际上不需要做修改。 +* `protected_branches`:你想要在`community`或`repositories`创建的保护分支。 + +***注意***:你可能已经发现`protected_branches`是同时存在于`community`和`repositories`。 +让我们来看看它们的不同之处: + +* 通常情况下你想要为所有仓库创建或删除一个保护分支, + 你可以修改`community`下的`protected_branches`。 +* 特定的情况下你想要为一个指定的仓库添加或删除一个保护分支, + 你可以修改指定的仓库例如`accountsservice`下的`community`下的`protected_branches`。 +* 如果一个仓库没有指定任何保护分支,例如`abattis-cantarell-fonts`仓库, + `openeuler-ci-bot`将会使用`community`下的`protected_branches` + 来为这个仓库例如`abattis-cantarell-fonts`仓库创建保护分支。 +* 如果一个仓库指定了一些保护分支,例如`accountsservice`仓库, + `openeuler-ci-bot`将会使用这个仓库下的`protected_branches` + 来为这个仓库例如`accountsservice`仓库创建保护分支。 +* 如果指定的`protected_branches`不存在,`openeuler-ci-bot`将会做任何动作。 + +### 如何创建或者删除一个在Gitee之外的维护人员 + +Gitee提供管理员、开发者和观察者等权限管理。 +`openeuler-ci-bot`支持另一种为每一个仓库添加维护人员的方式。 +`openeuler-ci-bot`将会扫描 `OWNERS`文件在每一个仓库下去发现额外的仓库维护人员。 + +以`ci-bot`仓库下的 为例。 +文件内容如下: + +``` yaml +maintainers: + - edisontest + - freesky-edward + - TommyLike + - xiangxinyong + - zerodefect +``` + +这意味着所有这5个用户具备在`ci-bot`仓库下合入pull request的权限。 +这些用户能使用`/lgtm`和`/approve`命令去触发`openeuler-ci-bot`何如pull request。 +你可以发现更多的命令说明 。 +顺便说下,所有的Gitee管理员和开发者也能使用`/lgtm`和`/approve`命令。 + +如果你想要维护Gitee之外的仓库维护人员,请在你的仓库下添加`OWNERS`文件, +然后添加仓库维护人员到`OWNERS`文件,`openeuler-ci-bot`将会给予这些仓库维护人员`合入`权限。