如何通过Codeowner筛选GitHub组织下的仓库?
筛选GitHub组织中包含指定代码所有者的仓库
要实现基于.github/CODEOWNERS文件的仓库筛选,GH CLI本身没有直接的内置命令,需要结合shell脚本循环检查每个仓库的CODEOWNERS内容。以下是具体实现方法:
核心思路
- 获取组织下所有仓库的名称列表
- 逐个仓库拉取
.github/CODEOWNERS文件内容 - 检查文件中是否包含目标代码所有者(如
@organization_name/team_name) - 输出符合条件的仓库
具体脚本实现
假设你的组织名为your-org,目标代码所有者团队为@your-org/target-team,可以用以下bash脚本:
# 定义组织名和目标团队 ORG="your-org" TARGET_TEAM="@your-org/target-team" # 获取组织下所有仓库名称,循环检查 gh repo list "$ORG" --json name --jq '.[].name' | while read -r REPO; do # 拉取CODEOWNERS文件并检查是否包含目标团队,忽略无该文件的仓库 if gh repo view "$ORG/$REPO" --file .github/CODEOWNERS 2>/dev/null | grep -q "$TARGET_TEAM"; then echo "$ORG/$REPO" fi done
细节说明
gh repo list "$ORG" --json name --jq '.[].name':只输出组织下所有仓库的名称,减少不必要的输出gh repo view "$ORG/$REPO" --file .github/CODEOWNERS:直接拉取指定仓库的CODEOWNERS文件内容2>/dev/null:忽略仓库不存在CODEOWNERS文件时的错误提示grep -q:静默检查,只返回匹配状态,不输出匹配内容
扩展优化
如果需要同时检查根目录或docs/目录下的CODEOWNERS文件,可以修改检查逻辑:
gh repo list "$ORG" --json name --jq '.[].name' | while read -r REPO; do # 依次检查三个常见的CODEOWNERS路径 for PATH in ".github/CODEOWNERS" "CODEOWNERS" "docs/CODEOWNERS"; do if gh repo view "$ORG/$REPO" --file "$PATH" 2>/dev/null | grep -q "$TARGET_TEAM"; then echo "$ORG/$REPO" break # 找到匹配后跳出当前仓库的检查循环 fi done done
内容的提问来源于stack exchange,提问作者Chris Johnston
相关产品推荐
相关产品推荐

