如何为Renovate正式与预发布版本配置差异化packageRules
问题结论
完全可以通过packageRules实现你需要的差异化automerge逻辑,你现有配置不生效的核心原因是prerelease不属于matchUpdateTypes的合法取值,该字段仅支持major/minor/patch/pin/digest/lockFileMaintenance/rollback/replacement等值,你写的第二条规则不会被正常命中。
实现逻辑
你需要的自动合并/不合并规则,本质可以简化为一个判断逻辑:
- 只要更新的新版本为正式稳定版,且属于patch类型更新,就开启automerge
- 只要更新的新版本为预发布版本,无论当前版本是正式版还是预发布版,一律关闭automerge
这个逻辑可以100%覆盖你列出的所有场景:
- 需自动合并的v1.0.0→v1.0.1(正式补丁)、v1.0.2-alpha.1→v1.0.2(预发布升同线正式补丁),两个场景的新版本均为无后缀正式版,且更新类型为patch
- 无需自动合并的v1.0.0→v1.0.1-alpha.1(正式升预发布补丁)、v1.0.1-alpha.1→v1.0.1-alpha.2(预发布升更高版预发布),两个场景的新版本均带预发布后缀
可用配置
注意Renovate的packageRules按从上到下顺序匹配,后加载的规则会覆盖之前规则的同项配置,你可以把原有配置替换为如下内容:
{ "packageRules": [ { "matchDatasources": ["git-tags"], "matchManagers": ["ansible-galaxy"], "matchUpdateTypes": ["patch"], "enabled": true, "automerge": true, "platformAutomerge": true }, { "matchDatasources": ["git-tags"], "matchManagers": ["ansible-galaxy"], "matchNewVersion": "/\\d+\\.\\d+\\.\\d+-/", "automerge": false, "platformAutomerge": false } ] }
配置说明:
- 第一条规则先给所有git-tags源、ansible-galaxy管理器的patch类型更新默认开启自动合并
- 第二条规则通过正则匹配所有新版本号符合SemVer预发布特征(三段核心版本号后带
-后缀,对应alpha/beta/rc等所有预发布标识)的更新,强制关闭自动合并,优先级高于第一条规则 - 正则
/\d+\.\d+\.\d+-/可以覆盖所有标准格式的预发布版本,如果你用的版本带v前缀也不影响匹配,因为只校验版本号核心段后的横杠标识
场景校验
对应你列出的四个场景,配置命中逻辑如下:
- v1.0.0→v1.0.1:新版本无预发布后缀,不命中第二条规则,按第一条规则开启自动合并
- v1.0.2-alpha.1→v1.0.2:新版本无预发布后缀,不命中第二条规则,按第一条规则开启自动合并
- v1.0.0→v1.0.1-alpha.1:新版本带预发布后缀,命中第二条规则,关闭自动合并
- v1.0.1-alpha.1→v1.0.1-alpha.2:新版本带预发布后缀,命中第二条规则,关闭自动合并
内容的提问来源于stack exchange,提问作者Jehof
相关产品推荐
相关产品推荐

