#owner #github #devops #utility #file-tree #cli

app github-distributed-owners

一个从文件树中分布的 OWNERS 文件自动生成兼容 GitHub 的 CODEOWNERS 文件的工具

3 个版本

0.1.9 2024年1月6日
0.1.8 2023年9月19日
0.1.7 2023年9月11日

#559 in 开发工具

每月 24 次下载

MIT 许可证

74KB
2K SLoC

github-distributed-owners

一个从文件树中分布的 OWNERS 文件自动生成兼容 GitHub 的 CODEOWNERS 文件的工具。

在文件树中分发 OWNERS 配置可以更容易地找到拥有代码库特定部分的适当人员/团队。这在多团队、单代码库环境中尤其有用。它还有一个很好的特性,允许团队编辑自己的 OWNERS 文件,只需团队内部审批即可。由于 GitHub 支持单个 CODEOWNERS 文件,你可以选择授予 所有人 编辑所有者的权限,或者为所有团队设置一个较小的审阅者小组,将更改发送给每个团队,这会带来问题。

[!NOTE] 如果您正在使用 github-distributed-owners,我们想听到您的声音!请在这里给我们留言。 :)

使用方法

在包含用户或组引用的目录中创建名为 OWNERS 的文件,这些引用以换行符分隔。

github_username
[email protected]
@group

一旦设置到位,您就可以在 git 仓库的根目录中运行以下命令来生成兼容 GitHub 的 CODEOWNERS 文件

github-distributed-owners --output-file .github/CODEOWNERS

[!WARNING] 如果您要执行此工具,则生成的 CODEOWNERS 文件(默认为 .github/CODEOWNERS)不应有任何所有者。否则,会导致拥有该文件的任何组都需要批准每个 OWNERS 的更改,这会部分地抵消此过程的目的。这可以通过在 CODEOWNERS 文件旁边添加以下内容来实现,不列出任何所有者

[CODEOWNERS]
set inherit = false

预提交

示例预提交配置

repos:
  - repo: https://github.com/andrewring/github-distributed-owners
    rev: v0.1.8
    hooks:
      - id: github-distributed-owners

默认的 CODEOWNERS 位置是 .github/CODEOWNERS。这可以通过以下方式更改

    hooks:
      - id: github-distributed-owners
        args: ["--output-file=<FILE_PATH>"]

请注意,GitHub 只会在少数几个位置尊重 CODEOWNERS 文件。有关详细信息,请参阅文档

您还可以通过过滤通过钩子处理的文件来进一步优化预提交行为,如下所示

    hooks:
      - id: github-distributed-owners
        files: (.*/OWNERS|^.github/CODEOWNERS$)

NB: 如果指定了 --output-file,如上所示,则必须更新 CODEOWNERS 路径。

安装

要独立安装github-distributed-owners,从crates.io,只需运行

cargo install github-distributed-owners --locked

所有权继承

默认情况下,目录的所有者自动包含为子目录的所有者。可以通过设置--implicit-inherit false来更改默认行为。对于单个目录和模式,可以使用以下语法进行覆盖:set inherit = false

继承示例

# /OWNERS
user0
user1
# /foo/OWNERS
user2
user3
# /foo/bar/OWNERS
set inherit = false
user4
user5

在上面的示例中,/foo下的文件更改可以由user0user1user2user3中的任何一个人批准。但是,/foo/bar下的文件更改只能由user4user5批准。

文件模式

在文件顶部列出的用户/组用于定义目录级别的所有文件的所有权,您还可以指定目录内的模式。这通过在方括号内提供模式来完成,如[*.rs],然后是所有者和设置值。

示例

# Directory level owners
user0
user1

# Additional owners for rust source files
[*.rs]
user2
user3

# Separate owners for special files
[special_*]
set inherit = false
user4
user5

许可证

此操作是在MIT许可证的条款下分发的,有关详细信息,请参阅LICENSE

贡献和支持

欢迎任何贡献!

依赖关系

~8.5MB
~144K SLoC