用途:safe-settings 是 github-community-projects 维护的 Probot GitHub App,用于以代码方式(YAML)声明式管理整个组织的仓库策略,替代逐个仓库点击设置或零散的 gh api 脚本。适合策略需跨仓库共享、要求持续同步与漂移检测的场景;单仓库一次性锁定策略则属过度设计。
主要能力:可配置仓库元数据(描述、主页、主题、可见性、默认分支、功能开关)、合并按钮设置(squash/merge/rebase、合并后删除、自动合并、更新分支)、安全开关(漏洞告警、自动安全修复)、经典分支保护与现代规则集、标签(支持 oldname 重命名与排除模式)、里程碑、协作者(含 include/exclude 仓库列表)、团队(权限与可见性)、环境与部署规则、自定义属性、Autolinks。同一 YAML schema 按 org → suborg → repo 分层,仓库级文件优先。
使用方式:在组织内选定一个管理仓库(常见为 <org>/.github,或专用的 <org>/admin),在其 .github/ 下放置 settings.yml、suborgs/ 与 repos/ 覆盖文件。部署可选 GitHub Actions 定时任务(推荐起点,通过 npm run full-sync 定期对账)或自托管 Probot 应用(实时 webhook)。需创建 GitHub App 安装到组织,并配置 App ID、私钥、Client ID/Secret 等变量与密钥。示例命令:git clone https://github.com/github-community-projects/safe-settings;npm install && npm run dev;gh workflow run safe-settings.yml --repo "<org>/<admin-repo>"。
限制与注意:GitHub App 需对成员仓库有管理权限;GHA full-sync 每次会遍历所有已安装仓库,超大组织(>1000 仓库)可能耗时一小时并消耗 Actions 分钟,可用 restrictedRepos 或减少安装范围。默认 cron 路径不提供 PR dry-run 守卫;validator 仅添加校验错误主题,不阻止同步。settings.yml 的 labels 块默认注释,启用后会删除组织内所有未列出的标签。规则集默认禁用,激活前需收窄选择器并获授权。管理仓库是信任边界,应先用规则集与 CODEOWNERS 保护。force_create: true 可创建仓库,需谨慎使用。该技能不用于单仓库策略、PR/issue/CI 操作或上游规则开发。