# OWNERS 介绍
您可以使用 OWNERS 文件定义仓库不同路径下的文件所有者,从而在 CR 过程中确保变更获得可信赖的审阅。
注意:一旦有任意分支开启了 OWNERS 评审,则对默认分支的代码推送、合入都会触发对 OWNERS 文件内容的检查,如果仓库内有 OWNERS文件,且使用的不是工蜂的 OWNERS 机制,建议所有分支规则都关闭 OWNERS 评审,以避免因为内容不符合规则而被拦截。
# OWNERS 机制
# 位置
- OWNERS 配置以默认分支为准,更新 OWNERS 配置需更新默认分支的
OWNERS文件,更新其他分支无效 OWNERS文件可放置在任意目录,每个OWNERS文件可配置其根目录及所有子目录的文件所有者
# 语法
注意:OWNERS 文件需使用 UTF-8 编码且使用 linux 换行符
# 基础语法:[ <user_name> | * | set noparent ]
作用域:OWNERS 文件所在目录及所有子目录的文件
<user_name>:文件所有者,user_name 为用户的 rtx,多个用户需换行或者使用英文逗号分隔
# use `<user_name>` format, set users for current dir git_helper_01 git_helper_02 git_helper_03,git_helper_04*:不需要有 文件所有者,OWNERS 机制下默认所有文件都需要 文件所有者,如有文件不需要,需用此声明
# use `*` format, ignore all file owners for current dir *set noparent:继承禁用,OWNERS 文件默认存在继承关系,如需避免上层目录 OWNERS 文件的影响,需用此声明,且单独一行
# use `set noparent` format, ignore inherit rules set noparent
# 高级语法:per-file <file_name> = [ <user_name> | set noparent | * ]
作用域:只对 OWNERS 文件所在目录的指定文件生效,通过<file_name>指定生效文件名规则,
支持通配符"\*"和"?",但不能包含"/"per-file:指对指定规则的文件集进行单独设定
# use <per-file> format, set rules for special files # ---------------------------------------------------------------------------------------- # <user_name> : 命中<file_name>的文件的 文件所有者 ,user_name为用户的rtx per-file *.java = git_helper_01,git_helper_02 # ---------------------------------------------------------------------------------------- # set noparent:命中per-file的文件不继承基础语法的<user_name>及上层目录OWNERS文件的<user_name>,此配置需单独使用一行 per-file *.java = set noparent # ---------------------------------------------------------------------------------------- # * : 命中per-file的文件不需要有 文件所有者 ,需用此声明 per-file *.md = *
# OWNERS 评审
将OWNERS文件作为 CR 的文件评审配置,所有 CR 的文件都经过 OWNERS 评审,整体的 CR 单才会通过。
# 启用 OWNERS 评审
注意:启用后,.code.yml 的
file模块将不再生效。注意:启用后,存在
OWNERS配置的文件需进行文件评审(默认需要一个 OWNER 评审通过),如要求整个项目都进行 OWNERS 评审,可在根目录添加OWNERS文件。对于没有代码查看权限的评审人会被自动过滤掉。
- 进入设置/分支规则 (含保护分支) ,选择非保护分支评审规则或编辑保护分支规则组
- 在评审规则点击勾选"对文件启用 OWNERS 评审"

# OWNERS 评审规则示例
# 配置文件夹的评审人
- 基础语法:<user_name>
例子,如 /apps/OWNERS 内容为
git_helper_01
git_helper_02
则 git_helper_01 和 git_helper_02 可作为 /apps/... 内所有文件的文件评审人,如 /apps/build.java 和 /apps/main/test.go
# 剔除不需要评审的文件夹
- 基础语法: *
例子,如 /apps/OWNERS 内容为
*
则 /apps/... 都不需要文件评审,如 /apps/build.java 和 /apps/main/test.go
# 禁止继承的 OWNER 作为评审人
- 基础语法:set noparent
例子,如 /apps/OWNERS 内容为
git_helper_01
而 /apps/main/OWNERS 内容为
git_helper_02
set noparent
则仅 git_helper_02 可作为 /apps/main/test.go 的文件评审人
# 配置指定文件的评审人
- 高级语法:per-file <file_name> = <user_name>
例子,如 /apps/OWNERS 内容为
per-file *.java = git_helper_01
per-file *.go = git_helper_02
则 git_helper_01 可作为 /apps/build.java 的文件评审人,git_helper_02 可 作为 /apps/test.go 的文件评审人
# 禁止继承的 OWNER 作为指定文件的评审人
- 高级语法:per-file <file_name> = set noparent
例子,如 /apps/OWNERS 内容为
git_helper_02
per-file *.java = git_helper_03
per-file *.java = set noparent
则仅 git_helper_03 可作为 /apps/build.java 的文件评审人
# 剔除不需要评审的文件
高级语法:per-file <file_name> = *
例子,如 /apps/OWNERS 内容为
per-file *.java = *
则 /apps/build.java 不需要文件评审,而 /apps/test.go 需要文件评审
# 进行 OWNERS 评审
启用后,创建 CR 会根据 OWNERS 配置生成文件评审规则并默认载入推荐的 OWNER 作为评审人
# 添加评审人
如无可用 OWNER,则需先更新默认分支的OWNERS 配置,再进行添加。
- 编辑评审人->打开 OWNERS 过滤器->选择查找文件范围,获取到文件的有效 OWNER 合集。

- 选择需要的 OWNER 添加为为评审人。(也可通过<user_name>直接添加)

# 删除评审人
要给相应文件 移除对应的 OWNERS 评审人,需在 CR 的评审人/必要评审人中添加/移除,不支持只给单个文件添加/移除。

# 通过/拒绝评审
要通过/拒绝相应文件的 OWNERS 评审,需在通过/拒绝 整个 CR,不支持通过/拒绝单个文件。

# 重置评审规则
OWNERS 评审规则 在 CR 创建后不可变更,仅在 CR 出现commit 更新或重新打开时(这两种情况视为重新创建了 CR)会根据最新的OWNERS 配置重置评审规则。
# 添加临时 OWNER
为避免因文件所有的预置 OWNER 均无法评审导致的流程阻塞,工蜂支持 master 及以上权限的成员手动添加 OWNER 名单以外的项目成员作为文件的临时 OWNER,临时 OWNER 具有普通评审人的属性,评审通过后其负责的所有文件(含临时负责文件)将批量通过。

# 作者豁免规则设置
当 CR 作者恰好是文件 OWNER 之一时,默认该文件的修改无需由文件 OWNER 做额外确认(即作者豁免机制)。
该机制由评审设置中的开关控制,如果不希望作者豁免,变更文件仍需要由除作者以外的其他 OWNER 来确认,可关闭上图中的对应选项。
# 附录
# .code.yml-file 和 OWNERS 对比
| CR 机制对比 | .code.yml | OWNERS |
|---|---|---|
| 配置文件 | .code.yml的file | OWNERS |
| 配置基准 | 默认分支的配置为基准 | 默认分支的配置为基准 |
| 组织形式 | 一个仓库只有一份生效 | 每个目录都可以放置,目录移动时配置自动跟随 |
| 匹配逻辑 | 无继承,按顺序匹配 | 默认继承,父目录配置的 owner 对子目录也有效 |
| 评审规则 | 可配置多种评审规则 | 默认为“需要 1 个 owner 评审通过”,可声明为“不需评审” |
| 文件评审人增删 | 只能对单个文件增删 | 不需独立操作,增删整单的评审人,系统自动对文件进行匹配增删 |
| 文件评审操作 | 独立操作,与整单的评审操作互为独立 | 不需独立操作,只需要进行整单的评审,文件的评审状态会同步修改 |
| 配置一致性 | 不完全一致,可以添加非 .code.yml 的 owner | 完全一致,添加的评审人均来自OWNERS配置 |
| 触发条件 | 默认所有分支生效,不需要的分支需在.code.yml 中声明 | 按需开启,通过分支规则的配置开启 |
# CR OWNERS 推荐
开启了 OWNERS 评审后,创建 CR/MR 时,系统会根据为每个文件推荐至少一个 OWNER 作为评审人。
例子,如 /apps/OWNERS 内容为
owner_01
owner_02
/apps/main/OWNERS 内容为
owner_03
owner_04
当变更了 /apps/test.go 和 /apps/main/test.go 两个文件时,每个文件取最近的 OWNERS 的第一个人作为推荐评审人,则
- /apps/test.go 的推荐评审人为 owner_01
- /apps/main/test.go 的推荐评审人为 owner_03
此 MR/CR 单的推荐评审人为 owner_01,owner_03
- owner_01 可评审/apps/test.go 和/apps/main/test.go
- owner_03 可评审/apps/main/test.go