GitHub Copilot 项目实战:dependabot.yml 全量配置选项参考与依赖自动化实践
【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot
.github/dependabot.yml是 GitHub Dependabot 的唯一配置入口,掌控着仓库依赖的安全告警、安全更新与版本更新三大能力。本文以 awesome-copilot 仓库中 dependabot 技能集 的官方 YAML 参考文档为主体,完整梳理从文件骨架、必需键、分组、过滤、PR 定制到私有仓库配置的全部选项,并结合仓库内 github-actions 供应链安全指南 与 vcpkg CI 指南 等配套资源,帮助你在任何规模的仓库(含 monorepo)中写出可落地、可维护、低噪音的依赖自动化配置。
配置文件的整体骨架
所有 Dependabot 配置都集中存放在默认分支上的单个文件.github/dependabot.yml中,GitHub 不支持一个仓库存在多个dependabot.yml;多生态、多目录场景应通过一个文件内的多个updates条目来表达。
完整的顶层结构如下(摘自 dependabot-yml-reference.md):
version: 2 # 必需,恒为 2 registries: # 可选:私有仓库访问配置 REGISTRY_NAME: type: "..." url: "..." multi-ecosystem-groups: # 可选:跨生态分组 GROUP_NAME: schedule: interval: "..." updates: # 必需:生态配置列表 - package-ecosystem: "..." # 必需 directory: "/" # 必需(或 directories) schedule: # 必需 interval: "..."其中version必须位于顶层且恒为2;updates是配置的核心列表,每一个条目对应一个被监控的包管理生态。
必需键详解
package-ecosystem:选择被监控的包管理器
一个updates条目对应一个生态,同一生态可以写多个条目以覆盖不同目录。Dependabot 依据清单文件(manifest)识别依赖,完整生态取值与对应清单文件如下:
| 包管理器 | YAML 值 | 清单文件 |
|---|---|---|
| Bazel | bazel | MODULE.bazel、WORKSPACE |
| Bun | bun | bun.lockb |
| Bundler (Ruby) | bundler | Gemfile、Gemfile.lock |
| Cargo (Rust) | cargo | Cargo.toml、Cargo.lock |
| Composer (PHP) | composer | composer.json、composer.lock |
| Conda | conda | environment.yml |
| Dev Containers | devcontainers | devcontainer.json |
| Docker | docker | Dockerfile |
| Docker Compose | docker-compose | docker-compose.yml |
| .NET SDK | dotnet-sdk | global.json |
| Elm | elm | elm.json |
| Git Submodules | gitsubmodule | .gitmodules |
| GitHub Actions | github-actions | .github/workflows/*.yml |
| Go Modules | gomod | go.mod、go.sum |
| Gradle | gradle | build.gradle、build.gradle.kts |
| Helm | helm | Chart.yaml |
| Hex (Elixir) | mix | mix.exs、mix.lock |
| Julia | julia | Project.toml、Manifest.toml |
| Maven | maven | pom.xml |
| npm/pnpm/yarn | npm | package.json及各类 lockfile |
| NuGet | nuget | *.csproj、packages.config |
| OpenTofu | opentofu | *.tf |
| pip/pipenv/poetry/uv | pip | requirements.txt、Pipfile、pyproject.toml |
| Pre-commit | pre-commit | .pre-commit-config.yaml |
| Pub (Dart/Flutter) | pub | pubspec.yaml |
| Rust Toolchain | rust-toolchain | rust-toolchain.toml |
| Swift | swift | Package.swift |
| Terraform | terraform | *.tf |
| uv | uv | uv.lock、pyproject.toml |
| vcpkg | vcpkg | vcpkg.json |
使用要点(来自 SKILL.md 的生态检测清单):
- pnpm 与 yarn 都使用
npm生态值,Dependabot 会自动识别pnpm-lock.yaml、yarn.lock; - 若仓库同时存在
uv.lock,优先使用uv生态值,否则退回pip; - 仓库内 vcpkg CI 指南 演示了
vcpkg生态的最小配置,可用于保持 vcpkg 端口基线(builtin-baseline)的自动更新。
directory/directories:定位清单文件
directory指定相对于仓库根目录的单一路径,不支持 glob;directories是复数形式,可列出多个路径并支持*与**glob:
# 单一目录 directory: "/" # 多目录 + glob directories: - "/" - "/apps/*" - "/packages/*"对于 GitHub Actions 生态,directory固定写/,Dependabot 会自动搜索.github/workflows/目录下的 workflow 文件。
schedule:更新频率
schedule决定 Dependabot 多久检查一次新版本:
| 参数 | 取值 | 说明 |
|---|---|---|
interval | daily、weekly、monthly、quarterly、semiannually、yearly、cron | 必需 |
day | monday–sunday | 仅weekly生效 |
time | HH:MM | 默认 UTC |
timezone | IANA 时区字符串 | 如America/New_York |
cronjob | Cron 表达式 | 当interval为cron时必需 |
schedule: interval: "weekly" day: "tuesday" time: "09:00" timezone: "Europe/London"使用cron可精确控制执行时刻,例如cronjob: "0 9 * * 1"表示每周一 9:00 运行(示例见 example-configs.md)。
分组选项:把海量 PR 合并成少数可审阅的 PR
groups:生态内分组
groups将同一生态内的多个依赖更新合并到同一个 PR,显著降低 PR 噪音与 CI 成本。
| 参数 | 用途 | 取值 |
|---|---|---|
IDENTIFIER | 组名(出现在分支/PR 标题) | 字母、竖线、下划线、连字符 |
applies-to | 更新类型 | version-updates(默认)、security-updates |
dependency-type | 按类型过滤 | development、production |
patterns | 按名称包含匹配 | 字符串列表,支持*通配 |
exclude-patterns | 按名称排除匹配 | 字符串列表,支持*通配 |
update-types | SemVer 过滤 | major、minor、patch |
group-by | 跨目录分组 | dependency-name |
groups: dev-deps: dependency-type: "development" update-types: ["minor", "patch"] angular: patterns: ["@angular*"] exclude-patterns: ["@angular/cdk"] monorepo: group-by: dependency-name关键行为(摘自 SKILL.md):
- 同时匹配多个组的依赖进入最先匹配的组;
applies-to缺省时仅作用于version-updates;- 未分组的依赖仍会收到独立 PR。
跨目录分组:group-by: dependency-name让同一依赖在多个目录中同时更新时只产生一个 PR(如 lodash 在三个子应用同时升级只开一个 PR)。注意其限制:所有目录必须属于同一包管理生态、仅适用于版本更新、版本约束互不兼容时会拆分为多个 PR。
multi-ecosystem-groups:跨生态分组
multi-ecosystem-groups是顶层键,把不同生态的依赖更新合并进同一个 PR,适合基础设施类依赖:
multi-ecosystem-groups: GROUP_NAME: schedule: interval: "weekly" labels: ["infrastructure"] assignees: ["@platform-team"]在updates条目中通过multi-ecosystem-group: "GROUP_NAME"归属组。注意:使用该特性时,每个生态条目中patterns键是必需的(参考 example-configs.md 的 Docker + Terraform 示例)。
过滤选项:精确控制"更新什么、不更新什么"
allow:显式白名单
只维护列出的依赖:
| 参数 | 用途 |
|---|---|
dependency-name | 按名称匹配(支持*通配) |
dependency-type | direct、indirect、all、production、development |
allow: - dependency-type: "production" - dependency-name: "express"ignore:排除依赖或版本
| 参数 | 用途 |
|---|---|
dependency-name | 按名称匹配(支持*通配) |
versions | 指定版本或范围(如["5.x"]、[">=2.0.0"]) |
update-types | SemVer 级别:version-update:semver-major、version-update:semver-minor、version-update:semver-patch |
ignore: - dependency-name: "lodash" - dependency-name: "@types/node" update-types: ["version-update:semver-patch"] - dependency-name: "express" versions: ["5.x"]优先级规则:如果依赖同时命中allow与ignore,最终被ignore忽略。
exclude-paths:跳过扫描目录
忽略特定目录或文件,使其不参与清单扫描:
exclude-paths: - "vendor/**" - "test/fixtures/**" - "*.lock"支持三种 glob 形态:*(单段)、**(递归)、具体文件路径。
PR 定制选项
labels与assignees
labels: - "dependencies" - "npm" assignees: - "user1" - "user2"labels: []可禁用全部标签;仓库中若已存在 SemVer 标签(major/minor/patch),无论配置如何都会自动附加。- assignees 必须对仓库拥有写权限(组织仓库可为读权限)。
milestone、commit-message、pull-request-branch-name
milestone: 4 # 里程碑 URL 中的数字 ID commit-message: prefix: "deps" # 最多 50 字符;以字母/数字结尾时自动追加冒号 prefix-development: "deps-dev" # 开发依赖的独立前缀 include: "scope" # 在前缀后追加 deps/deps-dev 作用域 pull-request-branch-name: separator: "-" # 可选值:"-"、"_"、"/"target-branch
target-branch: "develop"设置后,版本更新 PR 将基于该分支而非默认分支。安全更新永远以默认分支为目标,且target-branch只会作用于版本更新配置。
调度与限流
cooldown:新版本冷却期
延迟处理刚发布的新版本,避免"早鸟踩坑":
| 参数 | 用途 |
|---|---|
default-days | 默认冷却天数(1–90 天) |
semver-major-days | 大版本更新冷却 |
semver-minor-days | 小版本更新冷却 |
semver-patch-days | 补丁更新冷却 |
include | 应用冷却的依赖(最多 150 个,支持*) |
exclude | 豁免冷却的依赖(最多 150 个,优先级更高) |
cooldown: default-days: 5 semver-major-days: 30 semver-minor-days: 7 semver-patch-days: 3 include: ["*"] exclude: ["critical-security-lib"]注意:cooldown仅作用于版本更新,不作用于安全更新(SKILL.md 明确说明)。
open-pull-requests-limit
open-pull-requests-limit: 10 # 版本更新默认 5设置为0将完全禁用版本更新 PR(安全更新仍会进行,其内部独立上限为 10)。这是"只做安全更新"场景的核心开关。
高级选项
versioning-strategy:版本约束的编辑策略
受支持生态:bundler、cargo、composer、mix、npm、pip、pub、uv。
| 值 | 行为 |
|---|---|
auto | 默认:应用项目提升最小值,库项目放宽范围 |
increase | 总是提升最小版本 |
increase-if-necessary | 仅当当前范围不包含新版本时才修改 |
lockfile-only | 只更新 lockfile,不动清单 |
widen | 放宽范围,同时兼容新旧版本 |
rebase-strategy与vendor
rebase-strategy: "disabled" # 默认在冲突时自动 rebase;PR 打开 30 天后停止 vendor: true # 维护 vendored 依赖,受支持生态:bundler、gomod- 在提交信息中包含
[dependabot skip]可允许 Dependabot 在额外提交之上强制推送 rebase。 - Go modules 会自动探测 vendored 依赖。
insecure-external-code-execution
受支持生态:bundler、mix、pip。允许 Dependabot 在更新期间执行清单中的代码——部分生态在依赖解析阶段需要运行代码,此时必须开启:
insecure-external-code-execution: "allow"私有仓库(Private Registries)配置
顶层registries定义
支持 npm、Maven、Docker、Python 等私有源:
registries: npm-private: type: npm-registry url: https://npm.example.com token: ${{secrets.NPM_TOKEN}} maven-central: type: maven-repository url: https://repo.maven.apache.org/maven2 username: "" password: "" docker-ghcr: type: docker-registry url: https://ghcr.io username: ${{secrets.GHCR_USER}} password: ${{secrets.GHCR_TOKEN}} python-private: type: python-index url: https://pypi.example.com/simple token: ${{secrets.PYPI_TOKEN}}在生态条目中关联
updates: - package-ecosystem: "npm" directory: "/" registries: - npm-private schedule: interval: "weekly"使用registries: "*"可允许该条目访问全部已定义仓库。完整的私有 npm + Docker 组合示例见 example-configs.md。
仓库内的 Dependabot 实践佐证
awesome-copilot 仓库自身将 Dependabot 作为供应链安全的一环来使用,可作为实际落地参考:
- github-actions 供应链安全指南 强调:第三方 GitHub Actions 应以不可变的 40 位 commit SHA固定版本(可变 tag 可能被上游恶意重指向),并让 Dependabot 维护这些 SHA 固定——Dependabot 能识别
# vX.Y.Z注释并自动提升 SHA,配置方式即标准的github-actions生态条目:version: 2 updates: - package-ecosystem: github-actions directory: / schedule: interval: weekly - vcpkg CI 指南 给出了 C++ 生态的 Dependabot 用法(
vcpkg.json的builtin-baseline自动更新),与手动脚本方案互为替代。
实战速查:几类高频完整配置
最小单生态配置(example-configs.md):
version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "weekly"仅安全更新(禁用版本更新):
version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "daily" open-pull-requests-limit: 0 # 禁用版本更新 PR groups: security-all: applies-to: security-updates patterns: ["*"] update-types: ["patch", "minor"]monorepo + 分组 + 冷却 + 私有源全功能配置:完整 5 生态示例(npm 工作区、GitHub Actions、Docker、pip、Terraform)见 example-configs.md 的 Full-Featured Configuration 一节,其中演示了directoriesglob、group-by: dependency-name、cooldown、versioning-strategy与按生态差异化commit-message前缀(如ci、infra)的组合用法。
PR 注释命令与维护技巧
对单个 PR 或分组 PR 可以评论@dependabot <command>进行交互(Dependabot 会以 👍 表情确认):
| 命令 | 作用 |
|---|---|
@dependabot rebase | 基于目标分支 rebase PR |
@dependabot recreate | 从头重建 PR,覆盖手工修改 |
@dependabot ignore this dependency | 关闭 PR 并永久停止该依赖更新 |
@dependabot ignore this major version等 | 按 major/minor/patch 维度忽略 |
@dependabot show DEPENDENCY_NAME ignore conditions | 查看当前忽略条件表 |
分组 PR 额外支持@dependabot ignore DEPENDENCY_NAME、@dependabot unignore DEPENDENCY_NAME、@dependabot unignore *等命令(完整命令表见 pr-commands.md)。
两点重要提醒(源自 pr-commands.md 的弃用公告):
- 自 2026 年 1 月起,
@dependabot merge、squash and merge、cancel merge、close、reopen命令已被移除,请改用 GitHub 原生 UI、gh pr mergeCLI 或 auto-merge; - 通过 PR 注释产生的 ignore 是集中存储的;对团队仓库透明性而言,优先把规则写进
dependabot.yml的ignore键。
FAQ
能否有多个dependabot.yml?不能。GitHub 每个仓库只支持.github/dependabot.yml一个文件,多生态/多目录用多个updates条目表达。
Dependabot 支持 pnpm 吗?支持。使用package-ecosystem: "npm",Dependabot 自动识别pnpm-lock.yaml。
如何降低 monorepo 的 PR 噪音?组合使用groups批量更新、directories+ glob 全覆盖、group-by: dependency-name跨目录合并;对低优先级生态可选用monthly/quarterly间隔。
如何处理工作区之外的独立包?为它单独写一个生态条目,directory指向其所在目录即可。
如何通过 AI 编码 Agent 在提交前扫描依赖漏洞?安装 GitHub MCP Server 的 Advanced Security 插件(advanced-security@copilot-plugins),启用dependabot工具集(copilot --add-github-mcp-toolset dependabot),即可在提交前针对新增依赖查询 GitHub Advisory Database,返回受影响包、严重级别与建议修复版本(详见 SKILL.md 的 Pre-Commit Dependency Scanning 一节)。
【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考