build.gradle.kts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
  2. plugins {
  3. `java-platform`
  4. id("com.github.ben-manes.versions")
  5. }
  6. data class DependencySet(val group: String, val version: String, val modules: List<String>)
  7. val dependencyVersions = hashMapOf<String, String>()
  8. rootProject.extra["versions"] = dependencyVersions
  9. // IMPORTANT when updating otelVersion, make sure that grpcVersion below is >= the grpc version
  10. // used by that otel version
  11. val otelVersion = "1.7.0"
  12. val grpcVersion = "1.41.0"
  13. rootProject.extra["otelVersion"] = otelVersion
  14. // Need both BOM and -all
  15. val groovyVersion = "2.5.14"
  16. rootProject.extra["caffeine2Version"] = "2.9.2"
  17. rootProject.extra["caffeine3Version"] = "3.0.4"
  18. // We don't force libraries we instrument to new versions since we compile and test against specific
  19. // old baseline versions
  20. // but we do try to force those libraries' transitive dependencies to new versions where possible
  21. // so that we don't end up with explosion of dependency versions in Intellij, which causes
  22. // Intellij to spend lots of time indexing all of those different dependency versions,
  23. // and makes debugging painful because Intellij has no idea which dependency version's source
  24. // to use when stepping through code.
  25. //
  26. // Sometimes libraries we instrument do require a specific version of a transitive dependency
  27. // and that can be applied in the specific instrumentation gradle file, e.g.
  28. // configurations.testRuntimeClasspath.resolutionStrategy.force "com.google.guava:guava:19.0"
  29. val DEPENDENCY_BOMS = listOf(
  30. "com.fasterxml.jackson:jackson-bom:2.12.3",
  31. "com.google.guava:guava-bom:30.1.1-jre",
  32. "org.codehaus.groovy:groovy-bom:${groovyVersion}",
  33. "io.opentelemetry:opentelemetry-bom:${otelVersion}",
  34. "io.opentelemetry:opentelemetry-bom-alpha:${otelVersion}-alpha",
  35. "org.junit:junit-bom:5.7.2"
  36. )
  37. val DEPENDENCY_SETS = listOf(
  38. DependencySet(
  39. "com.google.auto.value",
  40. "1.8.1",
  41. listOf("auto-value", "auto-value-annotations")
  42. ),
  43. DependencySet(
  44. "com.google.errorprone",
  45. "2.7.1",
  46. listOf("error_prone_annotations", "error_prone_core")
  47. ),
  48. DependencySet(
  49. "io.prometheus",
  50. "0.11.0",
  51. listOf("simpleclient", "simpleclient_common", "simpleclient_httpserver")
  52. ),
  53. DependencySet(
  54. "net.bytebuddy",
  55. // When updating, also update conventions/build.gradle.kts
  56. "1.11.20",
  57. listOf("byte-buddy", "byte-buddy-dep", "byte-buddy-agent", "byte-buddy-gradle-plugin")
  58. ),
  59. DependencySet(
  60. "org.openjdk.jmh",
  61. "1.32",
  62. listOf("jmh-core", "jmh-generator-bytecode")
  63. ),
  64. DependencySet(
  65. "org.mockito",
  66. "3.11.1",
  67. listOf("mockito-core", "mockito-junit-jupiter")
  68. ),
  69. DependencySet(
  70. "org.slf4j",
  71. "1.7.30",
  72. listOf("slf4j-api", "slf4j-simple", "log4j-over-slf4j", "jcl-over-slf4j", "jul-to-slf4j")
  73. ),
  74. DependencySet(
  75. "org.testcontainers",
  76. "1.15.3",
  77. listOf("testcontainers", "junit-jupiter", "cassandra", "couchbase", "elasticsearch", "kafka", "localstack", "selenium")
  78. )
  79. )
  80. val DEPENDENCIES = listOf(
  81. "ch.qos.logback:logback-classic:1.2.3",
  82. "com.blogspot.mydailyjava:weak-lock-free:0.18",
  83. "com.github.stefanbirkner:system-lambda:1.2.0",
  84. "com.github.stefanbirkner:system-rules:1.19.0",
  85. "com.google.auto.service:auto-service:1.0",
  86. "com.uber.nullaway:nullaway:0.9.1",
  87. "commons-beanutils:commons-beanutils:1.9.4",
  88. "commons-cli:commons-cli:1.4",
  89. "commons-codec:commons-codec:1.15",
  90. "commons-collections:commons-collections:3.2.2",
  91. "commons-digester:commons-digester:2.1",
  92. "commons-fileupload:commons-fileupload:1.4",
  93. "commons-io:commons-io:2.10.0",
  94. "commons-lang:commons-lang:2.6",
  95. "commons-logging:commons-logging:1.2",
  96. "commons-validator:commons-validator:1.7",
  97. "io.netty:netty:3.10.6.Final",
  98. "org.assertj:assertj-core:3.21.0",
  99. "org.awaitility:awaitility:4.1.0",
  100. "com.google.code.findbugs:jsr305:3.0.2",
  101. "org.codehaus.groovy:groovy-all:${groovyVersion}",
  102. "org.objenesis:objenesis:3.2",
  103. "org.spockframework:spock-core:2.0-groovy-2.5",
  104. "org.spockframework:spock-junit4:2.0-groovy-2.5",
  105. "org.scala-lang:scala-library:2.11.12",
  106. "org.springframework.boot:spring-boot-dependencies:2.3.1.RELEASE",
  107. "io.grpc:grpc-netty-shaded:${grpcVersion}"
  108. )
  109. javaPlatform {
  110. allowDependencies()
  111. }
  112. dependencies {
  113. for (bom in DEPENDENCY_BOMS) {
  114. api(enforcedPlatform(bom))
  115. val split = bom.split(':')
  116. dependencyVersions[split[0]] = split[2]
  117. }
  118. constraints {
  119. for (set in DEPENDENCY_SETS) {
  120. for (module in set.modules) {
  121. api("${set.group}:${module}:${set.version}")
  122. dependencyVersions[set.group] = set.version
  123. }
  124. }
  125. for (dependency in DEPENDENCIES) {
  126. api(dependency)
  127. val split = dependency.split(':')
  128. dependencyVersions[split[0]] = split[2]
  129. }
  130. }
  131. }
  132. fun isNonStable(version: String): Boolean {
  133. val stableKeyword = listOf("RELEASE", "FINAL", "GA").any { version.toUpperCase().contains(it) }
  134. val regex = "^[0-9,.v-]+(-r)?$".toRegex()
  135. val isGuava = version.endsWith("-jre")
  136. val isStable = stableKeyword || regex.matches(version) || isGuava
  137. return isStable.not()
  138. }
  139. tasks {
  140. named<DependencyUpdatesTask>("dependencyUpdates") {
  141. revision = "release"
  142. checkConstraints = true
  143. rejectVersionIf {
  144. isNonStable(candidate.version)
  145. }
  146. }
  147. }