mcpField
S
setup-github-labels

setup-github-labels

github.com/wkentaro开发0348 次安装1 天前更新
代码仓库

关于 setup-github-labels

setup-github-labels 是供维护者统一 GitHub 标签体系并编写 Agent 文档的仓库配置技能。它以 labels.json 定义标签及重命名记录,并在应用前预览变更、要求确认。

主要功能

  1. 01基于清单定义标签
  2. 02涵盖问题分流与 PR 评定
  3. 03应用前预览标签变更
  4. 04重命名、创建和更新标签
  5. 05为 Agent 记录标签规则

适用场景

  1. 01为 GitHub 仓库配置标签
  2. 02统一多个仓库的标签
  3. 03更新标签名称并保留历史
  4. 04记录问题分流和 PR 评定约定

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wkentaro/agent-skills --skill setup-github-labels

安装后在 Claude Code 中输入/setup-github-labels确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

labels.json
RATIONALE.md
agents/
openai.yaml
evals/
evals.json

详细介绍

设置 GitHub 标签

将一套标签词汇应用到你在其中运行此操作的仓库,然后记录其含义,供 Agent 使用。此技能目录中的 labels.json 是唯一真实来源:其中包含每个标签的名称、颜色、描述、范围以及它重命名之前的名称。只有在更改标签集时,才阅读 RATIONALE.md。

这套标签分为四组。前缀表示标签适用的对象:

分组标签
Issue 类型type:bug、type:feature、type:task
Issue 分流状态needs-triage、needs-info、ready-for-agent、ready-for-human、wontfix
Agent PR 评审结论recommend-merge、recommend-close、recommend-triage、recommend-revise
维护者 PR 评审结论maintainer-approved

这些标签所表达的规则:

  • 完成分流的 Issue 恰好带有一个 type: 标签和一个分流状态标签。未带标签的 Issue 尚未分流;needs-triage 表示正在评估。
  • 非草稿 PR 如果没有评审结论,则由 Agent 负责完成处理。草稿标记表示“仍在构建中”状态;对此不设置标签。
  • 对于每个 head,Agent 至多给出一个 recommend-* 评审结论。recommend-revise 会将 PR 交还给其作者;另外三个会将 PR 交给维护者。
  • 评审结论只是建议。Agent 绝不会合并或关闭 PR。切勿将 recommend-merge 重命名为 ready-to-merge:合并机器人会监视这个字符串。
  • 只有在维护者明确指示时才设置 maintainer-approved,并且它可以与 recommend-* 标签同时存在。
  • 有新的推送时,任何评审结论都会过期。设置该结论的一方负责清除并重新设置它。

流程

1. 检测仓库
REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner)

如果检测失败,请询问用户要操作哪个仓库。

2. 预览

将清单与仓库进行比较,并向用户展示将要执行的操作:

gh label list --repo "$REPO" --limit 200 --json name -q '.[].name' | sort > /tmp/have
jq -r '.[].name' labels.json | sort > /tmp/want
jq -r '.[] | select(.renamed_from) | .renamed_from' labels.json | sort > /tmp/old
comm -13 /tmp/have /tmp/want   # will be created (or renamed into, if the old name is present)
comm -12 /tmp/have /tmp/want   # will have color/description updated
comm -12 /tmp/have /tmp/old    # will be renamed

同时检查 docs/agents/triage-labels.md 和根目录中的 AGENTS.md,并说明每个文件将被创建、更新还是保持不变。预览结束时,明确询问用户是否要应用这些更改。

3. 确认后应用

在通常为公开的仓库中创建标签会对外可见:先让用户确认完整预览。然后运行清单。先重命名,以便 Issue 历史记录随标签保留;接着使用 --force 创建标签或就地更新。

jq -c '.[]' labels.json | while read -r label; do
  name=$(jq -r .name <<<"$label")
  old=$(jq -r '.renamed_from // empty' <<<"$label")
  if [ -n "$old" ] && [ "$old" != "$name" ]; then
    gh label edit "$old" --name "$name" --repo "$REPO" 2>/dev/null || true
  fi
  gh label create "$name" \
    --color "$(jq -r .color <<<"$label")" \
    --description "$(jq -r .scope <<<"$label"): $(jq -r .description <<<"$label")" \
    --force --repo "$REPO"
done

如需设置多个仓库,可使用另一个 $REPO 重复操作。

4. 记录约定

创建或更新 docs/agents/triage-labels.md。/triage 和 PR 技能会读取此适配文件,以便将角色名称转换为标签字符串,因此文件必须包含:

  • 一张表格,为每个 /triage 角色(bug、enhancement、needs-triage、needs-info、ready-for-agent、ready-for-human、wontfix)各设一行,并包含两列标签:一列用于 Issue,一列用于 PR;映射遵循 RATIONALE.md;
  • 本文件顶部列出的规则;
  • 文件中已有的任何仓库专属标签或覆盖项,并予以保留。

然后确保根目录中的 AGENTS.md 在提及 Issue 分流或 PR 评审结论的地方都指向该文件。只添加最简短的引用,不要复制这份约定。

5. 报告

报告三个类别:已重命名、已更新和已创建;列出各类别中的标签,空类别写“无”,然后说明创建或更新了哪些文档。仓库中不在清单里的标签保持不变。如果用户想删除某个标签,这属于一项有意为之的操作,因为删除会从所有 Issue 和 PR 中移除该标签:

gh label delete "<name>" --repo "$REPO" --yes

更改标签集

编辑 labels.json。要重命名标签,请更改 name,并将 renamed_from 设为旧字符串;所有仓库迁移完成后,删除 renamed_from。标签集应保持精简:新增标签必须包含标题、差异或现有标签未提供的信息。在 RATIONALE.md 中记录理由;如果角色映射发生变化,请更新步骤 4 中的契约模板。

评论

支持 Markdown