You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Renovate多allowedVersions规则叠加问题:如何让两规则同时生效?

问题与解决方案

背景与问题

公司预设仓库company-preset-repo的default.json中有一条规则,用于排除版本含.redhat-的Maven依赖:

{
  "matchManagers": ["maven"],
  "matchPackageNames": [
    "commons-io:commons-io",
    "org.apache.commons:commons-lang3",
    "org.apache.httpcomponents:httpclient",
    "com.cronutils:cron-utils",
    "com.jayway.jsonpath:json-path",
    "com.thoughtworks.xstream:xstream",
    "javax.xml.bind:jaxb-api",
    "net.sf.jopt-simple:jopt-simple",
    "org.jsoup:jsoup",
    "org.yaml:snakeyaml"
  ],
  "allowedVersions": "!/\\.redhat-/"
}

团队自定义的Renovate预设default.json继承了上述预设,同时添加规则阻止commons-io等依赖被替换为20030203.000550这类格式的版本:

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "description": [
    "Default preset for my team"
  ],
  "gitAuthor": "some@email",
  "extends": [
    "local>company-preset-repo"
  ],
  "packageRules": [
    {
      "matchPackagePatterns": [
        "^org.apache.commons:",
        "^commons-beanutils:",
        "^commons-cli:",
        "^commons-collections:",
        "^commons-io:"
      ],
      "allowedVersions": "/^\\d{1,2}\\.\\d{1,2}(\\..*)?$/"
    }
  ]
}

当前遇到的问题:Renovate推送了commons-io:commons-io版本2.11.0.redhat-00001的更新请求,需要让两条规则同时生效——仅当版本不含.redhat-且不是20030203.000550这类格式时,才允许更新。

解决方案

可以实现,核心是让两条allowedVersions规则逻辑与(同时满足),以下是两种可行方案:

方案一:合并规则条件

修改团队预设的packageRules,针对重叠的依赖单独创建规则,将两个条件合并到同一个allowedVersions表达式中:

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "description": [
    "Default preset for my team"
  ],
  "gitAuthor": "some@email",
  "extends": [
    "local>company-preset-repo"
  ],
  "packageRules": [
    // 保留原有针对其他commons类依赖的规则
    {
      "matchPackagePatterns": [
        "^org.apache.commons:",
        "^commons-beanutils:",
        "^commons-cli:",
        "^commons-collections:"
      ],
      "allowedVersions": "/^\\d{1,2}\\.\\d{1,2}(\\..*)?$/"
    },
    // 针对commons-io单独设置合并后的规则
    {
      "matchPackageNames": ["commons-io:commons-io"],
      "allowedVersions": "/^\\d{1,2}\\.\\d{1,2}(\\..*)?$/ && !/\\.redhat-/"
    }
  ]
}

通过&&组合两个正则条件,要求版本同时符合:

  • 遵循x.y(.*)的格式(排除无小版本号的20030203.000550类版本)
  • 不包含.redhat-字符串

方案二:使用数组形式组合条件

利用Renovate的数组式allowedVersions特性,数组内的所有条件需同时满足:

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "description": [
    "Default preset for my team"
  ],
  "gitAuthor": "some@email",
  "extends": [
    "local>company-preset-repo"
  ],
  "packageRules": [
    {
      "matchPackagePatterns": [
        "^org.apache.commons:",
        "^commons-beanutils:",
        "^commons-cli:",
        "^commons-collections:",
        "^commons-io:"
      ],
      // 数组内的条件需同时满足
      "allowedVersions": [
        "/^\\d{1,2}\\.\\d{1,2}(\\..*)?$/",
        "!/\\.redhat-/"
      ]
    }
  ]
}

验证效果

修改后,Renovate会自动过滤两类版本:

  • 格式为20030203.000550的非标准版本
  • 包含.redhat-后缀的版本
    仅同时满足格式合法且不含.redhat-的版本会被推送更新。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:40:32