diff --git a/metadata/com.fasterxml.jackson.core/jackson-databind/index.json b/metadata/com.fasterxml.jackson.core/jackson-databind/index.json index 86e695e64..ece276a74 100644 --- a/metadata/com.fasterxml.jackson.core/jackson-databind/index.json +++ b/metadata/com.fasterxml.jackson.core/jackson-databind/index.json @@ -6,29 +6,24 @@ "tested-versions" : [ "2.15.2", "2.15.4", - "2.16.0-rc1", "2.16.0", "2.16.1", "2.16.2", - "2.17.0-rc1", "2.17.0", "2.17.1", "2.17.2", "2.17.3", - "2.18.0-rc1", "2.18.0", "2.18.1", "2.18.2", "2.18.3", "2.18.4", "2.18.5", - "2.19.0-rc2", "2.19.0", "2.19.1", "2.19.2", "2.19.3", "2.19.4", - "2.20.0-rc1", "2.20.0", "2.20.1" ] diff --git a/metadata/jakarta.servlet/jakarta.servlet-api/index.json b/metadata/jakarta.servlet/jakarta.servlet-api/index.json index e83437dc9..634550676 100644 --- a/metadata/jakarta.servlet/jakarta.servlet-api/index.json +++ b/metadata/jakarta.servlet/jakarta.servlet-api/index.json @@ -6,8 +6,6 @@ "tested-versions" : [ "5.0.0", "6.0.0", - "6.1.0-M1", - "6.1.0-M2", "6.1.0" ] } diff --git a/metadata/org.eclipse.jetty/jetty-client/12.0.0.beta0/index.json b/metadata/org.eclipse.jetty/jetty-client/12.0.0/index.json similarity index 100% rename from metadata/org.eclipse.jetty/jetty-client/12.0.0.beta0/index.json rename to metadata/org.eclipse.jetty/jetty-client/12.0.0/index.json diff --git a/metadata/org.eclipse.jetty/jetty-client/12.0.0.beta0/reflect-config.json b/metadata/org.eclipse.jetty/jetty-client/12.0.0/reflect-config.json similarity index 100% rename from metadata/org.eclipse.jetty/jetty-client/12.0.0.beta0/reflect-config.json rename to metadata/org.eclipse.jetty/jetty-client/12.0.0/reflect-config.json diff --git a/metadata/org.eclipse.jetty/jetty-client/12.0.0.beta0/resource-config.json b/metadata/org.eclipse.jetty/jetty-client/12.0.0/resource-config.json similarity index 100% rename from metadata/org.eclipse.jetty/jetty-client/12.0.0.beta0/resource-config.json rename to metadata/org.eclipse.jetty/jetty-client/12.0.0/resource-config.json diff --git a/metadata/org.eclipse.jetty/jetty-client/index.json b/metadata/org.eclipse.jetty/jetty-client/index.json index fce96d75d..7d2c8ac2a 100644 --- a/metadata/org.eclipse.jetty/jetty-client/index.json +++ b/metadata/org.eclipse.jetty/jetty-client/index.json @@ -2,11 +2,8 @@ { "latest" : true, "module" : "org.eclipse.jetty:jetty-client", - "metadata-version" : "12.0.0.beta0", + "metadata-version" : "12.0.0", "tested-versions" : [ - "12.0.0.beta0", - "12.0.0.beta1", - "12.0.0.beta3", "12.0.0", "12.0.1", "12.0.2", @@ -28,12 +25,6 @@ "12.0.18", "12.0.19", "12.0.20", - "12.1.0.alpha0", - "12.1.0.alpha1", - "12.1.0.alpha2", - "12.1.0.beta0", - "12.1.0.beta1", - "12.1.0.beta2", "12.1.0", "12.1.1", "12.1.2", diff --git a/metadata/org.eclipse.jetty/jetty-util/index.json b/metadata/org.eclipse.jetty/jetty-util/index.json index becafe768..1b69ee38e 100644 --- a/metadata/org.eclipse.jetty/jetty-util/index.json +++ b/metadata/org.eclipse.jetty/jetty-util/index.json @@ -1,9 +1,9 @@ [ { - "latest" : true, - "module" : "org.eclipse.jetty:jetty-util", - "metadata-version" : "12.0.9", - "tested-versions" : [ + "latest": true, + "module": "org.eclipse.jetty:jetty-util", + "metadata-version": "12.0.9", + "tested-versions": [ "12.0.9", "12.0.10", "12.0.11", @@ -25,13 +25,6 @@ "12.0.27", "12.0.28", "12.0.29", - "12.1.0.alpha0", - "12.1.0.alpha1", - "12.1.0.alpha2", - "12.1.0.beta0", - "12.1.0.beta1", - "12.1.0.beta2", - "12.1.0.beta3", "12.1.0", "12.1.1", "12.1.2", diff --git a/metadata/org.glassfish.jaxb/jaxb-runtime/index.json b/metadata/org.glassfish.jaxb/jaxb-runtime/index.json index f42ea0e53..6b7ca74b1 100644 --- a/metadata/org.glassfish.jaxb/jaxb-runtime/index.json +++ b/metadata/org.glassfish.jaxb/jaxb-runtime/index.json @@ -6,10 +6,6 @@ "tested-versions" : [ "3.0.2", "3.1.0-M1", - "4.0.0-M1", - "4.0.0-M2", - "4.0.0-M3", - "4.0.0-M4", "4.0.0", "4.0.1", "4.0.2", diff --git a/metadata/org.jctools/jctools-core/index.json b/metadata/org.jctools/jctools-core/index.json index f09b69190..474931145 100644 --- a/metadata/org.jctools/jctools-core/index.json +++ b/metadata/org.jctools/jctools-core/index.json @@ -5,7 +5,6 @@ "metadata-version" : "2.1.2", "tested-versions" : [ "2.1.2", - "3.0.0-rc", "3.0.0", "3.0.1", "3.1.0", diff --git a/metadata/org.jetbrains.kotlin/kotlin-reflect/index.json b/metadata/org.jetbrains.kotlin/kotlin-reflect/index.json index ddf737f51..7fc77624f 100644 --- a/metadata/org.jetbrains.kotlin/kotlin-reflect/index.json +++ b/metadata/org.jetbrains.kotlin/kotlin-reflect/index.json @@ -5,20 +5,11 @@ "metadata-version" : "1.7.10", "tested-versions" : [ "1.7.10", - "1.7.20-Beta", - "1.7.20-RC", "1.7.20", "1.7.21", "1.7.22", - "1.8.0-343", - "1.8.0-Beta", - "1.8.0-RC", - "1.8.0-RC2", "1.8.0", "1.8.10", - "1.8.20-Beta", - "1.8.20-RC", - "1.8.20-RC2", "1.8.20", "1.8.21", "1.8.22" diff --git a/metadata/org.jetbrains.kotlin/kotlin-stdlib/index.json b/metadata/org.jetbrains.kotlin/kotlin-stdlib/index.json index 960cda5d6..5025ade5d 100644 --- a/metadata/org.jetbrains.kotlin/kotlin-stdlib/index.json +++ b/metadata/org.jetbrains.kotlin/kotlin-stdlib/index.json @@ -5,20 +5,11 @@ "metadata-version" : "1.7.10", "tested-versions" : [ "1.7.10", - "1.7.20-Beta", - "1.7.20-RC", "1.7.20", "1.7.21", "1.7.22", - "1.8.0-343", - "1.8.0-Beta", - "1.8.0-RC", - "1.8.0-RC2", "1.8.0", "1.8.10", - "1.8.20-Beta", - "1.8.20-RC", - "1.8.20-RC2", "1.8.20", "1.8.21", "1.8.22" diff --git a/metadata/org.quartz-scheduler/quartz/index.json b/metadata/org.quartz-scheduler/quartz/index.json index 626a5edc3..a58a3e564 100644 --- a/metadata/org.quartz-scheduler/quartz/index.json +++ b/metadata/org.quartz-scheduler/quartz/index.json @@ -5,13 +5,8 @@ "metadata-version" : "2.3.2", "tested-versions" : [ "2.3.2", - "2.4.0-rc1", - "2.4.0-rc2", - "2.4.0-rc3", "2.4.0", "2.4.1", - "2.5.0-rc1", - "2.5.0-rc2", "2.5.0", "2.5.1" ] diff --git a/tests/src/index.json b/tests/src/index.json index 079ff66e4..b7e6d50ec 100644 --- a/tests/src/index.json +++ b/tests/src/index.json @@ -1,769 +1,1418 @@ -[ { - "test-project-path" : "ch.qos.logback.contrib/logback-jackson/0.1.5", - "libraries" : [ { - "name" : "ch.qos.logback.contrib:logback-jackson", - "versions" : [ "0.1.5" ] - } ] -}, { - "test-project-path" : "ch.qos.logback.contrib/logback-json-classic/0.1.5", - "libraries" : [ { - "name" : "ch.qos.logback.contrib:logback-json-classic", - "versions" : [ "0.1.5" ] - } ] -}, { - "test-project-path" : "ch.qos.logback/logback-classic/1.2.11", - "libraries" : [ { - "name" : "ch.qos.logback:logback-classic", - "versions" : [ "1.2.11" ] - } ] -}, { - "test-project-path" : "ch.qos.logback/logback-classic/1.4.1", - "libraries" : [ { - "name" : "ch.qos.logback:logback-classic", - "versions" : [ "1.4.1", "1.4.9" ] - } ] -}, { - "test-project-path" : "com.ecwid.consul/consul-api/1.4.5", - "libraries" : [ { - "name" : "com.ecwid.consul:consul-api", - "versions" : [ "1.4.5" ] - } ] -}, { - "test-project-path" : "com.fasterxml.jackson.core/jackson-databind/2.15.2", - "libraries" : [ { - "name" : "com.fasterxml.jackson.core:jackson-databind", - "versions" : [ "2.15.2" ] - } ] -}, { - "test-project-path" : "com.github.ben-manes.caffeine/caffeine/2.9.3", - "libraries" : [ { - "name" : "com.github.ben-manes.caffeine:caffeine", - "versions" : [ "2.9.3" ] - } ] -}, { - "test-project-path" : "com.github.ben-manes.caffeine/caffeine/3.1.2", - "libraries" : [ { - "name" : "com.github.ben-manes.caffeine:caffeine", - "versions" : [ "3.1.2" ] - } ] -}, { - "test-project-path" : "com.github.luben/zstd-jni/1.5.2-5", - "libraries" : [ { - "name" : "com.github.luben:zstd-jni", - "versions" : [ "1.5.2-5" ] - } ] -}, { - "test-project-path" : "com.google.protobuf/protobuf-java-util/3.21.12", - "libraries" : [ { - "name" : "com.google.protobuf:protobuf-java-util", - "versions" : [ "3.21.12" ] - } ] -}, { - "test-project-path" : "com.graphql-java/graphql-java-extended-validation/19.1", - "libraries" : [ { - "name" : "com.graphql-java:graphql-java-extended-validation", - "versions" : [ "19.1" ] - } ] -}, { - "test-project-path" : "com.graphql-java/graphql-java/19.2", - "libraries" : [ { - "name" : "com.graphql-java:graphql-java", - "versions" : [ "19.2" ] - } ] -}, { - "test-project-path" : "com.h2database/h2/2.1.210", - "libraries" : [ { - "name" : "com.h2database:h2", - "versions" : [ "2.1.210" ] - } ] -}, { - "test-project-path" : "com.hazelcast/hazelcast/5.2.1", - "libraries" : [ { - "name" : "com.hazelcast:hazelcast", - "versions" : [ "5.2.1" ] - } ] -}, { - "test-project-path" : "com.hazelcast/hazelcast/5.5.0", - "libraries" : [ { - "name" : "com.hazelcast:hazelcast", - "versions" : [ "5.5.0" ] - } ] -}, { - "test-project-path" : "com.itextpdf/forms/8.0.3", - "libraries" : [ { - "name" : "com.itextpdf:forms", - "versions" : [ "8.0.3" ] - } ] -}, { - "test-project-path" : "com.itextpdf/io/8.0.3", - "libraries" : [ { - "name" : "com.itextpdf:io", - "versions" : [ "8.0.3" ] - } ] -}, { - "test-project-path" : "com.itextpdf/kernel/8.0.3", - "libraries" : [ { - "name" : "com.itextpdf:kernel", - "versions" : [ "8.0.3" ] - } ] -}, { - "test-project-path" : "com.itextpdf/layout/8.0.3", - "libraries" : [ { - "name" : "com.itextpdf:layout", - "versions" : [ "8.0.3" ] - } ] -}, { - "test-project-path" : "com.itextpdf/svg/8.0.3", - "libraries" : [ { - "name" : "com.itextpdf:svg", - "versions" : [ "8.0.3" ] - } ] -}, { - "test-project-path" : "com.microsoft.sqlserver/mssql-jdbc/12.2.0.jre11", - "libraries" : [ { - "name" : "com.microsoft.sqlserver:mssql-jdbc", - "versions" : [ "12.2.0.jre11" ] - } ] -}, { - "test-project-path" : "com.mysql/mysql-connector-j/8.0.31", - "libraries" : [ { - "name" : "com.mysql:mysql-connector-j", - "versions" : [ "8.0.31" ] - } ] -}, { - "test-project-path" : "com.sun.mail/jakarta.mail/2.0.1", - "libraries" : [ { - "name" : "com.sun.mail:jakarta.mail", - "versions" : [ "2.0.1" ] - } ] -}, { - "test-project-path" : "com.zaxxer/HikariCP/5.0.1", - "libraries" : [ { - "name" : "com.zaxxer:HikariCP", - "versions" : [ "5.0.1" ] - } ] -}, { - "test-project-path" : "com.zaxxer/HikariCP/6.0.0", - "libraries" : [ { - "name" : "com.zaxxer:HikariCP", - "versions" : [ "6.0.0" ] - } ] -}, { - "test-project-path" : "commons-logging/commons-logging/1.2", - "libraries" : [ { - "name" : "commons-logging:commons-logging", - "versions" : [ "1.2" ] - } ] -}, { - "test-project-path" : "io.grpc/grpc-core/1.69.0", - "libraries" : [ { - "name" : "io.grpc:grpc-core", - "versions" : [ "1.69.0" ] - } ] -}, { - "test-project-path" : "io.grpc/grpc-netty/1.51.0", - "libraries" : [ { - "name" : "io.grpc:grpc-netty", - "versions" : [ "1.51.0" ] - } ] -}, { - "test-project-path" : "io.jsonwebtoken/jjwt-gson/0.11.5", - "libraries" : [ { - "name" : "io.jsonwebtoken:jjwt-gson", - "versions" : [ "0.11.5" ] - } ] -}, { - "test-project-path" : "io.jsonwebtoken/jjwt-jackson/0.11.5", - "libraries" : [ { - "name" : "io.jsonwebtoken:jjwt-jackson", - "versions" : [ "0.11.5" ] - } ] -}, { - "test-project-path" : "io.jsonwebtoken/jjwt-orgjson/0.11.5", - "libraries" : [ { - "name" : "io.jsonwebtoken:jjwt-orgjson", - "versions" : [ "0.11.5" ] - } ] -}, { - "test-project-path" : "io.jsonwebtoken/jjwt-orgjson/0.12.0", - "libraries" : [ { - "name" : "io.jsonwebtoken:jjwt-orgjson", - "versions" : [ "0.12.0" ] - } ] -}, { - "test-project-path" : "io.nats/jnats/2.16.11", - "libraries" : [ { - "name" : "io.nats:jnats", - "versions" : [ "2.16.11" ] - } ] -}, { - "test-project-path" : "io.netty/netty-common/4.1.115.Final", - "libraries" : [ { - "name" : "io.netty:netty-common", - "versions" : [ "4.1.115.Final" ] - } ] -}, { - "test-project-path" : "io.netty/netty-common/4.1.80.Final", - "libraries" : [ { - "name" : "io.netty:netty-common", - "versions" : [ "4.1.80.Final" ] - } ] -}, { - "test-project-path" : "io.netty/netty-transport/4.1.115.Final", - "libraries" : [ { - "name" : "io.netty:netty-transport", - "versions" : [ "4.1.115.Final" ] - } ] -}, { - "test-project-path" : "io.netty/netty-transport/4.1.80.Final", - "libraries" : [ { - "name" : "io.netty:netty-transport", - "versions" : [ "4.1.80.Final" ] - } ] -}, { - "test-project-path" : "io.opentelemetry/opentelemetry-exporter-jaeger/1.19.0", - "libraries" : [ { - "name" : "io.opentelemetry:opentelemetry-exporter-jaeger", - "versions" : [ "1.19.0" ] - } ] -}, { - "test-project-path" : "io.opentelemetry/opentelemetry-exporter-logging/1.19.0", - "libraries" : [ { - "name" : "io.opentelemetry:opentelemetry-exporter-logging", - "versions" : [ "1.19.0" ] - } ] -}, { - "test-project-path" : "io.opentelemetry/opentelemetry-exporter-otlp/1.19.0", - "libraries" : [ { - "name" : "io.opentelemetry:opentelemetry-exporter-otlp", - "versions" : [ "1.19.0" ] - } ] -}, { - "test-project-path" : "io.opentelemetry/opentelemetry-exporter-zipkin/1.19.0", - "libraries" : [ { - "name" : "io.opentelemetry:opentelemetry-exporter-zipkin", - "versions" : [ "1.19.0" ] - } ] -}, { - "test-project-path" : "io.opentelemetry/opentelemetry-sdk-metrics/1.19.0", - "libraries" : [ { - "name" : "io.opentelemetry:opentelemetry-sdk-metrics", - "versions" : [ "1.19.0" ] - } ] -}, { - "test-project-path" : "io.opentelemetry/opentelemetry-sdk-trace/1.19.0", - "libraries" : [ { - "name" : "io.opentelemetry:opentelemetry-sdk-trace", - "versions" : [ "1.19.0" ] - } ] -}, { - "test-project-path" : "io.undertow/undertow-core/2.2.19.Final", - "libraries" : [ { - "name" : "io.undertow:undertow-core", - "versions" : [ "2.2.19.Final" ] - } ] -}, { - "test-project-path" : "io.undertow/undertow-core/2.3.0.Final", - "libraries" : [ { - "name" : "io.undertow:undertow-core", - "versions" : [ "2.3.0.Final" ] - } ] -}, { - "test-project-path" : "jakarta.servlet/jakarta.servlet-api/5.0.0", - "libraries" : [ { - "name" : "jakarta.servlet:jakarta.servlet-api", - "versions" : [ "5.0.0" ] - } ] -}, { - "test-project-path" : "javax.cache/cache-api/1.1.1", - "libraries" : [ { - "name" : "javax.cache:cache-api", - "versions" : [ "1.1.1" ] - } ] -}, { - "test-project-path" : "log4j/log4j/1.2.17", - "libraries" : [ { - "name" : "log4j:log4j", - "versions" : [ "1.2.17" ] - } ] -}, { - "test-project-path" : "mysql/mysql-connector-java/8.0.29", - "libraries" : [ { - "name" : "mysql:mysql-connector-java", - "versions" : [ "8.0.29" ] - } ] -}, { - "test-project-path" : "net.java.dev.jna/jna/5.8.0", - "libraries" : [ { - "name" : "net.java.dev.jna:jna", - "versions" : [ "5.8.0" ] - } ] -}, { - "test-project-path" : "org.apache.activemq/activemq-broker/5.18.1", - "libraries" : [ { - "name" : "org.apache.activemq:activemq-broker", - "versions" : [ "5.18.1" ] - } ] -}, { - "test-project-path": "org.apache.activemq/activemq-broker/6.0.0", - "libraries": [ { - "name": "org.apache.activemq:activemq-broker", - "versions": [ "6.0.0" ] - } ] -}, { - "test-project-path" : "org.apache.activemq/activemq-client/5.18.1", - "libraries" : [ { - "name" : "org.apache.activemq:activemq-client", - "versions" : [ "5.18.1" ] - } ] -}, { - "test-project-path" : "org.apache.activemq/activemq-client/6.0.0", - "libraries" : [ { - "name" : "org.apache.activemq:activemq-client", - "versions" : [ "6.0.0" ] - } ] -}, { - "test-project-path" : "org.apache.activemq/artemis-jms-client/2.28.0", - "libraries" : [ { - "name" : "org.apache.activemq:artemis-jms-client", - "versions" : [ "2.28.0" ] - } ] -}, { - "test-project-path" : "org.apache.commons/commons-compress/1.23.0", - "libraries" : [ { - "name" : "org.apache.commons:commons-compress", - "versions" : [ "1.23.0" ] - } ] -}, { - "test-project-path" : "org.apache.commons/commons-dbcp2/2.12.0", - "libraries" : [ { - "name" : "org.apache.commons:commons-dbcp2", - "versions" : [ "2.12.0" ] - } ] -}, { - "test-project-path" : "org.apache.commons/commons-pool2/2.11.1", - "libraries" : [ { - "name" : "org.apache.commons:commons-pool2", - "versions" : [ "2.11.1" ] - } ] -}, { - "test-project-path" : "org.apache.httpcomponents/httpclient/4.5.14", - "libraries" : [ { - "name" : "org.apache.httpcomponents:httpclient", - "versions" : [ "4.5.14" ] - } ] -}, { - "test-project-path" : "org.apache.kafka/kafka-clients/3.5.1", - "libraries" : [ { - "name" : "org.apache.kafka:kafka-clients", - "versions" : [ "3.5.1" ] - } ] -}, { - "test-project-path" : "org.apache.kafka/kafka-streams/3.5.1", - "libraries" : [ { - "name" : "org.apache.kafka:kafka-streams", - "versions" : [ "3.5.1" ] - } ] -}, { - "test-project-path" : "org.apache.tomcat.embed/tomcat-embed-core/10.0.20", - "libraries" : [ { - "name" : "org.apache.tomcat.embed:tomcat-embed-core", - "versions" : [ "10.0.20" ] - } ] -}, { - "test-project-path" : "org.apache.tomcat/tomcat-jdbc/10.1.7", - "libraries" : [ { - "name" : "org.apache.tomcat:tomcat-jdbc", - "versions" : [ "10.1.7" ] - } ] -}, { - "test-project-path" : "org.bouncycastle/bcpkix-jdk15on/1.70", - "libraries" : [ { - "name" : "org.bouncycastle:bcpkix-jdk15on", - "versions" : [ "1.70" ] - } ] -}, { - "test-project-path" : "org.bouncycastle/bcpkix-jdk15to18/1.77", - "libraries" : [ { - "name" : "org.bouncycastle:bcpkix-jdk15to18", - "versions" : [ "1.77" ] - } ] -}, { - "test-project-path" : "org.bouncycastle/bcpkix-jdk18on/1.77", - "libraries" : [ { - "name" : "org.bouncycastle:bcpkix-jdk18on", - "versions" : [ "1.77" ] - } ] -}, { - "test-project-path" : "org.eclipse.angus/jakarta.mail/1.0.0", - "libraries" : [ { - "name" : "org.eclipse.angus:jakarta.mail", - "versions" : [ "1.0.0" ] - } ] -}, { - "test-project-path" : "org.eclipse.jetty/jetty-client/11.0.12", - "libraries" : [ { - "name" : "org.eclipse.jetty:jetty-client", - "versions" : [ "11.0.12" ] - } ] -}, { - "test-project-path" : "org.eclipse.jetty/jetty-client/12.0.0.beta0", - "libraries" : [ { - "name" : "org.eclipse.jetty:jetty-client", - "versions" : [ "12.0.0.beta0" ] - } ] -}, { - "test-project-path" : "org.eclipse.jetty/jetty-server/11.0.12", - "libraries" : [ { - "name" : "org.eclipse.jetty:jetty-server", - "versions" : [ "11.0.12" ] - } ] -}, { - "test-project-path" : "org.eclipse.jetty/jetty-server/12.0.1", - "libraries" : [ { - "name" : "org.eclipse.jetty:jetty-server", - "versions" : [ "12.0.1" ] - } ] - } , { - "test-project-path" : "org.eclipse.jetty/jetty-server/12.1.3", - "libraries" : [ { - "name" : "org.eclipse.jetty:jetty-server", - "versions" : [ "12.1.3" ] - } ] -}, { - "test-project-path" : "org.eclipse.jetty/jetty-util/12.0.9", - "libraries" : [ { - "name" : "org.eclipse.jetty:jetty-util", - "versions" : [ "12.0.9" ] - } ] -}, { - "test-project-path" : "org.eclipse.jgit/org.eclipse.jgit/6.5.0.202303070854-r", - "libraries" : [ { - "name" : "org.eclipse.jgit:org.eclipse.jgit", - "versions" : [ "6.5.0.202303070854-r" ] - } ] -}, { - "test-project-path" : "org.eclipse.jgit/org.eclipse.jgit/7.4.0.202509020913-r", - "libraries" : [ { - "name" : "org.eclipse.jgit:org.eclipse.jgit", - "versions" : [ "7.4.0.202509020913-r" ] - } ] -}, { - "test-project-path" : "org.eclipse.paho/org.eclipse.paho.client.mqttv3/1.2.5", - "libraries" : [ { - "name" : "org.eclipse.paho:org.eclipse.paho.client.mqttv3", - "versions" : [ "1.2.5" ] - } ] -}, { - "test-project-path" : "org.eclipse.paho/org.eclipse.paho.mqttv5.client/1.2.5", - "libraries" : [ { - "name" : "org.eclipse.paho:org.eclipse.paho.mqttv5.client", - "versions" : [ "1.2.5" ] - } ] -}, { - "test-project-path" : "org.ehcache/ehcache/3.10.8-jakarta", - "libraries" : [ { - "name" : "org.ehcache:ehcache", - "versions" : [ "3.10.8-jakarta" ] - } ] -}, { - "test-project-path" : "org.example/library/0.0.1", - "libraries" : [ { - "name" : "org.example:library", - "versions" : [ "0.0.1" ] - } ] -}, { - "test-project-path" : "org.flywaydb/flyway-core/10.10.0", - "libraries" : [ { - "name" : "org.flywaydb:flyway-core", - "versions" : [ "10.10.0" ] - } ] -}, { - "test-project-path" : "org.flywaydb/flyway-core/10.15.0", - "libraries" : [ { - "name" : "org.flywaydb:flyway-core", - "versions" : [ "10.15.0" ] - } ] -}, { - "test-project-path" : "org.flywaydb/flyway-core/10.20.0", - "libraries" : [ { - "name" : "org.flywaydb:flyway-core", - "versions" : [ "10.20.0" ] - } ] -}, { - "test-project-path" : "org.flywaydb/flyway-core/10.20.1", - "libraries" : [ { - "name" : "org.flywaydb:flyway-core", - "versions" : [ "10.20.1" ] - } ] -}, { - "test-project-path" : "org.flywaydb/flyway-core/11.14.1", - "libraries" : [ { - "name" : "org.flywaydb:flyway-core", - "versions" : [ "11.14.1" ] - } ] -}, { - "test-project-path" : "org.flywaydb/flyway-core/9.0.1", - "libraries" : [ { - "name" : "org.flywaydb:flyway-core", - "versions" : [ "9.0.1" ] - } ] -}, { - "test-project-path" : "org.flywaydb/flyway-database-postgresql/10.10.0", - "libraries" : [ { - "name" : "org.flywaydb:flyway-database-postgresql", - "versions" : [ "10.10.0" ] - } ] -}, { - "test-project-path" : "org.flywaydb/flyway-sqlserver/10.10.0", - "libraries" : [ { - "name" : "org.flywaydb:flyway-sqlserver", - "versions" : [ "10.10.0" ] - } ] -}, { - "test-project-path" : "org.freemarker/freemarker/2.3.31", - "libraries" : [ { - "name" : "org.freemarker:freemarker", - "versions" : [ "2.3.31" ] - } ] -}, { - "test-project-path" : "org.glassfish.jaxb/jaxb-runtime/3.0.2", - "libraries" : [ { - "name" : "org.glassfish.jaxb:jaxb-runtime", - "versions" : [ "3.0.2" ] - } ] -}, { - "test-project-path" : "org.hdrhistogram/HdrHistogram/2.1.12", - "libraries" : [ { - "name" : "org.hdrhistogram:HdrHistogram", - "versions" : [ "2.1.12" ] - } ] -}, { - "test-project-path" : "org.hibernate.orm/hibernate-core/6.1.1.Final", - "libraries" : [ { - "name" : "org.hibernate.orm:hibernate-core", - "versions" : [ "6.1.1.Final" ] - } ] -}, { - "test-project-path" : "org.hibernate.orm/hibernate-core/6.2.0.Final", - "libraries" : [ { - "name" : "org.hibernate.orm:hibernate-core", - "versions" : [ "6.2.0.Final" ] - } ] -}, { - "test-project-path" : "org.hibernate.orm/hibernate-core/6.5.0.Final", - "libraries" : [ { - "name" : "org.hibernate.orm:hibernate-core", - "versions" : [ "6.5.0.Final" ] - } ] -}, { - "test-project-path" : "org.hibernate.orm/hibernate-core/6.6.0.Final", - "libraries" : [ { - "name" : "org.hibernate.orm:hibernate-core", - "versions" : [ "6.6.0.Final" ] - } ] -}, { - "test-project-path" : "org.hibernate.orm/hibernate-core/7.0.0.Final", - "libraries" : [ { - "name" : "org.hibernate.orm:hibernate-core", - "versions" : [ "7.0.0.Final" ] - } ] - }, { - "test-project-path" : "org.hibernate.orm/hibernate-core/7.1.0.Final", - "libraries" : [ { - "name" : "org.hibernate.orm:hibernate-core", - "versions" : [ "7.1.0.Final" ] - } ] -}, { - "test-project-path" : "org.hibernate.orm/hibernate-envers/6.1.1.Final", - "libraries" : [ { - "name" : "org.hibernate.orm:hibernate-envers", - "versions" : [ "6.1.1.Final" ] - } ] -}, { - "test-project-path" : "org.hibernate.reactive/hibernate-reactive-core/2.0.0.Final", - "libraries" : [ { - "name" : "org.hibernate.reactive:hibernate-reactive-core", - "versions" : [ "2.0.0.Final" ] - } ] -}, { - "test-project-path" : "org.hibernate.validator/hibernate-validator/7.0.4.Final", - "libraries" : [ { - "name" : "org.hibernate.validator:hibernate-validator", - "versions" : [ "7.0.4.Final" ] - } ] -}, { - "test-project-path" : "org.hibernate/hibernate-core/5.6.14.Final", - "libraries" : [ { - "name" : "org.hibernate:hibernate-core", - "versions" : [ "5.6.14.Final" ] - } ] -}, { - "test-project-path" : "org.hibernate/hibernate-spatial/6.5.0.Final", - "libraries" : [ { - "name" : "org.hibernate:hibernate-spatial", - "versions" : [ "6.5.0.Final" ] - } ] -}, { - "test-project-path" : "org.jboss.logging/jboss-logging/3.5.0.Final", - "libraries" : [ { - "name" : "org.jboss.logging:jboss-logging", - "versions" : [ "3.5.0.Final" ] - } ] -}, { - "test-project-path" : "org.jboss.spec.javax.servlet/jboss-servlet-api_4.0_spec/2.0.0.Final", - "libraries" : [ { - "name" : "org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec", - "versions" : [ "2.0.0.Final" ] - } ] -}, { - "test-project-path" : "org.jctools/jctools-core/2.1.2", - "libraries" : [ { - "name" : "org.jctools:jctools-core", - "versions" : [ "2.1.2" ] - } ] -}, { - "test-project-path" : "org.jetbrains.kotlin/kotlin-reflect/1.7.10", - "libraries" : [ { - "name" : "org.jetbrains.kotlin:kotlin-reflect", - "versions" : [ "1.7.10" ] - } ] -}, { - "test-project-path" : "org.jetbrains.kotlin/kotlin-stdlib/1.7.10", - "libraries" : [ { - "name" : "org.jetbrains.kotlin:kotlin-stdlib", - "versions" : [ "1.7.10" ] - } ] -}, { - "test-project-path" : "org.jline/jline/3.21.0", - "libraries" : [ { - "name" : "org.jline:jline", - "versions" : [ "3.21.0" ] - } ] -}, { - "test-project-path" : "org.jooq/jooq/3.17.7", - "libraries" : [ { - "name" : "org.jooq:jooq", - "versions" : [ "3.17.7" ] - } ] -}, { - "test-project-path" : "org.jooq/jooq/3.18.2", - "libraries" : [ { - "name" : "org.jooq:jooq", - "versions" : [ "3.18.2" ] - } ] -}, { - "test-project-path" : "org.liquibase/liquibase-core/4.17.0", - "libraries" : [ { - "name" : "org.liquibase:liquibase-core", - "versions" : [ "4.17.0", "4.20.0", "4.23.0" ] - } ] -}, { - "test-project-path" : "org.liquibase/liquibase-core/4.25.0", - "libraries" : [ { - "name" : "org.liquibase:liquibase-core", - "versions" : [ "4.25.0", "4.25.1", "4.26.0", "4.27.0", "4.28.0", "4.29.0" ] - } ] -}, { - "test-project-path" : "org.liquibase/liquibase-core/5.0.1", - "libraries" : [ { - "name" : "org.liquibase:liquibase-core", - "versions" : [ "5.0.1" ] - } ] -}, { - "test-project-path" : "org.mariadb.jdbc/mariadb-java-client/3.0.6", - "libraries" : [ { - "name" : "org.mariadb.jdbc:mariadb-java-client", - "versions" : [ "3.0.6" ] - } ] -}, { - "test-project-path" : "org.mariadb.jdbc/mariadb-java-client/3.5.2", - "libraries" : [ { - "name" : "org.mariadb.jdbc:mariadb-java-client", - "versions" : [ "3.5.2" ] - } ] -}, { - "test-project-path" : "org.mariadb/r2dbc-mariadb/1.1.3", - "libraries" : [ { - "name" : "org.mariadb:r2dbc-mariadb", - "versions" : [ "1.1.3" ] - } ] -}, { - "test-project-path" : "org.mockito/mockito-core/4.8.1", - "libraries" : [ { - "name" : "org.mockito:mockito-core", - "versions" : [ "4.8.1" ] - } ] -}, { - "test-project-path" : "org.mockito/mockito-core/5.0.0", - "libraries" : [ { - "name" : "org.mockito:mockito-core", - "versions" : [ "5.0.0" ] - } ] -}, { - "test-project-path" : "org.opengauss/opengauss-jdbc/3.1.0-og", - "libraries" : [ { - "name" : "org.opengauss:opengauss-jdbc", - "versions" : [ "3.1.0-og" ] - } ] -}, { - "test-project-path" : "org.postgresql/postgresql/42.3.4", - "libraries" : [ { - "name" : "org.postgresql:postgresql", - "versions" : [ "42.3.4" ] - } ] -}, { - "test-project-path" : "org.postgresql/postgresql/42.7.3", - "libraries" : [ { - "name" : "org.postgresql:postgresql", - "versions" : [ "42.7.3" ] - } ] -}, { - "test-project-path" : "org.quartz-scheduler/quartz/2.3.2", - "libraries" : [ { - "name" : "org.quartz-scheduler:quartz", - "versions" : [ "2.3.2" ] - } ] -}, { - "test-project-path" : "org.testcontainers/testcontainers/1.17.6", - "libraries" : [ { - "name" : "org.testcontainers:testcontainers", - "versions" : [ "1.17.6" ] - } ] -}, { - "test-project-path" : "org.testcontainers/testcontainers/1.19.8", - "libraries" : [ { - "name" : "org.testcontainers:testcontainers", - "versions" : [ "1.19.8" ] - } ] -}, { - "test-project-path" : "org.thymeleaf.extras/thymeleaf-extras-springsecurity6/3.1.0.M1", - "libraries" : [ { - "name" : "org.thymeleaf.extras:thymeleaf-extras-springsecurity6", - "versions" : [ "3.1.0.M1" ] - } ] -}, { - "test-project-path" : "org.thymeleaf/thymeleaf-spring6/3.1.0.M2", - "libraries" : [ { - "name" : "org.thymeleaf:thymeleaf-spring6", - "versions" : [ "3.1.0.M2" ] - } ] -}, { - "test-project-path" : "org.thymeleaf/thymeleaf/3.1.0.M2", - "libraries" : [ { - "name" : "org.thymeleaf:thymeleaf", - "versions" : [ "3.1.0.M2" ] - } ] -}, { - "test-project-path" : "org.thymeleaf/thymeleaf/3.1.0.RC1", - "libraries" : [ { - "name" : "org.thymeleaf:thymeleaf", - "versions" : [ "3.1.0.RC1" ] - } ] -}, { - "test-project-path" : "samples/docker/image-pull", - "libraries" : [ { - "name" : "samples:docker", - "versions" : [ "image-pull" ] - } ] -} ] \ No newline at end of file +[ + { + "test-project-path" : "ch.qos.logback.contrib/logback-jackson/0.1.5", + "libraries" : [ + { + "name" : "ch.qos.logback.contrib:logback-jackson", + "versions" : [ + "0.1.5" + ] + } + ] + }, + { + "test-project-path" : "ch.qos.logback.contrib/logback-json-classic/0.1.5", + "libraries" : [ + { + "name" : "ch.qos.logback.contrib:logback-json-classic", + "versions" : [ + "0.1.5" + ] + } + ] + }, + { + "test-project-path" : "ch.qos.logback/logback-classic/1.2.11", + "libraries" : [ + { + "name" : "ch.qos.logback:logback-classic", + "versions" : [ + "1.2.11" + ] + } + ] + }, + { + "test-project-path" : "ch.qos.logback/logback-classic/1.4.1", + "libraries" : [ + { + "name" : "ch.qos.logback:logback-classic", + "versions" : [ + "1.4.1", + "1.4.9" + ] + } + ] + }, + { + "test-project-path" : "com.ecwid.consul/consul-api/1.4.5", + "libraries" : [ + { + "name" : "com.ecwid.consul:consul-api", + "versions" : [ + "1.4.5" + ] + } + ] + }, + { + "test-project-path" : "com.fasterxml.jackson.core/jackson-databind/2.15.2", + "libraries" : [ + { + "name" : "com.fasterxml.jackson.core:jackson-databind", + "versions" : [ + "2.15.2" + ] + } + ] + }, + { + "test-project-path" : "com.github.ben-manes.caffeine/caffeine/2.9.3", + "libraries" : [ + { + "name" : "com.github.ben-manes.caffeine:caffeine", + "versions" : [ + "2.9.3" + ] + } + ] + }, + { + "test-project-path" : "com.github.ben-manes.caffeine/caffeine/3.1.2", + "libraries" : [ + { + "name" : "com.github.ben-manes.caffeine:caffeine", + "versions" : [ + "3.1.2" + ] + } + ] + }, + { + "test-project-path" : "com.github.luben/zstd-jni/1.5.2-5", + "libraries" : [ + { + "name" : "com.github.luben:zstd-jni", + "versions" : [ + "1.5.2-5" + ] + } + ] + }, + { + "test-project-path" : "com.google.protobuf/protobuf-java-util/3.21.12", + "libraries" : [ + { + "name" : "com.google.protobuf:protobuf-java-util", + "versions" : [ + "3.21.12" + ] + } + ] + }, + { + "test-project-path" : "com.graphql-java/graphql-java-extended-validation/19.1", + "libraries" : [ + { + "name" : "com.graphql-java:graphql-java-extended-validation", + "versions" : [ + "19.1" + ] + } + ] + }, + { + "test-project-path" : "com.graphql-java/graphql-java/19.2", + "libraries" : [ + { + "name" : "com.graphql-java:graphql-java", + "versions" : [ + "19.2" + ] + } + ] + }, + { + "test-project-path" : "com.h2database/h2/2.1.210", + "libraries" : [ + { + "name" : "com.h2database:h2", + "versions" : [ + "2.1.210" + ] + } + ] + }, + { + "test-project-path" : "com.hazelcast/hazelcast/5.2.1", + "libraries" : [ + { + "name" : "com.hazelcast:hazelcast", + "versions" : [ + "5.2.1" + ] + } + ] + }, + { + "test-project-path" : "com.hazelcast/hazelcast/5.5.0", + "libraries" : [ + { + "name" : "com.hazelcast:hazelcast", + "versions" : [ + "5.5.0" + ] + } + ] + }, + { + "test-project-path" : "com.itextpdf/forms/8.0.3", + "libraries" : [ + { + "name" : "com.itextpdf:forms", + "versions" : [ + "8.0.3" + ] + } + ] + }, + { + "test-project-path" : "com.itextpdf/io/8.0.3", + "libraries" : [ + { + "name" : "com.itextpdf:io", + "versions" : [ + "8.0.3" + ] + } + ] + }, + { + "test-project-path" : "com.itextpdf/kernel/8.0.3", + "libraries" : [ + { + "name" : "com.itextpdf:kernel", + "versions" : [ + "8.0.3" + ] + } + ] + }, + { + "test-project-path" : "com.itextpdf/layout/8.0.3", + "libraries" : [ + { + "name" : "com.itextpdf:layout", + "versions" : [ + "8.0.3" + ] + } + ] + }, + { + "test-project-path" : "com.itextpdf/svg/8.0.3", + "libraries" : [ + { + "name" : "com.itextpdf:svg", + "versions" : [ + "8.0.3" + ] + } + ] + }, + { + "test-project-path" : "com.microsoft.sqlserver/mssql-jdbc/12.2.0.jre11", + "libraries" : [ + { + "name" : "com.microsoft.sqlserver:mssql-jdbc", + "versions" : [ + "12.2.0.jre11" + ] + } + ] + }, + { + "test-project-path" : "com.mysql/mysql-connector-j/8.0.31", + "libraries" : [ + { + "name" : "com.mysql:mysql-connector-j", + "versions" : [ + "8.0.31" + ] + } + ] + }, + { + "test-project-path" : "com.sun.mail/jakarta.mail/2.0.1", + "libraries" : [ + { + "name" : "com.sun.mail:jakarta.mail", + "versions" : [ + "2.0.1" + ] + } + ] + }, + { + "test-project-path" : "com.zaxxer/HikariCP/5.0.1", + "libraries" : [ + { + "name" : "com.zaxxer:HikariCP", + "versions" : [ + "5.0.1" + ] + } + ] + }, + { + "test-project-path" : "com.zaxxer/HikariCP/6.0.0", + "libraries" : [ + { + "name" : "com.zaxxer:HikariCP", + "versions" : [ + "6.0.0" + ] + } + ] + }, + { + "test-project-path" : "commons-logging/commons-logging/1.2", + "libraries" : [ + { + "name" : "commons-logging:commons-logging", + "versions" : [ + "1.2" + ] + } + ] + }, + { + "test-project-path" : "io.grpc/grpc-core/1.69.0", + "libraries" : [ + { + "name" : "io.grpc:grpc-core", + "versions" : [ + "1.69.0" + ] + } + ] + }, + { + "test-project-path" : "io.grpc/grpc-netty/1.51.0", + "libraries" : [ + { + "name" : "io.grpc:grpc-netty", + "versions" : [ + "1.51.0" + ] + } + ] + }, + { + "test-project-path" : "io.jsonwebtoken/jjwt-gson/0.11.5", + "libraries" : [ + { + "name" : "io.jsonwebtoken:jjwt-gson", + "versions" : [ + "0.11.5" + ] + } + ] + }, + { + "test-project-path" : "io.jsonwebtoken/jjwt-jackson/0.11.5", + "libraries" : [ + { + "name" : "io.jsonwebtoken:jjwt-jackson", + "versions" : [ + "0.11.5" + ] + } + ] + }, + { + "test-project-path" : "io.jsonwebtoken/jjwt-orgjson/0.11.5", + "libraries" : [ + { + "name" : "io.jsonwebtoken:jjwt-orgjson", + "versions" : [ + "0.11.5" + ] + } + ] + }, + { + "test-project-path" : "io.jsonwebtoken/jjwt-orgjson/0.12.0", + "libraries" : [ + { + "name" : "io.jsonwebtoken:jjwt-orgjson", + "versions" : [ + "0.12.0" + ] + } + ] + }, + { + "test-project-path" : "io.nats/jnats/2.16.11", + "libraries" : [ + { + "name" : "io.nats:jnats", + "versions" : [ + "2.16.11" + ] + } + ] + }, + { + "test-project-path" : "io.netty/netty-common/4.1.115.Final", + "libraries" : [ + { + "name" : "io.netty:netty-common", + "versions" : [ + "4.1.115.Final" + ] + } + ] + }, + { + "test-project-path" : "io.netty/netty-common/4.1.80.Final", + "libraries" : [ + { + "name" : "io.netty:netty-common", + "versions" : [ + "4.1.80.Final" + ] + } + ] + }, + { + "test-project-path" : "io.netty/netty-transport/4.1.115.Final", + "libraries" : [ + { + "name" : "io.netty:netty-transport", + "versions" : [ + "4.1.115.Final" + ] + } + ] + }, + { + "test-project-path" : "io.netty/netty-transport/4.1.80.Final", + "libraries" : [ + { + "name" : "io.netty:netty-transport", + "versions" : [ + "4.1.80.Final" + ] + } + ] + }, + { + "test-project-path" : "io.opentelemetry/opentelemetry-exporter-jaeger/1.19.0", + "libraries" : [ + { + "name" : "io.opentelemetry:opentelemetry-exporter-jaeger", + "versions" : [ + "1.19.0" + ] + } + ] + }, + { + "test-project-path" : "io.opentelemetry/opentelemetry-exporter-logging/1.19.0", + "libraries" : [ + { + "name" : "io.opentelemetry:opentelemetry-exporter-logging", + "versions" : [ + "1.19.0" + ] + } + ] + }, + { + "test-project-path" : "io.opentelemetry/opentelemetry-exporter-otlp/1.19.0", + "libraries" : [ + { + "name" : "io.opentelemetry:opentelemetry-exporter-otlp", + "versions" : [ + "1.19.0" + ] + } + ] + }, + { + "test-project-path" : "io.opentelemetry/opentelemetry-exporter-zipkin/1.19.0", + "libraries" : [ + { + "name" : "io.opentelemetry:opentelemetry-exporter-zipkin", + "versions" : [ + "1.19.0" + ] + } + ] + }, + { + "test-project-path" : "io.opentelemetry/opentelemetry-sdk-metrics/1.19.0", + "libraries" : [ + { + "name" : "io.opentelemetry:opentelemetry-sdk-metrics", + "versions" : [ + "1.19.0" + ] + } + ] + }, + { + "test-project-path" : "io.opentelemetry/opentelemetry-sdk-trace/1.19.0", + "libraries" : [ + { + "name" : "io.opentelemetry:opentelemetry-sdk-trace", + "versions" : [ + "1.19.0" + ] + } + ] + }, + { + "test-project-path" : "io.undertow/undertow-core/2.2.19.Final", + "libraries" : [ + { + "name" : "io.undertow:undertow-core", + "versions" : [ + "2.2.19.Final" + ] + } + ] + }, + { + "test-project-path" : "io.undertow/undertow-core/2.3.0.Final", + "libraries" : [ + { + "name" : "io.undertow:undertow-core", + "versions" : [ + "2.3.0.Final" + ] + } + ] + }, + { + "test-project-path" : "jakarta.servlet/jakarta.servlet-api/5.0.0", + "libraries" : [ + { + "name" : "jakarta.servlet:jakarta.servlet-api", + "versions" : [ + "5.0.0" + ] + } + ] + }, + { + "test-project-path" : "javax.cache/cache-api/1.1.1", + "libraries" : [ + { + "name" : "javax.cache:cache-api", + "versions" : [ + "1.1.1" + ] + } + ] + }, + { + "test-project-path" : "log4j/log4j/1.2.17", + "libraries" : [ + { + "name" : "log4j:log4j", + "versions" : [ + "1.2.17" + ] + } + ] + }, + { + "test-project-path" : "mysql/mysql-connector-java/8.0.29", + "libraries" : [ + { + "name" : "mysql:mysql-connector-java", + "versions" : [ + "8.0.29" + ] + } + ] + }, + { + "test-project-path" : "net.java.dev.jna/jna/5.8.0", + "libraries" : [ + { + "name" : "net.java.dev.jna:jna", + "versions" : [ + "5.8.0" + ] + } + ] + }, + { + "test-project-path" : "org.apache.activemq/activemq-broker/5.18.1", + "libraries" : [ + { + "name" : "org.apache.activemq:activemq-broker", + "versions" : [ + "5.18.1" + ] + } + ] + }, + { + "test-project-path" : "org.apache.activemq/activemq-broker/6.0.0", + "libraries" : [ + { + "name" : "org.apache.activemq:activemq-broker", + "versions" : [ + "6.0.0" + ] + } + ] + }, + { + "test-project-path" : "org.apache.activemq/activemq-client/5.18.1", + "libraries" : [ + { + "name" : "org.apache.activemq:activemq-client", + "versions" : [ + "5.18.1" + ] + } + ] + }, + { + "test-project-path" : "org.apache.activemq/activemq-client/6.0.0", + "libraries" : [ + { + "name" : "org.apache.activemq:activemq-client", + "versions" : [ + "6.0.0" + ] + } + ] + }, + { + "test-project-path" : "org.apache.activemq/artemis-jms-client/2.28.0", + "libraries" : [ + { + "name" : "org.apache.activemq:artemis-jms-client", + "versions" : [ + "2.28.0" + ] + } + ] + }, + { + "test-project-path" : "org.apache.commons/commons-compress/1.23.0", + "libraries" : [ + { + "name" : "org.apache.commons:commons-compress", + "versions" : [ + "1.23.0" + ] + } + ] + }, + { + "test-project-path" : "org.apache.commons/commons-dbcp2/2.12.0", + "libraries" : [ + { + "name" : "org.apache.commons:commons-dbcp2", + "versions" : [ + "2.12.0" + ] + } + ] + }, + { + "test-project-path" : "org.apache.commons/commons-pool2/2.11.1", + "libraries" : [ + { + "name" : "org.apache.commons:commons-pool2", + "versions" : [ + "2.11.1" + ] + } + ] + }, + { + "test-project-path" : "org.apache.httpcomponents/httpclient/4.5.14", + "libraries" : [ + { + "name" : "org.apache.httpcomponents:httpclient", + "versions" : [ + "4.5.14" + ] + } + ] + }, + { + "test-project-path" : "org.apache.kafka/kafka-clients/3.5.1", + "libraries" : [ + { + "name" : "org.apache.kafka:kafka-clients", + "versions" : [ + "3.5.1" + ] + } + ] + }, + { + "test-project-path" : "org.apache.kafka/kafka-streams/3.5.1", + "libraries" : [ + { + "name" : "org.apache.kafka:kafka-streams", + "versions" : [ + "3.5.1" + ] + } + ] + }, + { + "test-project-path" : "org.apache.tomcat.embed/tomcat-embed-core/10.0.20", + "libraries" : [ + { + "name" : "org.apache.tomcat.embed:tomcat-embed-core", + "versions" : [ + "10.0.20" + ] + } + ] + }, + { + "test-project-path" : "org.apache.tomcat/tomcat-jdbc/10.1.7", + "libraries" : [ + { + "name" : "org.apache.tomcat:tomcat-jdbc", + "versions" : [ + "10.1.7" + ] + } + ] + }, + { + "test-project-path" : "org.bouncycastle/bcpkix-jdk15on/1.70", + "libraries" : [ + { + "name" : "org.bouncycastle:bcpkix-jdk15on", + "versions" : [ + "1.70" + ] + } + ] + }, + { + "test-project-path" : "org.bouncycastle/bcpkix-jdk15to18/1.77", + "libraries" : [ + { + "name" : "org.bouncycastle:bcpkix-jdk15to18", + "versions" : [ + "1.77" + ] + } + ] + }, + { + "test-project-path" : "org.bouncycastle/bcpkix-jdk18on/1.77", + "libraries" : [ + { + "name" : "org.bouncycastle:bcpkix-jdk18on", + "versions" : [ + "1.77" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.angus/jakarta.mail/1.0.0", + "libraries" : [ + { + "name" : "org.eclipse.angus:jakarta.mail", + "versions" : [ + "1.0.0" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.jetty/jetty-client/11.0.12", + "libraries" : [ + { + "name" : "org.eclipse.jetty:jetty-client", + "versions" : [ + "11.0.12" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.jetty/jetty-client/12.0.0", + "libraries" : [ + { + "name" : "org.eclipse.jetty:jetty-client", + "versions" : [ + "12.0.0" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.jetty/jetty-server/11.0.12", + "libraries" : [ + { + "name" : "org.eclipse.jetty:jetty-server", + "versions" : [ + "11.0.12" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.jetty/jetty-server/12.0.1", + "libraries" : [ + { + "name" : "org.eclipse.jetty:jetty-server", + "versions" : [ + "12.0.1" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.jetty/jetty-server/12.1.3", + "libraries" : [ + { + "name" : "org.eclipse.jetty:jetty-server", + "versions" : [ + "12.1.3" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.jetty/jetty-util/12.0.9", + "libraries" : [ + { + "name" : "org.eclipse.jetty:jetty-util", + "versions" : [ + "12.0.9" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.jgit/org.eclipse.jgit/6.5.0.202303070854-r", + "libraries" : [ + { + "name" : "org.eclipse.jgit:org.eclipse.jgit", + "versions" : [ + "6.5.0.202303070854-r" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.jgit/org.eclipse.jgit/7.4.0.202509020913-r", + "libraries" : [ + { + "name" : "org.eclipse.jgit:org.eclipse.jgit", + "versions" : [ + "7.4.0.202509020913-r" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.paho/org.eclipse.paho.client.mqttv3/1.2.5", + "libraries" : [ + { + "name" : "org.eclipse.paho:org.eclipse.paho.client.mqttv3", + "versions" : [ + "1.2.5" + ] + } + ] + }, + { + "test-project-path" : "org.eclipse.paho/org.eclipse.paho.mqttv5.client/1.2.5", + "libraries" : [ + { + "name" : "org.eclipse.paho:org.eclipse.paho.mqttv5.client", + "versions" : [ + "1.2.5" + ] + } + ] + }, + { + "test-project-path" : "org.ehcache/ehcache/3.10.8-jakarta", + "libraries" : [ + { + "name" : "org.ehcache:ehcache", + "versions" : [ + "3.10.8-jakarta" + ] + } + ] + }, + { + "test-project-path" : "org.example/library/0.0.1", + "libraries" : [ + { + "name" : "org.example:library", + "versions" : [ + "0.0.1" + ] + } + ] + }, + { + "test-project-path" : "org.flywaydb/flyway-core/10.10.0", + "libraries" : [ + { + "name" : "org.flywaydb:flyway-core", + "versions" : [ + "10.10.0" + ] + } + ] + }, + { + "test-project-path" : "org.flywaydb/flyway-core/10.15.0", + "libraries" : [ + { + "name" : "org.flywaydb:flyway-core", + "versions" : [ + "10.15.0" + ] + } + ] + }, + { + "test-project-path" : "org.flywaydb/flyway-core/10.20.0", + "libraries" : [ + { + "name" : "org.flywaydb:flyway-core", + "versions" : [ + "10.20.0" + ] + } + ] + }, + { + "test-project-path" : "org.flywaydb/flyway-core/10.20.1", + "libraries" : [ + { + "name" : "org.flywaydb:flyway-core", + "versions" : [ + "10.20.1" + ] + } + ] + }, + { + "test-project-path" : "org.flywaydb/flyway-core/11.14.1", + "libraries" : [ + { + "name" : "org.flywaydb:flyway-core", + "versions" : [ + "11.14.1" + ] + } + ] + }, + { + "test-project-path" : "org.flywaydb/flyway-core/9.0.1", + "libraries" : [ + { + "name" : "org.flywaydb:flyway-core", + "versions" : [ + "9.0.1" + ] + } + ] + }, + { + "test-project-path" : "org.flywaydb/flyway-database-postgresql/10.10.0", + "libraries" : [ + { + "name" : "org.flywaydb:flyway-database-postgresql", + "versions" : [ + "10.10.0" + ] + } + ] + }, + { + "test-project-path" : "org.flywaydb/flyway-sqlserver/10.10.0", + "libraries" : [ + { + "name" : "org.flywaydb:flyway-sqlserver", + "versions" : [ + "10.10.0" + ] + } + ] + }, + { + "test-project-path" : "org.freemarker/freemarker/2.3.31", + "libraries" : [ + { + "name" : "org.freemarker:freemarker", + "versions" : [ + "2.3.31" + ] + } + ] + }, + { + "test-project-path" : "org.glassfish.jaxb/jaxb-runtime/3.0.2", + "libraries" : [ + { + "name" : "org.glassfish.jaxb:jaxb-runtime", + "versions" : [ + "3.0.2" + ] + } + ] + }, + { + "test-project-path" : "org.hdrhistogram/HdrHistogram/2.1.12", + "libraries" : [ + { + "name" : "org.hdrhistogram:HdrHistogram", + "versions" : [ + "2.1.12" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate.orm/hibernate-core/6.1.1.Final", + "libraries" : [ + { + "name" : "org.hibernate.orm:hibernate-core", + "versions" : [ + "6.1.1.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate.orm/hibernate-core/6.2.0.Final", + "libraries" : [ + { + "name" : "org.hibernate.orm:hibernate-core", + "versions" : [ + "6.2.0.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate.orm/hibernate-core/6.5.0.Final", + "libraries" : [ + { + "name" : "org.hibernate.orm:hibernate-core", + "versions" : [ + "6.5.0.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate.orm/hibernate-core/6.6.0.Final", + "libraries" : [ + { + "name" : "org.hibernate.orm:hibernate-core", + "versions" : [ + "6.6.0.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate.orm/hibernate-core/7.0.0.Final", + "libraries" : [ + { + "name" : "org.hibernate.orm:hibernate-core", + "versions" : [ + "7.0.0.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate.orm/hibernate-core/7.1.0.Final", + "libraries" : [ + { + "name" : "org.hibernate.orm:hibernate-core", + "versions" : [ + "7.1.0.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate.orm/hibernate-envers/6.1.1.Final", + "libraries" : [ + { + "name" : "org.hibernate.orm:hibernate-envers", + "versions" : [ + "6.1.1.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate.reactive/hibernate-reactive-core/2.0.0.Final", + "libraries" : [ + { + "name" : "org.hibernate.reactive:hibernate-reactive-core", + "versions" : [ + "2.0.0.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate.validator/hibernate-validator/7.0.4.Final", + "libraries" : [ + { + "name" : "org.hibernate.validator:hibernate-validator", + "versions" : [ + "7.0.4.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate/hibernate-core/5.6.14.Final", + "libraries" : [ + { + "name" : "org.hibernate:hibernate-core", + "versions" : [ + "5.6.14.Final" + ] + } + ] + }, + { + "test-project-path" : "org.hibernate/hibernate-spatial/6.5.0.Final", + "libraries" : [ + { + "name" : "org.hibernate:hibernate-spatial", + "versions" : [ + "6.5.0.Final" + ] + } + ] + }, + { + "test-project-path" : "org.jboss.logging/jboss-logging/3.5.0.Final", + "libraries" : [ + { + "name" : "org.jboss.logging:jboss-logging", + "versions" : [ + "3.5.0.Final" + ] + } + ] + }, + { + "test-project-path" : "org.jboss.spec.javax.servlet/jboss-servlet-api_4.0_spec/2.0.0.Final", + "libraries" : [ + { + "name" : "org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec", + "versions" : [ + "2.0.0.Final" + ] + } + ] + }, + { + "test-project-path" : "org.jctools/jctools-core/2.1.2", + "libraries" : [ + { + "name" : "org.jctools:jctools-core", + "versions" : [ + "2.1.2" + ] + } + ] + }, + { + "test-project-path" : "org.jetbrains.kotlin/kotlin-reflect/1.7.10", + "libraries" : [ + { + "name" : "org.jetbrains.kotlin:kotlin-reflect", + "versions" : [ + "1.7.10" + ] + } + ] + }, + { + "test-project-path" : "org.jetbrains.kotlin/kotlin-stdlib/1.7.10", + "libraries" : [ + { + "name" : "org.jetbrains.kotlin:kotlin-stdlib", + "versions" : [ + "1.7.10" + ] + } + ] + }, + { + "test-project-path" : "org.jline/jline/3.21.0", + "libraries" : [ + { + "name" : "org.jline:jline", + "versions" : [ + "3.21.0" + ] + } + ] + }, + { + "test-project-path" : "org.jooq/jooq/3.17.7", + "libraries" : [ + { + "name" : "org.jooq:jooq", + "versions" : [ + "3.17.7" + ] + } + ] + }, + { + "test-project-path" : "org.jooq/jooq/3.18.2", + "libraries" : [ + { + "name" : "org.jooq:jooq", + "versions" : [ + "3.18.2" + ] + } + ] + }, + { + "test-project-path" : "org.liquibase/liquibase-core/4.17.0", + "libraries" : [ + { + "name" : "org.liquibase:liquibase-core", + "versions" : [ + "4.17.0", + "4.20.0", + "4.23.0" + ] + } + ] + }, + { + "test-project-path" : "org.liquibase/liquibase-core/4.25.0", + "libraries" : [ + { + "name" : "org.liquibase:liquibase-core", + "versions" : [ + "4.25.0", + "4.25.1", + "4.26.0", + "4.27.0", + "4.28.0", + "4.29.0" + ] + } + ] + }, + { + "test-project-path" : "org.liquibase/liquibase-core/5.0.1", + "libraries" : [ + { + "name" : "org.liquibase:liquibase-core", + "versions" : [ + "5.0.1" + ] + } + ] + }, + { + "test-project-path" : "org.mariadb.jdbc/mariadb-java-client/3.0.6", + "libraries" : [ + { + "name" : "org.mariadb.jdbc:mariadb-java-client", + "versions" : [ + "3.0.6" + ] + } + ] + }, + { + "test-project-path" : "org.mariadb.jdbc/mariadb-java-client/3.5.2", + "libraries" : [ + { + "name" : "org.mariadb.jdbc:mariadb-java-client", + "versions" : [ + "3.5.2" + ] + } + ] + }, + { + "test-project-path" : "org.mariadb/r2dbc-mariadb/1.1.3", + "libraries" : [ + { + "name" : "org.mariadb:r2dbc-mariadb", + "versions" : [ + "1.1.3" + ] + } + ] + }, + { + "test-project-path" : "org.mockito/mockito-core/4.8.1", + "libraries" : [ + { + "name" : "org.mockito:mockito-core", + "versions" : [ + "4.8.1" + ] + } + ] + }, + { + "test-project-path" : "org.mockito/mockito-core/5.0.0", + "libraries" : [ + { + "name" : "org.mockito:mockito-core", + "versions" : [ + "5.0.0" + ] + } + ] + }, + { + "test-project-path" : "org.opengauss/opengauss-jdbc/3.1.0-og", + "libraries" : [ + { + "name" : "org.opengauss:opengauss-jdbc", + "versions" : [ + "3.1.0-og" + ] + } + ] + }, + { + "test-project-path" : "org.postgresql/postgresql/42.3.4", + "libraries" : [ + { + "name" : "org.postgresql:postgresql", + "versions" : [ + "42.3.4" + ] + } + ] + }, + { + "test-project-path" : "org.postgresql/postgresql/42.7.3", + "libraries" : [ + { + "name" : "org.postgresql:postgresql", + "versions" : [ + "42.7.3" + ] + } + ] + }, + { + "test-project-path" : "org.quartz-scheduler/quartz/2.3.2", + "libraries" : [ + { + "name" : "org.quartz-scheduler:quartz", + "versions" : [ + "2.3.2" + ] + } + ] + }, + { + "test-project-path" : "org.testcontainers/testcontainers/1.17.6", + "libraries" : [ + { + "name" : "org.testcontainers:testcontainers", + "versions" : [ + "1.17.6" + ] + } + ] + }, + { + "test-project-path" : "org.testcontainers/testcontainers/1.19.8", + "libraries" : [ + { + "name" : "org.testcontainers:testcontainers", + "versions" : [ + "1.19.8" + ] + } + ] + }, + { + "test-project-path" : "org.thymeleaf.extras/thymeleaf-extras-springsecurity6/3.1.0.M1", + "libraries" : [ + { + "name" : "org.thymeleaf.extras:thymeleaf-extras-springsecurity6", + "versions" : [ + "3.1.0.M1" + ] + } + ] + }, + { + "test-project-path" : "org.thymeleaf/thymeleaf-spring6/3.1.0.M2", + "libraries" : [ + { + "name" : "org.thymeleaf:thymeleaf-spring6", + "versions" : [ + "3.1.0.M2" + ] + } + ] + }, + { + "test-project-path" : "org.thymeleaf/thymeleaf/3.1.0.M2", + "libraries" : [ + { + "name" : "org.thymeleaf:thymeleaf", + "versions" : [ + "3.1.0.M2" + ] + } + ] + }, + { + "test-project-path" : "org.thymeleaf/thymeleaf/3.1.0.RC1", + "libraries" : [ + { + "name" : "org.thymeleaf:thymeleaf", + "versions" : [ + "3.1.0.RC1" + ] + } + ] + }, + { + "test-project-path" : "samples/docker/image-pull", + "libraries" : [ + { + "name" : "samples:docker", + "versions" : [ + "image-pull" + ] + } + ] + } +] diff --git a/tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/gradle.properties b/tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/gradle.properties deleted file mode 100644 index f00b8b97d..000000000 --- a/tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/gradle.properties +++ /dev/null @@ -1,2 +0,0 @@ -library.version = 12.0.0.beta0 -metadata.dir = org.eclipse.jetty/jetty-client/12.0.0.beta0/ diff --git a/tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/.gitignore b/tests/src/org.eclipse.jetty/jetty-client/12.0.0/.gitignore similarity index 100% rename from tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/.gitignore rename to tests/src/org.eclipse.jetty/jetty-client/12.0.0/.gitignore diff --git a/tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/build.gradle b/tests/src/org.eclipse.jetty/jetty-client/12.0.0/build.gradle similarity index 100% rename from tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/build.gradle rename to tests/src/org.eclipse.jetty/jetty-client/12.0.0/build.gradle diff --git a/tests/src/org.eclipse.jetty/jetty-client/12.0.0/gradle.properties b/tests/src/org.eclipse.jetty/jetty-client/12.0.0/gradle.properties new file mode 100644 index 000000000..89ef83f73 --- /dev/null +++ b/tests/src/org.eclipse.jetty/jetty-client/12.0.0/gradle.properties @@ -0,0 +1,2 @@ +library.version = 12.0.0 +metadata.dir = org.eclipse.jetty/jetty-client/12.0.0/ diff --git a/tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/required-docker-images.txt b/tests/src/org.eclipse.jetty/jetty-client/12.0.0/required-docker-images.txt similarity index 100% rename from tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/required-docker-images.txt rename to tests/src/org.eclipse.jetty/jetty-client/12.0.0/required-docker-images.txt diff --git a/tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/settings.gradle b/tests/src/org.eclipse.jetty/jetty-client/12.0.0/settings.gradle similarity index 100% rename from tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/settings.gradle rename to tests/src/org.eclipse.jetty/jetty-client/12.0.0/settings.gradle diff --git a/tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/src/test/java/org_eclipse_jetty/jetty_client/JettyClientTest.java b/tests/src/org.eclipse.jetty/jetty-client/12.0.0/src/test/java/org_eclipse_jetty/jetty_client/JettyClientTest.java similarity index 100% rename from tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/src/test/java/org_eclipse_jetty/jetty_client/JettyClientTest.java rename to tests/src/org.eclipse.jetty/jetty-client/12.0.0/src/test/java/org_eclipse_jetty/jetty_client/JettyClientTest.java diff --git a/tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/user-code-filter.json b/tests/src/org.eclipse.jetty/jetty-client/12.0.0/user-code-filter.json similarity index 100% rename from tests/src/org.eclipse.jetty/jetty-client/12.0.0.beta0/user-code-filter.json rename to tests/src/org.eclipse.jetty/jetty-client/12.0.0/user-code-filter.json diff --git a/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/FetchExistingLibrariesWithNewerVersionsTask.groovy b/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/FetchExistingLibrariesWithNewerVersionsTask.groovy index 4982b9610..c39ddce26 100644 --- a/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/FetchExistingLibrariesWithNewerVersionsTask.groovy +++ b/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/FetchExistingLibrariesWithNewerVersionsTask.groovy @@ -24,6 +24,26 @@ abstract class FetchExistingLibrariesWithNewerVersionsTask extends DefaultTask { private static final List INFRASTRUCTURE_TESTS = List.of("samples", "org.example") + /** + * Identifies pre-release library versions by pattern matching against common pre-release suffixes. + *

+ * A version is considered pre-release if its suffix (following the last '.' or '-') matches + * one of these case-insensitive patterns: + *

+ */ + private static final Pattern PRE_RELEASE_PATTERN = ~/(?i)^(\d+(?:\.\d+)*)(?:[-.](alpha\d*|beta\d*|rc\d*|cr\d*|m\d+|ea\d*|b\d+|\d+|preview)(?:[-.].*)?)?$/ + private static final String FINAL_PATTERN = /(?i)\.Final$/ + @TaskAction void action() { // get all existing libraries @@ -62,7 +82,10 @@ abstract class FetchExistingLibrariesWithNewerVersionsTask extends DefaultTask { String artifact = libraryParts[1] def data = new URL(baseUrl + "/" + group + "/" + artifact + "/" + "maven-metadata.xml").getText() - return getNewerVersionsFromLibraryIndex(data, startingVersion, library) + List newerVersions = getNewerVersionsFromLibraryIndex(data, startingVersion, library) + + // filter pre-release versions if release exists + return filterPreReleases(newerVersions) } static List getNewerVersionsFromLibraryIndex(String index, String startingVersion, String libraryName) { @@ -88,6 +111,31 @@ abstract class FetchExistingLibrariesWithNewerVersionsTask extends DefaultTask { return allVersions.subList(1, allVersions.size()); } + static List filterPreReleases(List versions) { + // identify base releases, treating .Final as base + Set releases = versions.collect { v -> + // strip .Final + def cleaned = v.replaceAll(FINAL_PATTERN, '') + def matcher = PRE_RELEASE_PATTERN.matcher(cleaned) + if (matcher.matches() && matcher.group(2) == null) { + return matcher.group(1) + } + return null + }.findAll { it != null } as Set + + // filter pre-releases if base exists + return versions.findAll { v -> + def cleaned = v.replaceAll(FINAL_PATTERN, '') + def matcher = PRE_RELEASE_PATTERN.matcher(cleaned) + if (matcher.matches()) { + String base = matcher.group(1) + String preSuffix = matcher.groupCount() > 1 ? matcher.group(2) : null + return preSuffix == null || !releases.contains(base) + } + true + } + } + static String getLatestLibraryVersion(String libraryModule) { try { String[] coordinates = libraryModule.split(":"); diff --git a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/TestedVersionUpdaterTask.java b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/TestedVersionUpdaterTask.java index 5100d6b17..dd7cf72d6 100644 --- a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/TestedVersionUpdaterTask.java +++ b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/TestedVersionUpdaterTask.java @@ -21,12 +21,39 @@ import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @SuppressWarnings("unused") public abstract class TestedVersionUpdaterTask extends DefaultTask { + /** + * Identifies pre-release library versions by pattern matching against common pre-release suffixes. + *

+ * A version is considered pre-release if its suffix (following the last '.' or '-') matches + * one of these case-insensitive patterns: + *

    + *
  • {@code alpha} followed by optional numbers (e.g., "alpha", "Alpha1", "alpha123")
  • + *
  • {@code beta} followed by optional numbers (e.g., "beta", "Beta2", "BETA45")
  • + *
  • {@code rc} followed by optional numbers (e.g., "rc", "RC1", "rc99")
  • + *
  • {@code cr} followed by optional numbers (e.g., "cr", "CR3", "cr10")
  • + *
  • {@code m} followed by REQUIRED numbers (e.g., "M1", "m23")
  • + *
  • {@code ea} followed by optional numbers (e.g., "ea", "ea2", "ea15")
  • + *
  • {@code b} followed by REQUIRED numbers (e.g., "b0244", "b5")
  • + *
  • {@code preview} followed by optional numbers (e.g., "preview", "preview1", "preview42")
  • + *
  • Numeric suffixes separated by '-' (e.g., "-1", "-123")
  • + *
+ */ + private static final Pattern PRE_RELEASE_PATTERN = Pattern.compile( + "(?i)^(\\d+(?:\\.\\d+)*)(?:[-.](alpha\\d*|beta\\d*|rc\\d*|cr\\d*|m\\d+|ea\\d*|b\\d+|\\d+|preview)(?:[-.].*)?)?$" + ); + private static final Pattern FINAL_PATTERN = Pattern.compile("(?i)\\.Final$"); @Option(option = "coordinates", description = "GAV coordinates of the library") void extractInformationFromCoordinates(String c) { @@ -56,13 +83,18 @@ void extractInformationFromCoordinates(String c) { @TaskAction void run() throws IllegalStateException, IOException { File coordinatesMetadataIndex = getIndexFile().get().getAsFile(); + String newVersion = getNewVersion().get(); ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).setSerializationInclusion(JsonInclude.Include.NON_NULL); List entries = objectMapper.readValue(coordinatesMetadataIndex, new TypeReference<>() {}); - for (MetadataVersionsIndexEntry entry : entries) { + for (int i = 0; i < entries.size(); i++) { + MetadataVersionsIndexEntry entry = entries.get(i); + if (entry.testedVersions().contains(getLastSupportedVersion().get())) { - entry.testedVersions().add(getNewVersion().get()); + entry.testedVersions().add(newVersion); entry.testedVersions().sort(Comparator.comparing(VersionNumber::parse)); + + entries.set(i, handlePreReleases(entry, newVersion, coordinatesMetadataIndex.toPath().getParent())); } } @@ -76,4 +108,169 @@ void run() throws IllegalStateException, IOException { } Files.writeString(coordinatesMetadataIndex.toPath(), json, java.nio.charset.StandardCharsets.UTF_8); } + + /** + * Handles pre-release versions when adding a new version to a metadata entry. + *

+ * Rules applied by this method: + *

    + *
  • If the newly added version is a full release (no pre-release label, or ending with ".Final"), + * all existing pre-releases of the same base version are removed from {@code testedVersions}.
  • + *
  • If the newly added version is itself a pre-release, no versions are removed.
  • + *
  • If the entry's {@code metadataVersion} is a pre-release of the same base version, + * it is updated to the new full release. The corresponding metadata and test directories are renamed accordingly. + * The {@code gradle.properties} file in the tests directory is updated to refer to the new version.
  • + *
  • Version parsing follows {@link #PRE_RELEASE_PATTERN} and treats ".Final" as a base version.
  • + *
+ */ + private MetadataVersionsIndexEntry handlePreReleases(MetadataVersionsIndexEntry entry, String newVersion, Path baseDir) throws IOException { + // strip .Final if present + String cleanedNewVersion = FINAL_PATTERN.matcher(newVersion).replaceAll(""); + Matcher newVersionMatcher = PRE_RELEASE_PATTERN.matcher(cleanedNewVersion); + if (!newVersionMatcher.matches()) { + throw new IllegalArgumentException("New version is not valid: " + newVersion); + } + + String newBaseVersion = newVersionMatcher.group(1); + String newPreReleaseLabel = newVersionMatcher.group(2); // null = full release + + // Only remove old pre-releases if the new version is a full release of the same version + if (newPreReleaseLabel == null) { + entry.testedVersions().removeIf(v -> { + // strip .Final for comparison + String cleanedV = FINAL_PATTERN.matcher(v).replaceAll(""); + Matcher m = PRE_RELEASE_PATTERN.matcher(cleanedV); + return m.matches() && m.group(2) != null && newBaseVersion.equals(m.group(1)); + }); + + // Update metadata-version if it was a pre-release of the new version + Matcher metadataMatcher = PRE_RELEASE_PATTERN.matcher(FINAL_PATTERN.matcher(entry.metadataVersion()).replaceAll("")); + if (metadataMatcher.matches() && metadataMatcher.group(2) != null && newBaseVersion.equals(metadataMatcher.group(1))) { + String oldMetadataVersion = entry.metadataVersion(); + + // Rename the metadata directory + Path oldDir = baseDir.resolve(oldMetadataVersion); + Path newDir = baseDir.resolve(newVersion); + if (Files.exists(oldDir)) { + Files.move(oldDir, newDir); + } + + updateTests(baseDir, entry, oldMetadataVersion, newVersion); + + // Return new record with updated metadata-version + return new MetadataVersionsIndexEntry( + entry.latest(), + entry.override(), + entry.module(), + entry.defaultFor(), + newVersion, + entry.testedVersions() + ); + } + } + + return entry; + } + + /** + * Updates the tests directory when a pre-release version is replaced by its corresponding + * full release. + *

+ * This method performs two operations: + *

    + *
  1. Renames the test directory from {@code oldVersion} to {@code newVersion} under {@code tests/src///}.
  2. + *
  3. Updates the {@code gradle.properties} file inside the renamed directory: + *
      + *
    • {@code library.version} is set to the new version,
    • + *
    • {@code metadata.dir} is updated to point to the metadata directory for the new version.
    • + *
    + *
  4. + *
+ */ + private void updateTests(Path metadataBaseDir, MetadataVersionsIndexEntry entry, String oldVersion, String newVersion) throws IOException { + Path testsRoot = metadataBaseDir.getParent() + .getParent() + .getParent() + .resolve("tests/src") + .resolve(entry.module().replace(":", "/")); + + Path oldTestDir = testsRoot.resolve(oldVersion); + Path newTestDir = testsRoot.resolve(newVersion); + + // Rename the tests directory + if (Files.exists(oldTestDir)) { + Files.move(oldTestDir, newTestDir); + } else { + return; + } + + // Update gradle.properties inside the renamed directory + updateGradleProperties(newTestDir, entry, newVersion); + + // Update global tests index.json + updateTestsIndexJson(metadataBaseDir.getParent().getParent().getParent().resolve("tests/src/index.json"), entry, oldVersion, newVersion); + } + + /** + * Updates {@code gradle.properties} inside a given test directory to reflect the new version. + */ + private void updateGradleProperties(Path testDir, MetadataVersionsIndexEntry entry, String newVersion) throws IOException { + Path gradleProps = testDir.resolve("gradle.properties"); + if (!Files.exists(gradleProps)) { + return; + } + + List lines = Files.readAllLines(gradleProps); + List updated = new ArrayList<>(); + for (String line : lines) { + if (line.startsWith("library.version")) { + updated.add("library.version = " + newVersion); + } else if (line.startsWith("metadata.dir")) { + updated.add("metadata.dir = " + entry.module().replace(":", "/") + "/" + newVersion + "/"); + } else { + updated.add(line); + } + } + + Files.write(gradleProps, updated); + } + + /** + * Updates the global tests index.json file to reflect the renamed test directory and new version. + */ + @SuppressWarnings("unchecked") + private void updateTestsIndexJson(Path indexJson, MetadataVersionsIndexEntry entry, String oldVersion, String newVersion) throws IOException { + ObjectMapper objectMapper = new ObjectMapper(); + List> entries = objectMapper.readValue(indexJson.toFile(), new TypeReference<>() {}); + + // Compute the old test-project-path for matching + String oldTestProjectPath = entry.module().replace(":", "/") + "/" + oldVersion; + String newTestProjectPath = entry.module().replace(":", "/") + "/" + newVersion; + + for (Map e : entries) { + String path = (String) e.get("test-project-path"); + if (!oldTestProjectPath.equals(path)) { + continue; + } + + // Update the test-project-path + e.put("test-project-path", newTestProjectPath); + + // Update the versions array inside libraries + List> libs = (List>) e.get("libraries"); + for (Map lib : libs) { + List versions = (List) lib.get("versions"); + versions.clear(); + versions.add(newVersion); + } + + break; + } + + DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter(); + prettyPrinter.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE); + String json = objectMapper.writer(prettyPrinter).writeValueAsString(entries); + if (!json.endsWith("\n")) json += System.lineSeparator(); + Files.writeString(indexJson, json, StandardCharsets.UTF_8); + } }