{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base"
  ],
  "ignorePaths": ["instrumentation/**"],
  "baseBranches": ["main", "release/v1.33.x"],
  // needed in order to get patch-only updates in package rules below
  // unfortunately you can't combine updateTypes and separateMinorPatch in the same package rule
  // so we have to apply it globally here, see
  // https://github.com/renovatebot/renovate/discussions/8399#discussioncomment-305798
  "separateMinorPatch": true,
  "packageRules": [
    {
      "matchPackageNames": [
        "io.opentelemetry.contrib:opentelemetry-aws-resources",
        "io.opentelemetry.contrib:opentelemetry-aws-xray-propagator",
        "io.opentelemetry.contrib:opentelemetry-gcp-resources",
        "io.opentelemetry.proto:opentelemetry-proto",
        "io.opentelemetry.semconv:opentelemetry-semconv"
      ],
      // Renovate's default behavior is only to update from unstable -> unstable if it's for the
      // major.minor.patch, under the assumption that you would want to update to the stable version
      // of that release instead of the unstable version for a future release
      // (TODO remove once the artifacts above release stable versions)
      "ignoreUnstable": false,
      "allowedVersions": "!/\\-SNAPSHOT$/"
    },
    {
      "matchPackagePrefixes": ["ch.qos.logback:"],
      "groupName": "logback packages"
    },
    {
      "matchPackagePrefixes": ["com.google.guava:"],
      "groupName": "guava packages"
    },
    {
      "matchPackagePrefixes": ["io.quarkus"],
      "groupName": "quarkus packages"
    },
    {
      "matchPackagePrefixes": ["com.gradle.enterprise"],
      "groupName": "gradle enterprise packages"
    },
    {
      "matchPackagePrefixes": ["org.eclipse.jetty:"],
      "groupName": "jetty packages"
    },
    {
      "matchPackagePrefixes": ["com.linecorp.armeria:"],
      "groupName": "armeria packages"
    },
    {
      "matchPackagePrefixes": ["com.diffplug.spotless"],
      "groupName": "spotless packages"
    },
    {
      "matchPackagePrefixes": ["net.bytebuddy:"],
      "groupName": "byte buddy packages"
    },
    {
      "matchPackagePrefixes": ["com.fasterxml.jackson"],
      "groupName": "jackson packages"
    },
    {
      // prevent update to 2.4-groovy-4.0-SNAPSHOT
      "matchPackageNames": ["org.spockframework:spock-bom"],
      "allowedVersions": "!/\\-SNAPSHOT$/"
    },
    {
      // prevent 3.0.1u2 -> 3.0.1
      "matchPackageNames": ["com.google.code.findbugs:annotations"],
      "allowedVersions": "!/3\\.0\\.1$/"
    },
    {
      // OpenTelemetry SDK updates are handled by auto-update-otel-sdk.yml
      "matchPackagePrefixes": ["io.opentelemetry:"],
      "enabled": false
    },
    {
      // junit-pioneer 2+ requires Java 11+
      "matchPackageNames": ["org.junit-pioneer:junit-pioneer"],
      "matchUpdateTypes": ["major"],
      "enabled": false
    },
    {
      // mockito 5+ requires Java 11+
      "matchPackagePrefixes": ["org.mockito:"],
      "matchUpdateTypes": ["major"],
      "enabled": false
    },
    {
      // system-stubs-jupiter 2.1+ requires Java 11+
      "matchPackageNames": ["uk.org.webcompere:system-stubs-jupiter"],
      "matchUpdateTypes": ["major", "minor"],
      "enabled": false
    },
    {
      // intentionally using Spring Boot 2 in this smoke tests
      "matchFileNames": ["smoke-tests/images/spring-boot/build.gradle.kts"],
      "matchPackageNames": ["org.springframework.boot", "org.springframework.boot:spring-boot-dependencies"],
      "matchUpdateTypes": ["major"],
      "enabled": false,
    },
    {
      // intentionally using logback 1.2 in this smoke tests
      "matchFileNames": ["smoke-tests/images/spring-boot/build.gradle.kts"],
      "matchPackagePrefixes": ["ch.qos.logback:"],
      "matchUpdateTypes": ["major", "minor"],
      "enabled": false
    },
    {
      // intentionally using slf4j 1 in this smoke tests
      "matchFileNames": ["smoke-tests/images/spring-boot/build.gradle.kts"],
      "matchPackagePrefixes": ["org.slf4j:"],
      "matchUpdateTypes": ["major"],
      "enabled": false
    },
    {
      // intentionally aligning both netty 4.0 and 4.1 version in this convention
      "matchFileNames": ["conventions/src/main/kotlin/otel.java-conventions.gradle.kts"],
      "matchPackageNames": ["io.netty:netty-bom"],
      "matchUpdateTypes": ["major", "minor"],
      "enabled": false
    },
    {
      // intentionally using scala 2.11 in otel.scala-conventions.gradle.kts
      "matchFileNames": ["conventions/src/main/kotlin/otel.scala-conventions.gradle.kts"],
      "matchPackagePrefixes": ["org.scala-lang:scala-library"],
      "matchUpdateTypes": ["major", "minor"],
      "enabled": false
    },
    {
      // intentionally using Java 11 in some examples
      // not using matchUpdateTypes "major", because renovate wants to bump "11-jre" to "11.0.19_7-jre"
      "matchPackageNames": ["eclipse-temurin"],
      "enabled": false
    },
    {
      // using old version of this obscure artifact to test instrumentation of Java 1.1 bytecode
      "matchPackageNames": ["net.sf.jt400:jt400"],
      "matchCurrentVersion": "6.1",
      "enabled": false
    },
    {
      // pinned version for compatibility
      "matchPackageNames": ["javax.servlet:javax.servlet-api"],
      "matchCurrentVersion": "3.0.1",
      "enabled": false
    },
    {
      // pinned version for compatibility
      "matchPackageNames": ["jakarta.servlet:jakarta.servlet-api"],
      "matchCurrentVersion": "5.0.0",
      "enabled": false
    },
    {
      // intentionally using logback 1.3 in dependency management (for Java 8 support)
      "matchFileNames": ["dependencyManagement/build.gradle.kts"],
      "matchPackagePrefixes": ["ch.qos.logback:"],
      "matchUpdateTypes": ["major", "minor"],
      "enabled": false
    },
    {
      // intentionally using Spring Boot 2 in dependency management (for Java 8 support)
      "matchFileNames": ["dependencyManagement/build.gradle.kts"],
      "matchPackagePrefixes": ["org.springframework.boot:spring-boot-dependencies"],
      "matchUpdateTypes": ["major"],
      "enabled": false
    },
    {
      // pinned version to Jetty 8 (Servlet 3.0) for compatibility
      "matchFileNames": ["examples/distro/instrumentation/servlet-3/build.gradle"],
      "matchPackagePrefixes": ["org.eclipse.jetty:"],
      "matchUpdateTypes": ["major"],
      "enabled": false
    }
  ]
}
