news 2026/9/13 17:48:25

Renovate Dependency Dashboard 完全指南:依赖状态总览、弃用警告与人工审批工作流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Renovate Dependency Dashboard 完全指南:依赖状态总览、弃用警告与人工审批工作流

Renovate Dependency Dashboard 完全指南:依赖状态总览、弃用警告与人工审批工作流

【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovate

依赖更新自动化工具 Renovate 内置了Dependency Dashboard(依赖仪表盘)功能:它在仓库中创建一个动态的 Issue,以 Markdown 复选框(Checkbox)的形式集中展示所有依赖更新的状态,并支持“勾选即触发”的人机交互,例如批准待审批的更新、强制创建受限的 PR、重试出错的分支、批量 Rebase 全部 PR 等。本文基于 Renovate 源码仓库,系统讲解 Dashboard 的开启/关闭方式、内置预设、各区块含义、审批工作流(Approval Workflow)的三种配置粒度,以及它背后的源码实现机制,帮助你读完即可在真实仓库中落地这套“更新可控、状态透明”的依赖治理方案。

一、什么是 Dependency Dashboard

Renovate 的 Dependency Dashboard 是一个由 Renovate 自动创建并持续维护的 Issue。当该功能启用后,Renovate 会在每次运行时更新这个 Issue 的内容,把仓库内所有依赖更新的“待办事项”以结构化 Markdown 形式呈现出来,包括:待批准的更新、受计划(Schedule)限制的更新、受并发/频率限制的更新、出错待重试的更新、被关闭的 PR 等。

该 Issue 的本质是一张可交互的“控制面板”:每一行更新对应一个带<!-- comment -->标记的复选框。用户勾选某个复选框后,Renovate 在下次运行时通过解析 Issue 正文(见 dependency-dashboard.ts 中的parseDashboardIssuegetCheckedBranches)识别用户的意图,并执行对应动作,例如创建 PR、重试、Rebase、取消限流等。因此,Dashboard 不只是“看板”,还是依赖更新的人机交互入口

在 lib/config/options/index.ts 中,dependencyDashboard的官方描述是:“Whether to create a 'Dependency Dashboard' issue in the repository.”,默认值为false。这意味着默认情况下 Renovate 不会创建 Dashboard,需要显式开启。

二、支持的平台

Dependency Dashboard 依赖一个关键能力:宿主平台必须支持“带动态 Markdown 复选框的 Issue”。因为 Dashboard 的所有交互动作都建立在勾选/取消勾选复选框并让 Renovate 解析的基础上,如果平台不支持 Issue 或不支持在 Issue 中渲染/编辑复选框,该功能就无法工作。

判断你的平台是否支持:参考仓库文档 FAQ:Renovate core features not supported on all platforms。

此外从源码看,部分 Dashboard 的进阶能力对平台有额外要求。例如 CVE 汇总区块、vulnerabilityAlerts配置在 lib/config/options/index.ts 中标注了supportedPlatforms: ['github'],即 OSV 漏洞提醒相关能力目前以 GitHub 平台支持最为完整。

三、如何开启与关闭 Dashboard

3.1 通过预设(Preset)开启

官方推荐通过内置预设:dependencyDashboard开启,只需把它加入extends数组:

{ "extends": ["schedule:automergeDaily", ":dependencyDashboard"] }

该预设定义在 lib/config/presets/internal/default.preset.ts:

dependencyDashboard: { dependencyDashboard: true, description: 'Enable Renovate Dependency Dashboard creation.', },

值得注意:推荐配置config:recommended本身已经内联了:dependencyDashboard(见 lib/config/presets/internal/config.preset.ts)。也就是说,只要你的配置extends: ["config:recommended"],Dashboard 默认就是开启的。

3.2 直接配置布尔值

不依赖预设,直接设置配置项:

{ "dependencyDashboard": true }

该配置项类型为boolean,默认false(见 lib/config/options/index.ts)。

3.3 关闭 Dashboard

添加预设:disableDependencyDashboard,或将dependencyDashboard显式设为false

{ "extends": ["config:recommended", ":disableDependencyDashboard"] }
{ "dependencyDashboard": false }

disableDependencyDashboard预设同样定义在 lib/config/presets/internal/default.preset.ts,其作用就是将dependencyDashboard覆盖为false。关闭后,如果之前已经创建过 Dashboard Issue,Renovate 会在下一次运行时通过platform.ensureIssueClosing将其关闭(见 dependency-dashboard.ts 的关闭分支逻辑)。

3.4 自动关闭(Autoclose)

如果希望“没有更新待办时自动关闭 Dashboard”,可组合使用dependencyDashboardAutoclose(默认false):

{ "dependencyDashboard": true, "dependencyDashboardAutoclose": true }

从源码看(dependency-dashboard.ts),当dependencyDashboardAutoclosetrue,且当前既没有需要处理的分支(branches为空)、也没有弃用/替换类警告时,Renovate 会直接关闭 Dashboard Issue。

四、Dashboard 的核心使用场景

4.1 弃用依赖(Deprecations)与替换(Replacements)警告

Renovate 会在仓库中检测到以下情况时,在 Dashboard 顶部区域醒目地提示:

  • 依赖在其注册表(Registry)中被标记为 deprecated(已弃用);
  • 存在社区来源的替换包(Replacement),即 Renovate 官方维护的replacements:all预设所覆盖的替换方案。

提示效果类似于:

The following dependencies are deprecated:

DatasourceNameReplacement?
npmairbnb-prop-types
npmleft-pad

其中绿色 "Available" 表示已存在可操作的替换 PR,橙色 "Unavailable" 表示该依赖已弃用但暂无替换方案。

这一区块由 dependency-dashboard.ts 中的逻辑生成:Renovate 遍历所有packageFiles的依赖,检查dep.deprecationMessage以及是否存在updateType === 'replacement'的更新;若替换目标已经在依赖清单中存在(replacementAlreadyExists),则该替换会被判定为“不可操作”(Unavailable)。

4.2 弃用检测(Abandonment detection)

除了注册表显式标记的 deprecated 外,Renovate 还能识别“长期不更新、疑似被弃用”的包。官方提供了abandonments:recommended预设(已自动包含在config:best-practices中),该预设:

  • 为所有包设置默认的abandonmentThreshold,默认值为1 year(即超过一年未发布新版本即标记为可能弃用);
  • 内置社区维护的覆盖项(Overrides),用于排除那些“看似弃用、实则仍在维护”的包;
  • 阻止对真正弃用包的更新,同时允许对发布节奏不规律的包继续更新。

使用方式:

{ "extends": ["abandonments:recommended"] }

你还可以贡献/修改覆盖项,对应数据文件为 lib/data/abandonments.json。

dependencyDashboardReportAbandonment(默认true,见 lib/config/options/index.ts)开启时,Dashboard 会额外生成 “Abandoned Dependencies” 区块,以<details>折叠列表展示被判定为弃用的依赖、其 Datasource、最后更新时间(格式化自mostRecentTimestamp)。该区块由getAbandonedPackagesMd生成(dependency-dashboard.ts)。

4.3 已关闭/被忽略更新的可见性

Dashboard 会列出所有“待办(to do)”的更新。如果你手动关闭了 Renovate 创建的更新 PR,该更新会出现在 Dashboard 的Closed/Ignored(源码中对应PR Closed (Blocked)区块)部分,而不是凭空消失。之后若改变主意,只需勾选该行对应的复选框,Renovate 就会重新创建 PR。

4.4 CVE / 漏洞汇总(实验性)

配置项dependencyDashboardOSVVulnerabilitySummary(默认'none',可选'none' | 'all' | 'unresolved',标注为 experimental)控制是否在 Dashboard 中列出 osv.dev 提供的 CVE 信息,例如:

{ "dependencyDashboard": true, "dependencyDashboardOSVVulnerabilitySummary": "all" }

源码中getDashboardMarkdownVulnerabilities(dependency-dashboard.ts)会汇总漏洞数量、区分“已有修复版本”与“未修复”,并以manager → packageFile → packageName的多层<details>结构呈现每个 CVE 及其修复版本。

五、Approval Workflow:让更新“先审批、后创建”

Dependency Dashboard 除了展示状态,还承载着“审批(Approval)”工作流:让 Renovate 在创建更新 PR 前等待你的手动批准。核心配置项为dependencyDashboardApproval(默认false,见 lib/config/options/index.ts),官方描述为:“Controls if updates need manual approval from the Dependency Dashboard issue before PRs are created.”

注意:无论审批如何配置,漏洞修复类(vulnerability remediation)PR 始终会被立即创建,无需审批。这一点在配置默认值上也有体现——vulnerabilityAlerts的默认配置中dependencyDashboardApproval: false(见 lib/config/options/index.ts)。

审批粒度分为三个层级,且可以混合使用。

5.1 要求所有更新都需审批(不推荐)

使用预设:dependencyDashboardApproval

{ "extends": ["config:recommended", ":dependencyDashboardApproval"] }

该预设定义在 lib/config/presets/internal/default.preset.ts。官方并不推荐全局启用:因为一旦所有更新都需要人工批准,你就必须频繁检查 Dashboard,否则重要更新会被无限期搁置(“眼不见,心不烦”)。它只适合那些觉得 Renovate 噪音太大、希望完全掌控更新节奏的仓库。

5.2 仅要求 major 更新审批(推荐场景)

Major 更新通常包含破坏性变更,需要人工适配。相比直接禁用 major 更新(更新完全不可见),审批模式能让你在 Dashboard 上看到所有待处理的 major 更新,并在合适的时间逐个批准:

{ "major": { "dependencyDashboardApproval": true } }

5.3 仅要求特定包审批

适用于不遵循语义化版本、每次发布都可能破坏 API 的包,或更新过于频繁、希望手动掌控更新节奏的包。通过packageRules按包名/模式匹配:

{ "packageRules": [ { "matchPackageNames": ["@somescope/**"], "dependencyDashboardApproval": true } ] }

上述三种方式可以自由组合:例如全局自动更新,仅对 major 和特定命名空间开启审批。

5.4 审批的触发与生效条件(源码视角)

从 dependency-dashboard.ts 的ensureDependencyDashboard可以看出,只要满足以下任一条件,Renovate 就会保持/创建 Dashboard,以便承载审批交互:

  • config.dependencyDashboard === true
  • config.dependencyDashboardApproval === true
  • 任一packageRules中设置了dependencyDashboardApproval
  • 存在设置了dependencyDashboardApprovaldependencyDashboardPrApproval的分支

另外,readDashboardBody(dependency-dashboard.ts)表明:即使没有显式开启dependencyDashboard,只要配置中存在"dependencyDashboardApproval": true"prCreation": "approval",Renovate 也会自动读取 Dashboard Issue 并解析其中已勾选的审批项。也就是说,审批工作流会自动带动 Dashboard 的启用

5.5 审批动作如何被执行

当你在 Dashboard 勾选<!-- approve-branch=xxx -->复选框后,下次运行 Renovate 时,parseDashboardIssue会通过正则markedBranchesRe- \[x\] <!-- ([a-zA-Z]+)-branch=([^\s]+) -->)解析所有已勾选条目,将{branchName: type}记录到dependencyDashboardChecks,随后分支处理器据此创建对应 PR。同时,Dashboard 还支持“一键批量操作”复选框(通过getBranchesListMdbulkComment参数生成),例如:

  • 勾选approve-all-pending-prs→ 一次性创建所有待审批 PR
  • 勾选create-all-rate-limited-prs→ 一次性创建所有被限流的 PR
  • 勾选create-all-awaiting-schedule-prs→ 一次性创建所有等待排期的 PR
  • 勾选rebase-all-open-prs→ 一次性 Rebase 所有打开的 PR

六、Dashboard 的区块结构与交互清单

根据 dependency-dashboard.ts 的渲染顺序和仓库测试固件 dependency-dashboard-with-10-PR.txt,Dashboard Issue 通常包含以下区块:

区块标题触发条件(branch.result)勾选后的动作是否支持一键批量
Pending Approvalneeds-approval创建待审批 PR(approve✅ 全部创建
Group Size Not Metminimum-group-size-not-met忽略分组大小限制创建 PR(approveGroup
Awaiting Schedulenot-scheduled立即创建 PR,无视排期(unschedule✅ 全部创建
Rate-Limitedbranch-limit-reached/pr-limit-reached/commit-per-run-limit-reached/commit-hourly-limit-reached强制立即创建(unlimit✅ 全部创建
Errorederror强制立即重试(retry
PR Creation Approval Requiredneeds-pr-approval批准 PR 创建
PR Edited (Blocked)pr-edited丢弃所有提交重新开始(rebase
Pending Status Checkspending强制创建(unpend
Pending Branch AutomergeprBlockedBy === 'BranchAutomerge'中止分支自动合并并改开 PR
Other Branches其他未归类状态强制创建 PR(other
Open已有 PR 且未被阻塞强制重试/Rebase(rebase✅ 全部 Rebase
PR Closed (Blocked)already-existed重新创建 PR(recreate

当仓库没有任何待处理分支时,Dashboard 会显示 “This repository currently has no open or pending branches.”。

此外,errors-warnings.ts 中的getDepWarningsDashboard还会在 Dashboard 中追加 “Renovate failed to look up the following dependencies” 类型的查找失败警告(除非在suppressNotifications中配置了dependencyLookupWarnings)。

七、Dashboard 的定制化配置

除开关外,Renovate 还提供了一系列定制项(均定义于 lib/config/options/index.ts):

配置项类型/默认值说明
dependencyDashboardTitlestring,默认Dependency DashboardDashboard Issue 的标题
dependencyDashboardHeaderstring,支持模板插入到 Issue 正文最开头的内容,默认是一段指向 Dashboard 文档的说明文字
dependencyDashboardFooterstring,支持模板插入到 Issue 正文最后的内容(前面自动加分隔线)
dependencyDashboardLabelsstring[]始终应用到该 Issue 的标签,即使被手动移除也会在下次运行恢复
dependencyDashboardCategorystring用于对 Dashboard 上的分支进行分组的类别;splitBranchesByCategory会按类别名排序渲染(见 dependency-dashboard.ts),未分类分支归入 “Others”
dependencyDashboardReportAbandonmentboolean,默认true是否在 Dashboard 中报告疑似弃用的依赖
dependencyDashboardOSVVulnerabilitySummary'none' \| 'all' \| 'unresolved',默认'none',实验性是否在 Dashboard 中汇总 osv.dev 的 CVE 信息

示例(组合使用):

{ "dependencyDashboard": true, "dependencyDashboardTitle": "Deps Dashboard", "dependencyDashboardHeader": "欢迎查看本仓库的依赖状态总览。", "dependencyDashboardLabels": ["renovate", "dashboard"], "dependencyDashboardOSVVulnerabilitySummary": "unresolved" }

注意:dependencyDashboardHeaderdependencyDashboardFooter支持 Renovate 模板语法(supportsTemplating: true),因此可以插入{{datasource}}{{depName}}等模板变量。

八、附:Dry Run 行为与运行模式说明

从源码看,Dashboard 的创建/更新/关闭行为还会受到运行模式影响:

  • mode === 'silent'时,Renovate不会创建、更新或关闭Dashboard Issue(见 dependency-dashboard.ts)。
  • dryRun(试运行)模式下,Renovate 不会真正写入 Issue,而是输出DRY-RUN: Would ensure Dependency Dashboard/DRY-RUN: Would close Dependency Dashboard之类的日志,便于你在正式运行前预览 Dashboard 会如何变化。

结语

Dependency Dashboard 是 Renovate 将“自动更新”与“人工掌控”结合起来的关键机制:一方面它以单张 Issue 的形式让仓库内所有依赖更新的状态完全透明、可追踪;另一方面通过可交互的 Markdown 复选框,把“审批、强制、重试、Rebase、重开”等操作化为一次勾选。如果你希望进一步深挖实现细节,可以阅读 dependency-dashboard.ts 及其测试 dependency-dashboard.spec.ts,以及预设定义 default.preset.ts,从而理解每个区块、每个复选框背后的精确行为。

【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovate

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 17:47:28

AI问答系统核心技术解析与实践指南

1. 什么是AI问答系统AI问答系统是一种基于人工智能技术的交互式信息检索工具&#xff0c;它能够理解用户用自然语言提出的问题&#xff0c;并从知识库或数据源中提取相关信息&#xff0c;生成准确、连贯的回答。这类系统通常结合了自然语言处理(NLP)、机器学习和知识图谱等技术…

作者头像 李华