From 6ae342fd8c35ef27049228a1c0021087af5210ae Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Fri, 8 Apr 2022 19:09:11 +0300 Subject: [PATCH 01/10] Pull the latest config --- buildSrc/build.gradle.kts | 7 +- .../internal/dependency/AnimalSniffer.kt | 2 +- .../io/spine/internal/dependency/AssertK.kt | 3 +- .../spine/internal/dependency/BouncyCastle.kt | 1 + .../spine/internal/dependency/CheckStyle.kt | 2 +- .../internal/dependency/CheckerFramework.kt | 2 +- .../spine/internal/dependency/CommonsCli.kt | 2 +- .../io/spine/internal/dependency/Dokka.kt | 2 +- .../spine/internal/dependency/ErrorProne.kt | 2 +- .../io/spine/internal/dependency/Grpc.kt | 2 +- .../io/spine/internal/dependency/Gson.kt | 2 +- .../io/spine/internal/dependency/Guava.kt | 2 +- .../spine/internal/dependency/HttpClient.kt | 2 +- .../io/spine/internal/dependency/Jackson.kt | 5 +- .../io/spine/internal/dependency/JavaJwt.kt | 3 +- .../io/spine/internal/dependency/JavaPoet.kt | 1 + .../io/spine/internal/dependency/Klaxon.kt | 2 +- .../KotlinSemver.kt} | 12 +- .../io/spine/internal/dependency/Pmd.kt | 2 +- .../io/spine/internal/dependency/Protobuf.kt | 12 +- .../io/spine/internal/dependency/Roaster.kt | 3 +- .../TestKitTruth.kt} | 19 +- .../internal/gradle/DependencyResolution.kt | 9 +- .../io/spine/internal/gradle/JavadocConfig.kt | 181 --------- .../internal/gradle/ProjectExtensions.kt | 23 +- .../io/spine/internal/gradle/Repositories.kt | 5 +- .../io/spine/internal/gradle/VersionWriter.kt | 18 +- .../internal/gradle/dart/task/Publish.kt | 2 +- .../spine/internal/gradle/javac/ErrorProne.kt | 4 +- .../gradle/javadoc/ExcludeInternalDoclet.kt | 2 +- .../internal/gradle/javadoc/JavadocConfig.kt | 68 +++- .../gradle/javascript/task/Publish.kt | 2 +- .../internal/gradle/publish/Artifacts.kt | 122 ++++++ .../{ => publish}/CheckVersionIncrement.kt | 3 +- .../internal/gradle/publish/CloudRepo.kt | 68 ++++ .../gradle/{ => publish}/IncrementGuard.kt | 5 +- .../gradle/publish/MavenJavaPublication.kt | 155 +++++++ .../gradle/publish/ProjectExtensions.kt | 155 ------- .../publish/Tasks.kt => publish/ProtoJar.kt} | 32 +- .../AssembleProto.kt => ProtoLocators.kt} | 47 +-- .../spine/internal/gradle/publish/Publish.kt | 147 ------- .../gradle/publish/PublishExtension.kt | 99 ----- .../gradle/publish/PublishingConfig.kt | 117 ++++++ .../gradle/publish/PublishingExtensions.kt | 121 ------ .../gradle/publish/PublishingRepos.kt | 8 +- .../gradle/publish/SpinePublishing.kt | 379 ++++++++++++++++++ .../io/spine/internal/gradle/publish/Tasks.kt | 110 +++++ .../spine/internal/gradle/publish/TestJar.kt | 50 +++ .../gradle/publish/proto/ProtoLocators.kt | 164 -------- .../testing/{Artifacts.kt => Multiproject.kt} | 48 ++- .../src/main/kotlin/pmd-settings.gradle.kts | 8 +- config | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 53 files changed, 1228 insertions(+), 1018 deletions(-) rename buildSrc/src/main/kotlin/io/spine/internal/{gradle/publish/ConfigurationName.kt => dependency/KotlinSemver.kt} (84%) rename buildSrc/src/main/kotlin/io/spine/internal/{gradle/publish/ArtifactTaskName.kt => dependency/TestKitTruth.kt} (72%) delete mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/JavadocConfig.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt rename buildSrc/src/main/kotlin/io/spine/internal/gradle/{ => publish}/CheckVersionIncrement.kt (98%) create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudRepo.kt rename buildSrc/src/main/kotlin/io/spine/internal/gradle/{ => publish}/IncrementGuard.kt (96%) create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt delete mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProjectExtensions.kt rename buildSrc/src/main/kotlin/io/spine/internal/gradle/{java/publish/Tasks.kt => publish/ProtoJar.kt} (64%) rename buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/{proto/AssembleProto.kt => ProtoLocators.kt} (58%) delete mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Publish.kt delete mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishExtension.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt delete mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExtensions.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt delete mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/proto/ProtoLocators.kt rename buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/{Artifacts.kt => Multiproject.kt} (51%) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 8ce1aa24..591c5ae3 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -28,9 +28,6 @@ * This script uses two declarations of the constant [licenseReportVersion] because * currently there is no way to define a constant _before_ a build script of `buildSrc`. * We cannot use imports or do something else before the `buildscript` or `plugin` clauses. - * - * Therefore, when a version of [io.spine.internal.dependency.LicenseReport] changes, it should be - * changed in the Kotlin object _and_ in this file below twice. */ plugins { @@ -38,7 +35,7 @@ plugins { groovy `kotlin-dsl` pmd - val licenseReportVersion = "2.0" + val licenseReportVersion = "2.1" id("com.github.jk1.dependency-license-report").version(licenseReportVersion) } @@ -57,7 +54,7 @@ repositories { val jacksonVersion = "2.13.0" val googleAuthToolVersion = "2.1.2" -val licenseReportVersion = "2.0" +val licenseReportVersion = "2.1" val grGitVersion = "3.1.1" /** diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt index 2541920a..068ae59c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt @@ -28,6 +28,6 @@ package io.spine.internal.dependency // https://www.mojohaus.org/animal-sniffer/animal-sniffer-maven-plugin/ object AnimalSniffer { - private const val version = "1.19" + private const val version = "1.21" const val lib = "org.codehaus.mojo:animal-sniffer-annotations:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt index 753d6bb5..8d42b619 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt @@ -31,7 +31,8 @@ package io.spine.internal.dependency * * [AssertK](https://github.com/willowtreeapps/assertk) */ +@Suppress("unused") object AssertK { - private const val version = "0.23.1" + private const val version = "0.25" const val libJvm = "com.willowtreeapps.assertk:assertk-jvm:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt index 77ed6769..c0567edd 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt @@ -27,6 +27,7 @@ package io.spine.internal.dependency // https://www.bouncycastle.org/java.html +@Suppress("unused") object BouncyCastle { const val libPkcsJdk15 = "org.bouncycastle:bcpkix-jdk15on:1.68" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt index 1d838fee..1e3effba 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt @@ -30,5 +30,5 @@ package io.spine.internal.dependency // See `io.spine.internal.gradle.checkstyle.CheckStyleConfig`. @Suppress("unused") object CheckStyle { - const val version = "9.2" + const val version = "10.1" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt index 8ede0ea3..75cc67f2 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt @@ -28,7 +28,7 @@ package io.spine.internal.dependency // https://checkerframework.org/ object CheckerFramework { - private const val version = "3.21.0" + private const val version = "3.21.3" const val annotations = "org.checkerframework:checker-qual:${version}" @Suppress("unused") val dataflow = listOf( diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt index ac0d35bc..79a4036c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt @@ -33,6 +33,6 @@ package io.spine.internal.dependency * [Commons CLI](https://commons.apache.org/proper/commons-cli/) */ object CommonsCli { - private const val version = "1.4" + private const val version = "1.5.0" const val lib = "commons-cli:commons-cli:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt index 95cf018f..af26ad74 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt @@ -29,6 +29,6 @@ package io.spine.internal.dependency // https://github.com/Kotlin/dokka @Suppress("unused") object Dokka { - const val version = "1.5.0" + const val version = "1.6.10" const val pluginId = "org.jetbrains.dokka" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt index ca73fedc..ab326153 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt @@ -30,7 +30,7 @@ package io.spine.internal.dependency @Suppress("unused") object ErrorProne { // https://github.com/google/error-prone - private const val version = "2.10.0" + private const val version = "2.11.0" // https://github.com/tbroyer/gradle-errorprone-plugin/blob/v0.8/build.gradle.kts private const val javacPluginVersion = "9+181-r4173-1" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt index d9dd7220..22996e4d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt @@ -30,7 +30,7 @@ package io.spine.internal.dependency @Suppress("unused") object Grpc { @Suppress("MemberVisibilityCanBePrivate") - const val version = "1.43.1" + const val version = "1.45.0" const val api = "io.grpc:grpc-api:${version}" const val auth = "io.grpc:grpc-auth:${version}" const val core = "io.grpc:grpc-core:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt index bca49156..e161ee1e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt @@ -33,6 +33,6 @@ package io.spine.internal.dependency * [Gson](https://github.com/google/gson) */ object Gson { - private const val version = "2.8.9" + private const val version = "2.9.0" const val lib = "com.google.code.gson:gson:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt index 22e67e0d..faaf3b8b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt @@ -35,7 +35,7 @@ package io.spine.internal.dependency */ // https://github.com/google/guava object Guava { - private const val version = "31.0.1-jre" + private const val version = "31.1-jre" const val lib = "com.google.guava:guava:${version}" const val testLib = "com.google.guava:guava-testlib:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt index bf63778c..849f1f4a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt @@ -32,7 +32,7 @@ package io.spine.internal.dependency @Suppress("unused") object HttpClient { // https://github.com/googleapis/google-http-java-client - const val version = "1.40.1" + const val version = "1.41.5" const val google = "com.google.http-client:google-http-client:${version}" const val jackson2 = "com.google.http-client:google-http-client-jackson2:${version}" const val gson = "com.google.http-client:google-http-client-gson:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt index d0345748..71f7e08c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt @@ -28,11 +28,12 @@ package io.spine.internal.dependency @Suppress("unused") object Jackson { - private const val version = "2.13.1" + private const val version = "2.13.2" + private const val databindVersion = "2.13.2.2" // https://github.com/FasterXML/jackson-core const val core = "com.fasterxml.jackson.core:jackson-core:${version}" // https://github.com/FasterXML/jackson-databind - const val databind = "com.fasterxml.jackson.core:jackson-databind:${version}" + const val databind = "com.fasterxml.jackson.core:jackson-databind:${databindVersion}" // https://github.com/FasterXML/jackson-dataformat-xml/releases const val dataformatXml = "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${version}" // https://github.com/FasterXML/jackson-dataformats-text/releases diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt index 2581e355..424c45fb 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt @@ -31,7 +31,8 @@ package io.spine.internal.dependency * * [Java JWT](https://github.com/auth0/java-jwt) */ +@Suppress("unused") object JavaJwt { - private const val version = "3.18.1" + private const val version = "3.19.1" const val lib = "com.auth0:java-jwt:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt index f17445a5..e9bdb9b3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt @@ -27,6 +27,7 @@ package io.spine.internal.dependency // https://github.com/square/javapoet +@Suppress("unused") object JavaPoet { private const val version = "1.13.0" const val lib = "com.squareup:javapoet:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt index 7ee30e55..160fdbfb 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt @@ -32,6 +32,6 @@ package io.spine.internal.dependency * [Klaxon](https://github.com/cbeust/klaxon) */ object Klaxon { - private const val version = "5.5" + private const val version = "5.6" const val lib = "com.beust:klaxon:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ConfigurationName.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt similarity index 84% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ConfigurationName.kt rename to buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt index c6fd6040..47fd7de4 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ConfigurationName.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt @@ -24,11 +24,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package io.spine.internal.gradle.publish +package io.spine.internal.dependency -/** - * Popular names of Gradle configurations. - */ -internal object ConfigurationName { - const val archives = "archives" +// https://github.com/z4kn4fein/kotlin-semver +@Suppress("unused") +object KotlinSemver { + private const val version = "1.2.1" + const val lib = "io.github.z4kn4fein:semver:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt index 595a1cb2..badd7717 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt @@ -29,5 +29,5 @@ package io.spine.internal.dependency // https://pmd.github.io/ @Suppress("unused") // Will be used when `config/gradle/pmd.gradle` migrates to Kotlin. object Pmd { - const val version = "6.41.0" + const val version = "6.44.0" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt index b599002d..1da0906a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt @@ -29,12 +29,14 @@ package io.spine.internal.dependency // https://github.com/protocolbuffers/protobuf @Suppress("MemberVisibilityCanBePrivate") // used directly from outside object Protobuf { - const val version = "3.19.1" + private const val group = "com.google.protobuf" + const val version = "3.19.4" val libs = listOf( - "com.google.protobuf:protobuf-java:${version}", - "com.google.protobuf:protobuf-java-util:${version}" + "${group}:protobuf-java:${version}", + "${group}:protobuf-java-util:${version}", + "${group}:protobuf-kotlin:${version}" ) - const val compiler = "com.google.protobuf:protoc:${version}" + const val compiler = "${group}:protoc:${version}" // https://github.com/google/protobuf-gradle-plugin/releases object GradlePlugin { @@ -46,6 +48,6 @@ object Protobuf { */ const val version = "0.8.18" const val id = "com.google.protobuf" - const val lib = "com.google.protobuf:protobuf-gradle-plugin:${version}" + const val lib = "${group}:protobuf-gradle-plugin:${version}" } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Roaster.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Roaster.kt index 4fec98fe..2d237060 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Roaster.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Roaster.kt @@ -27,6 +27,7 @@ package io.spine.internal.dependency // https://github.com/forge/roaster +@Suppress("unused") object Roaster { /** @@ -36,7 +37,7 @@ object Roaster { * * Please see [this issue][https://github.com/SpineEventEngine/config/issues/220] for details. */ - private const val version = "2.23.2.Final" + private const val version = "2.24.0.Final" const val api = "org.jboss.forge.roaster:roaster-api:${version}" const val jdt = "org.jboss.forge.roaster:roaster-jdt:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ArtifactTaskName.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt similarity index 72% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ArtifactTaskName.kt rename to buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt index a3ed1255..8d572d9b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ArtifactTaskName.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt @@ -24,16 +24,19 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package io.spine.internal.gradle.publish +package io.spine.internal.dependency /** - * Default artifact task names. + * Gradle TestKit extension for Google Truth. * - * These tasks, if not present on a project already, are created by the [Publish] plugin. - * Their output is published as project's artifacts. + * Source code: + * https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin/tree/main/testkit-truth + * + * Usage description: + * https://dev.to/autonomousapps/gradle-all-the-way-down-testing-your-gradle-plugin-with-gradle-testkit-2hmc */ -internal enum class ArtifactTaskName { - sourceJar, - testOutputJar, - javadocJar; +@Suppress("unused") +object TestKitTruth { + private const val version = "1.1" + const val lib = "com.autonomousapps:testkit-truth:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt index 6663afb8..168c0798 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt @@ -35,6 +35,7 @@ import io.spine.internal.dependency.CommonsCli import io.spine.internal.dependency.CommonsLogging import io.spine.internal.dependency.ErrorProne import io.spine.internal.dependency.FindBugs +import io.spine.internal.dependency.Flogger import io.spine.internal.dependency.Gson import io.spine.internal.dependency.Guava import io.spine.internal.dependency.J2ObjC @@ -44,6 +45,8 @@ import io.spine.internal.dependency.Okio import io.spine.internal.dependency.Plexus import io.spine.internal.dependency.Protobuf import io.spine.internal.dependency.Truth +import org.gradle.api.NamedDomainObjectContainer +import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.ResolutionStrategy import org.gradle.api.artifacts.dsl.RepositoryHandler @@ -59,7 +62,7 @@ fun doForceVersions(configurations: ConfigurationContainer) { /** * Forces dependencies used in the project. */ -fun ConfigurationContainer.forceVersions() { +fun NamedDomainObjectContainer.forceVersions() { all { resolutionStrategy { failOnVersionConflict() @@ -82,6 +85,8 @@ private fun ResolutionStrategy.forceProductionDependencies() { ErrorProne.core, Guava.lib, FindBugs.annotations, + Flogger.lib, + Flogger.Runtime.systemBackend, Kotlin.reflect, Kotlin.stdLib, Kotlin.stdLibCommon, @@ -119,7 +124,7 @@ private fun ResolutionStrategy.forceTransitiveDependencies() { ) } -fun ConfigurationContainer.excludeProtobufLite() { +fun NamedDomainObjectContainer.excludeProtobufLite() { fun excludeProtoLite(configurationName: String) { named(configurationName).get().exclude( diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/JavadocConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/JavadocConfig.kt deleted file mode 100644 index abb1d206..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/JavadocConfig.kt +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright 2022, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package io.spine.internal.gradle - -import io.spine.internal.gradle.JavadocConfig.tags -import org.gradle.api.JavaVersion -import org.gradle.api.Project -import org.gradle.api.artifacts.Configuration -import org.gradle.api.tasks.TaskContainer -import org.gradle.api.tasks.javadoc.Javadoc -import org.gradle.external.javadoc.StandardJavadocDocletOptions - -/** - * Javadoc processing settings. - * - * This type is named with `Config` suffix to avoid its confusion with the standard `Javadoc` type. - */ -@Suppress("unused") -object JavadocConfig { - val tags = listOf( - JavadocTag("apiNote", "API Note"), - JavadocTag("implSpec", "Implementation Requirements"), - JavadocTag("implNote", "Implementation Note") - ) - - val encoding = Encoding("UTF-8") - - fun applyTo(project: Project) { - val docletOptions = project.tasks.javadocTask().options as StandardJavadocDocletOptions - docletOptions.encoding = encoding.name - reduceParamWarnings(docletOptions) - registerCustomTags(docletOptions) - } - - /** - * Configures the [Javadoc] task for the passed [docletOptions] to avoid numerous warnings - * for missing `@param` tags. - * - * As suggested by Stephen Colebourne: - * [https://blog.joda.org/2014/02/turning-off-doclint-in-jdk-8-javadoc.html] - * - * See also: - * [https://github.com/GPars/GPars/blob/master/build.gradle#L268] - */ - private fun reduceParamWarnings(docletOptions: StandardJavadocDocletOptions) { - if (JavaVersion.current().isJava8Compatible) { - docletOptions.addStringOption("Xdoclint:none", "-quiet") - } - } - - /** - * Registers custom [tags] for the passed doclet options which in turn belong - * to some particular [Javadoc] task. - */ - fun registerCustomTags(docletOptions: StandardJavadocDocletOptions) { - docletOptions.tags = tags.map { it.toString() } - } -} - -/** - * The Javadoc tag. - */ -class JavadocTag(val name: String, val title: String) { - - override fun toString(): String { - return "${name}:a:${title}:" - } -} - -/** - * The encoding to use in Javadoc processing. - */ -data class Encoding(val name: String) - -object JavadocTask { - const val name = "javadoc" -} - -/** - * A helper routine which configures the GitHub Pages updater to exclude `@Internal` types. - */ -object InternalJavadocFilter { - - /** - * The name of the helper task which configures the Javadoc processing - * to exclude `@Internal` types. - */ - const val taskName = "noInternalJavadoc" - - /** - * The name of the custom configuration in scope of which the exclusion of `@Internal` types - * is performed. - */ - private const val excludeDocletConfig = "excludeInternalDoclet" - - /** - * Creates a custom Javadoc task for the [project] which excludes the the types - * annotated as `@Internal`. - * - * The task is registered under [taskName]. - */ - fun registerTask(project: Project) { - val excludeInternalDoclet = registerConfiguration(project) - appendCustomJavadocTask(taskName, project, excludeInternalDoclet) - } - - private fun registerConfiguration(project: Project): Configuration { - val configurations = project.configurations - val excludeInternalDoclet = configurations.create(excludeDocletConfig) - val projectVersion = project.version.toString() - project.dependencies.add( - excludeInternalDoclet.name, - "io.spine.tools:spine-javadoc-filter:$projectVersion" - ) - return excludeInternalDoclet - } - - private fun appendCustomJavadocTask( - taskName: String, - project: Project, - excludeInternalDoclet: Configuration - ) { - val tasks = project.tasks - val javadocTask = tasks.javadocTask(JavadocTask.name) - tasks.register(taskName, Javadoc::class.java) { - - source = project.sourceSets.getByName("main").allJava.filter { - !it.absolutePath.contains("generated") - }.asFileTree - - classpath = javadocTask.classpath - - options { - encoding = JavadocConfig.encoding.name - - // Doclet fully qualified name. - doclet = "io.spine.tools.javadoc.ExcludeInternalDoclet" - - // Path to the JAR containing the doclet. - docletpath = excludeInternalDoclet.files.toList() - } - - val docletOptions = options as StandardJavadocDocletOptions - JavadocConfig.registerCustomTags(docletOptions) - } - } -} - -/** - * Finds a [Javadoc] Gradle task by the passed name. - */ -fun TaskContainer.javadocTask(named: String) = this.getByName(named) as Javadoc - -/** - * Finds a default [Javadoc] Gradle task. - */ -fun TaskContainer.javadocTask() = this.getByName(JavadocTask.name) as Javadoc diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt index e11c7ec5..a2e34b3a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt @@ -26,12 +26,13 @@ package io.spine.internal.gradle -import io.spine.internal.gradle.publish.PublishExtension +import io.spine.internal.gradle.publish.SpinePublishing import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.tasks.SourceSetContainer +import org.gradle.kotlin.dsl.findByType import org.gradle.kotlin.dsl.getByType /** @@ -72,16 +73,20 @@ fun Project.findTask(name: String): T { } /** - * Obtains the Maven artifact ID of the project taking into account - * the value of the [PublishExtension.spinePrefix] property. + * Obtains Maven artifact ID of this [Project]. * - * If the project has a [PublishExtension] installed, then the extension is used for - * [obtaining][PublishExtension.artifactId] the artifact ID. - * - * Otherwise, the project name is returned. + * The method checks if [SpinePublishing] extension is configured upon this project. If yes, + * returns [SpinePublishing.artifactId] for the project. Otherwise, a project's name is returned. */ val Project.artifactId: String get() { - val publishExtension = rootProject.extensions.findByType(PublishExtension::class.java) - return publishExtension?.artifactId(this) ?: name + + // Publishing of a project can be configured either from the project itself or + // from its root project. This is why it is required to check both places. + + val spinePublishing = extensions.findByType() + ?: rootProject.extensions.findByType() + + val artifactId = spinePublishing?.artifactId(this) + return artifactId ?: name } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt index 2bd381e9..db807672 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt @@ -26,6 +26,7 @@ package io.spine.internal.gradle +import io.spine.internal.gradle.publish.CloudRepo import io.spine.internal.gradle.publish.PublishingRepos import io.spine.internal.gradle.publish.PublishingRepos.gitHub import java.io.File @@ -111,8 +112,8 @@ object Repos { ) val oldSpineSnapshots = PublishingRepos.mavenTeamDev.snapshots - val spine = PublishingRepos.cloudRepo.releases - val spineSnapshots = PublishingRepos.cloudRepo.snapshots + val spine = CloudRepo.published.releases + val spineSnapshots = CloudRepo.published.snapshots val artifactRegistry = PublishingRepos.cloudArtifactRegistry.releases val artifactRegistrySnapshots = PublishingRepos.cloudArtifactRegistry.snapshots diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt index 500c9252..bcec4a56 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt @@ -26,7 +26,6 @@ package io.spine.internal.gradle -import io.spine.internal.gradle.publish.PublishExtension import java.util.* import org.gradle.api.DefaultTask import org.gradle.api.Plugin @@ -88,17 +87,14 @@ abstract class WriteVersions : DefaultTask() { } /** - * Creates a `.properties` file with versions named after the name of the project, - * taking in account the value of the [PublishExtension.spinePrefix] property. + * Creates a `.properties` file with versions, named after the value + * of [Project.artifactId] property. * - * If the property is set to `true`, the name of the file would be: - * ``` - * versions-spine-.properties - * ``` - * If the property is set to `false`, the name of the file would be: - * ``` - * versions-spine-.properties - * ``` + * The name of the file would be: `versions-.properties`. + * + * By default, value of [Project.artifactId] property is a project's name with "spine-" prefix. + * For example, if a project's name is "tools", then the name of the file would be: + * `versions-spine-tools.properties`. */ @TaskAction private fun writeFile() { diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt index 284788ee..92eb2904 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt @@ -28,7 +28,7 @@ package io.spine.internal.gradle.dart.task import io.spine.internal.gradle.TaskName import io.spine.internal.gradle.base.assemble -import io.spine.internal.gradle.java.publish.publish +import io.spine.internal.gradle.publish.publish import io.spine.internal.gradle.named import io.spine.internal.gradle.register import org.gradle.api.tasks.Copy diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt index 72c46235..df31e581 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt @@ -49,6 +49,7 @@ import org.gradle.process.CommandLineArgumentProvider * } *``` */ +@Suppress("unused") fun JavaCompile.configureErrorProne() { options.errorprone .errorproneArgumentProviders @@ -67,7 +68,8 @@ private object ErrorProneConfig { listOf( // Exclude generated sources from being analyzed by ErrorProne. - "-XepExcludedPaths:.*/generated/.*", + // Include all directories started from `generated`, such as `generated-proto`. + "-XepExcludedPaths:.*/generated.*/.*", // Turn the check off until ErrorProne can handle `@Nested` JUnit classes. // See issue: https://github.com/google/error-prone/issues/956 diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt index 9de4148a..72d7f6a1 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt @@ -65,7 +65,7 @@ class ExcludeInternalDoclet(val version: String) { } /** - * Creates a custom Javadoc task for the [project] which excludes the the types + * Creates a custom Javadoc task for the [project] which excludes the types * annotated as `@Internal`. * * The task is registered under [taskName]. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt index cfb14281..f6002cad 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt @@ -26,6 +26,7 @@ package io.spine.internal.gradle.javadoc +import java.io.File import org.gradle.api.JavaVersion import org.gradle.api.Project import org.gradle.api.tasks.javadoc.Javadoc @@ -39,6 +40,13 @@ import org.gradle.external.javadoc.StandardJavadocDocletOptions @Suppress("unused") object JavadocConfig { + /** + * Link to the documentation for Java 11 Standard Library API. + * + * OpenJDK SE 11 is used for the reference. + */ + private const val standardLibraryAPI = "https://cr.openjdk.java.net/~iris/se/11/latestSpec/api/" + @Suppress("MemberVisibilityCanBePrivate") // opened to be visible from docs. val tags = listOf( JavadocTag("apiNote", "API Note"), @@ -49,15 +57,54 @@ object JavadocConfig { val encoding = Encoding("UTF-8") fun applyTo(project: Project) { - val docletOptions = project.tasks.javadocTask().options as StandardJavadocDocletOptions + val javadocTask = project.tasks.javadocTask() + discardJavaModulesInLinks(javadocTask) + val docletOptions = javadocTask.options as StandardJavadocDocletOptions + configureDoclet(docletOptions) + } + + /** + * Discards using of Java 9 modules in URL links generated by javadoc for our codebase. + * + * This fixes navigation to classes through the search results. + * + * The issue appeared after migration to Java 11. When javadoc is generated for a project + * that does not declare Java 9 modules, search results contain broken links with appended + * `undefined` prefix to the URL. This `undefined` was meant to be a name of a Java 9 module. + * + * See: [Issue #334](https://github.com/SpineEventEngine/config/issues/334) + */ + private fun discardJavaModulesInLinks(javadoc: Javadoc) { + + // We ask `Javadoc` task to modify "search.js" and override a method, responsible for + // the formation of URL prefixes. We can't specify the option "--no-module-directories", + // because it leads to discarding of all module prefixes in generated links. That means, + // links to the types from the standard library would not work, as they are declared + // within modules since Java 9. + + val discardModulePrefix = """ + + getURLPrefix = function(ui) { + return ""; + }; + """.trimIndent() + + javadoc.doLast { + val destinationDir = javadoc.destinationDir!!.absolutePath + val searchScript = File("$destinationDir/search.js") + searchScript.appendText(discardModulePrefix) + } + } + + private fun configureDoclet(docletOptions: StandardJavadocDocletOptions) { docletOptions.encoding = encoding.name reduceParamWarnings(docletOptions) registerCustomTags(docletOptions) + linkStandardLibraryAPI(docletOptions) } /** - * Configures the [Javadoc] task for the passed [docletOptions] to avoid numerous warnings - * for missing `@param` tags. + * Configures `javadoc` tool to avoid numerous warnings for missing `@param` tags. * * As suggested by Stephen Colebourne: * [https://blog.joda.org/2014/02/turning-off-doclint-in-jdk-8-javadoc.html] @@ -72,10 +119,21 @@ object JavadocConfig { } /** - * Registers custom [tags] for the passed doclet options which in turn belong - * to some particular [Javadoc] task. + * Registers custom [tags] for the passed doclet options. */ fun registerCustomTags(docletOptions: StandardJavadocDocletOptions) { docletOptions.tags = tags.map { it.toString() } } + + /** + * Links the documentation for Java 11 Standard Library API. + * + * This documentation is used to be referenced to when navigating to the types from the + * standard library (`String`, `List`, etc.). + * + * OpenJDK SE 11 is used for the reference. + */ + private fun linkStandardLibraryAPI(docletOptions: StandardJavadocDocletOptions) { + docletOptions.addStringOption("link", standardLibraryAPI) + } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Publish.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Publish.kt index 9cd40c01..486d831c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Publish.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Publish.kt @@ -26,7 +26,7 @@ package io.spine.internal.gradle.javascript.task -import io.spine.internal.gradle.java.publish.publish +import io.spine.internal.gradle.publish.publish import io.spine.internal.gradle.named import io.spine.internal.gradle.register import io.spine.internal.gradle.TaskName diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt new file mode 100644 index 00000000..81acb3ae --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt @@ -0,0 +1,122 @@ +/* + * Copyright 2022, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.internal.gradle.publish + +import io.spine.internal.gradle.sourceSets +import org.gradle.api.Project +import org.gradle.api.file.FileTreeElement +import org.gradle.api.tasks.TaskContainer +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.bundling.Jar +import org.gradle.kotlin.dsl.get +import org.gradle.kotlin.dsl.named +import org.gradle.kotlin.dsl.register +import org.gradle.kotlin.dsl.withType + +/** + * Excludes Google `.proto` sources from all artifacts. + * + * Goes through all registered `Jar` tasks and filters out Google's files. + */ +@Suppress("unused") +fun TaskContainer.excludeGoogleProtoFromArtifacts() { + withType().configureEach { + exclude { it.isGoogleProtoSource() } + } +} + +/** + * Checks if the given file belongs to the Google `.proto` sources. + */ +private fun FileTreeElement.isGoogleProtoSource(): Boolean { + val pathSegments = relativePath.segments + return pathSegments.isNotEmpty() && pathSegments[0].equals("google") +} + +/** + * Locates or creates `sourcesJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains sources from `main` source set. + * The task makes sure that sources from the directories below will be included into + * a resulted archive: + * + * - Kotlin + * - Java + * - Proto + * + * Java and Kotlin sources are default to `main` source set since it is created by `java` plugin. + * For Proto sources to be included – [special treatment][protoSources] is needed. + */ +internal fun Project.sourcesJar() = tasks.getOrCreate("sourcesJar") { + archiveClassifier.set("sources") + from(sourceSets["main"].allSource) // Puts Java and Kotlin sources. + from(protoSources()) // Puts Proto sources. +} + +/** + * Locates or creates `protoJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains only + * [Proto sources][protoSources] from `main` source set. + */ +internal fun Project.protoJar() = tasks.getOrCreate("protoJar") { + archiveClassifier.set("proto") + from(protoSources()) +} + +/** + * Locates or creates `testJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains compilation output + * of `test` source set. + */ +internal fun Project.testJar() = tasks.getOrCreate("testJar") { + archiveClassifier.set("test") + from(sourceSets["test"].output) +} + +/** + * Locates or creates `javadocJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains Javadoc, + * generated upon Java sources from `main` source set. If javadoc for Kotlin is also needed, + * apply Dokka plugin. It tunes `javadoc` task to generate docs upon Kotlin sources as well. + */ +internal fun Project.javadocJar() = tasks.getOrCreate("javadocJar") { + archiveClassifier.set("javadoc") + from(files("$buildDir/docs/javadoc")) + dependsOn("javadoc") +} + +private fun TaskContainer.getOrCreate(name: String, init: Jar.() -> Unit): TaskProvider = + if (names.contains(name)) { + named(name) + } else { + register(name) { + init() + } + } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/CheckVersionIncrement.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt similarity index 98% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/CheckVersionIncrement.kt rename to buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt index 461671db..aa4da982 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/CheckVersionIncrement.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt @@ -24,10 +24,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package io.spine.internal.gradle +package io.spine.internal.gradle.publish import com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES import com.fasterxml.jackson.dataformat.xml.XmlMapper +import io.spine.internal.gradle.Repository import java.io.FileNotFoundException import java.net.URL import org.gradle.api.DefaultTask diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudRepo.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudRepo.kt new file mode 100644 index 00000000..48cd8585 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudRepo.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2022, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.internal.gradle.publish + +import io.spine.internal.gradle.Repository + +/** + * CloudRepo Maven repository. + * + * There is a special treatment for this repository. Usually, fetching and publishing of artifacts + * is performed via the same URL. But it is not true for CloudRepo. Fetching is performed via + * public repository, and publishing via private one. Their URLs differ in `/public` infix. + */ +internal object CloudRepo { + + private const val name = "CloudRepo" + private const val credentialsFile = "cloudrepo.properties" + private const val publicUrl = "https://spine.mycloudrepo.io/public/repositories" + private val privateUrl = publicUrl.replace("/public", "") + + /** + * CloudRepo repository for fetching of artifacts. + * + * Use this instance to depend on artifacts from this repository. + */ + val published = Repository( + name = name, + releases = "$publicUrl/releases", + snapshots = "$publicUrl/snapshots", + credentialsFile = credentialsFile + ) + + /** + * CloudRepo repository for publishing of artifacts. + * + * Use this instance to push new artifacts to this repository. + */ + val destination = Repository( + name = name, + releases = "$privateUrl/releases", + snapshots = "$privateUrl/snapshots", + credentialsFile = credentialsFile + ) +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/IncrementGuard.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt similarity index 96% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/IncrementGuard.kt rename to buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt index b9063a54..0423ee08 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/IncrementGuard.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt @@ -26,9 +26,8 @@ @file:Suppress("unused") -package io.spine.internal.gradle +package io.spine.internal.gradle.publish -import io.spine.internal.gradle.publish.PublishingRepos import org.gradle.api.Plugin import org.gradle.api.Project @@ -55,7 +54,7 @@ class IncrementGuard : Plugin { override fun apply(target: Project) { val tasks = target.tasks tasks.register(taskName, CheckVersionIncrement::class.java) { - repository = PublishingRepos.cloudRepo + repository = CloudRepo.published tasks.getByName("check").dependsOn(this) shouldRunAfter("test") diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt new file mode 100644 index 00000000..cb5fa2f0 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt @@ -0,0 +1,155 @@ +/* + * Copyright 2022, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.internal.gradle.publish + +import io.spine.internal.gradle.Repository +import io.spine.internal.gradle.isSnapshot +import org.gradle.api.Project +import org.gradle.api.artifacts.dsl.RepositoryHandler +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.bundling.Jar +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.get +import org.gradle.kotlin.dsl.getByType + +/** + * A publication for a typical Java project. + * + * In Gradle, in order to publish something somewhere one should create a publication. + * A publication has a name and consists of one or more artifacts plus information about + * those artifacts – the metadata. + * + * An instance of this class represents [MavenPublication] named "mavenJava". It is generally + * accepted that a publication with this name contains a Java project published to one or + * more Maven repositories. + * + * By default, only a jar with the compilation output of `main` source set and its + * metadata files are published. Other artifacts are specified through the + * [constructor parameter][jars]. Please, take a look on [specifyArtifacts] for additional info. + * + * See: [Maven Publish Plugin | Publications](https://docs.gradle.org/current/userguide/publishing_maven.html#publishing_maven:publications) + * + * @param artifactId a name that a project is known by. + * @param jars list of artifacts to be published along with the compilation output. + * @param destinations Maven repositories to which the produced artifacts will be sent. + */ +internal class MavenJavaPublication( + private val artifactId: String, + private val jars: Set>, + private val destinations: Set, +) { + + /** + * Registers this publication in the given project. + * + * The only prerequisite for the project is to have `maven-publish` plugin applied. + */ + fun registerIn(project: Project) { + createPublication(project) + registerDestinations(project) + } + + /** + * Creates a new "mavenJava" [MavenPublication] in the given project. + */ + private fun createPublication(project: Project) { + val gradlePublishing = project.extensions.getByType() + val gradlePublications = gradlePublishing.publications + gradlePublications.create("mavenJava") { + specifyMavenCoordinates(project) + specifyArtifacts(project) + } + } + + private fun MavenPublication.specifyMavenCoordinates(project: Project) { + groupId = project.group.toString() + artifactId = this@MavenJavaPublication.artifactId + version = project.version.toString() + } + + /** + * Specifies which artifacts this [MavenPublication] will contain. + * + * A typical Maven publication contains: + * + * 1. Jar archives. For example: compilation output, sources, javadoc, etc. + * 2. Maven metadata file that has ".pom" extension. + * 3. Gradle metadata file that has ".module" extension. + * + * Metadata files contain information about a publication itself, its artifacts and their + * dependencies. Presence of ".pom" file is mandatory for publication to be consumed by + * `mvn` build tool itself or other build tools that understand Maven notation (Gradle, Ivy). + * Presence of ".module" is optional, but useful when a publication is consumed by Gradle. + * + * See: [Maven – POM Reference](https://maven.apache.org/pom.html) + * [Understanding Gradle Module Metadata](https://docs.gradle.org/current/userguide/publishing_gradle_module_metadata.html) + */ + private fun MavenPublication.specifyArtifacts(project: Project) { + + // "java" component provides a jar with compilation output of "main" source set. + // It is NOT defined as another `Jar` task intentionally. Doing that will leave the + // publication without correct ".pom" and ".module" metadata files generated. + from(project.components["java"]) + + // Other artifacts are represented by `Jar` tasks. Those artifacts don't bring any other + // metadata in comparison with `Component` (such as dependencies notation). + jars.forEach { + artifact(it) + } + } + + /** + * Goes through the [destinations] and registers each as a repository for publishing + * in the given Gradle project. + */ + private fun registerDestinations(project: Project) { + val gradlePublishing = project.extensions.getByType() + val isSnapshot = project.version.toString().isSnapshot() + val gradleRepositories = gradlePublishing.repositories + destinations.forEach { destination -> + gradleRepositories.register(destination, isSnapshot, project) + } + } + + private fun RepositoryHandler.register( + repository: Repository, + isSnapshot: Boolean, + project: Project + ) { + val target = if (isSnapshot) repository.snapshots else repository.releases + val credentials = repository.credentials(project.rootProject) + maven { + url = project.uri(target) + credentials { + username = credentials?.username + password = credentials?.password + } + } + } +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProjectExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProjectExtensions.kt deleted file mode 100644 index 3b866617..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProjectExtensions.kt +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2022, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package io.spine.internal.gradle.publish - -import io.spine.internal.gradle.sourceSets -import org.gradle.api.InvalidUserDataException -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.file.FileCollection -import org.gradle.api.publish.PublishingExtension -import org.gradle.api.tasks.TaskContainer -import org.gradle.api.tasks.bundling.Jar -import org.gradle.kotlin.dsl.apply -import org.gradle.kotlin.dsl.create -import org.gradle.kotlin.dsl.get -import org.gradle.kotlin.dsl.getByType - -/** - * Configures the `spinePublishing` extension. - * - * As `Publish` is a class-plugin in `buildSrc`, we don't get strongly typed generated helper - * methods for the `spinePublishing` configuration. Thus, we provide this helper function for use - * in Kotlin build scripts. - */ -@Suppress("unused") -fun Project.spinePublishing(action: PublishExtension.() -> Unit) { - apply() - - val extension = extensions.getByType(PublishExtension::class) - extension.action() -} - -internal fun Project.applyMavenPublish( - extension: PublishExtension, - rootPublish: Task?, - checkCredentials: Task -) { - logger.debug("Applying `maven-publish` plugin to ${name}.") - - apply(plugin = "maven-publish") - - setUpDefaultArtifacts() - - val applyAction = { - val publishingExtension = extensions.getByType(PublishingExtension::class) - with(publishingExtension) { - val project = this@applyMavenPublish - createMavenPublication(project, extension) - setUpRepositories(project, extension) - } - - if (rootPublish != null) { - prepareTasks(rootPublish, checkCredentials) - } else { - tasks.getByPath(Publish.taskName).dependsOn(checkCredentials) - } - } - if (state.executed) { - applyAction() - } else { - afterEvaluate { applyAction() } - } -} - -internal fun Project.createPublishTask(): Task = - rootProject.tasks.create(Publish.taskName) - -internal fun Project.createCheckTask(extension: PublishExtension): Task { - val checkCredentials = tasks.create("checkCredentials") - checkCredentials.doLast { - extension.targetRepositories - .get() - .forEach { - it.credentials(this@createCheckTask) - ?: throw InvalidUserDataException( - "No valid credentials for repository `${it}`. Please make sure " + - "to pass username/password or a valid `.properties` file." - ) - } - } - return checkCredentials -} - -private fun Project.prepareTasks(publish: Task, checkCredentials: Task) { - val publishTasks = getTasksByName(Publish.taskName, false) - publish.dependsOn(publishTasks) - publishTasks.forEach { it.dependsOn(checkCredentials) } -} - -private fun Project.setUpDefaultArtifacts() { - val sourceJar = tasks.createIfAbsent( - artifactTask = ArtifactTaskName.sourceJar, - from = sourceSets["main"].allSource, - classifier = "sources" - ) - val testOutputJar = tasks.createIfAbsent( - artifactTask = ArtifactTaskName.testOutputJar, - from = sourceSets["test"].output, - classifier = "test" - ) - val javadocJar = tasks.createIfAbsent( - artifactTask = ArtifactTaskName.javadocJar, - from = files("$buildDir/docs/javadoc"), - classifier = "javadoc", - dependencies = setOf("javadoc") - ) - - artifacts { - val archives = ConfigurationName.archives - add(archives, sourceJar) - add(archives, testOutputJar) - add(archives, javadocJar) - } -} - -private fun TaskContainer.createIfAbsent( - artifactTask: ArtifactTaskName, - from: FileCollection, - classifier: String, - dependencies: Set = setOf() -): Task { - val existing = findByName(artifactTask.name) - if (existing != null) { - return existing - } - return create(artifactTask.name, Jar::class) { - this.from(from) - archiveClassifier.set(classifier) - dependencies.forEach { dependsOn(it) } - } -} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/publish/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt similarity index 64% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/java/publish/Tasks.kt rename to buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt index 73f3bd5a..b9ffb592 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/publish/Tasks.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt @@ -24,22 +24,28 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package io.spine.internal.gradle.java.publish - -import org.gradle.api.Task -import org.gradle.api.tasks.TaskContainer -import org.gradle.api.tasks.TaskProvider +package io.spine.internal.gradle.publish /** - * Locates `publish` task in this [TaskContainer]. + * A DSL element of [SpinePublishing] extension which allows disabling publishing + * of [protoJar] artifact. * - * This task publishes all defined publications to all defined repositories. To achieve that, - * the task depends on all `publish`*PubName*`PublicationTo`*RepoName*`Repository` tasks. + * This artifact contains all the `.proto` definitions from `sourceSets.main.proto`. By default, + * it is published. * - * Please note, task execution would not copy publications to the local Maven cache. + * Take a look on [SpinePublishing.protoJar] for a usage example. * - * @see - * Tasks | Maven Publish Plugin + * @see [registerArtifacts] */ -internal val TaskContainer.publish: TaskProvider - get() = named("publish") +class ProtoJar { + + /** + * Set of modules, for which a proto JAR will not be published. + */ + var exclusions: Set = emptySet() + + /** + * Disables proto JAR publishing for all published modules. + */ + var disabled = false +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/proto/AssembleProto.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt similarity index 58% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/proto/AssembleProto.kt rename to buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt index 28ad44b7..ef048f2b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/proto/AssembleProto.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt @@ -24,35 +24,32 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package io.spine.internal.gradle.publish.proto +package io.spine.internal.gradle.publish +import io.spine.internal.gradle.sourceSets +import java.io.File import org.gradle.api.Project -import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.bundling.Jar +import org.gradle.api.file.SourceDirectorySet +import org.gradle.kotlin.dsl.get + /** - * Registers an `assembleProto` Gradle task which locates and assembles all `.proto` files - * in a Gradle project. - * - * The result of assembly is a [Jar] task with an archive output classified as "proto". + * Tells whether there are any Proto sources in "main" source set. */ -object AssembleProto { - - private const val taskName = "assembleProto" +internal fun Project.hasProto(): Boolean { + val protoSources = protoSources() + val result = protoSources.any { it.exists() } + return result +} - /** - * Performs the task registration for the passed [project]. - */ - fun registerIn(project: Project): TaskProvider { - val task = project.tasks.register(taskName, Jar::class.java) { - description = - "Assembles a JAR artifact with all Proto definitions from the classpath." - from(project.protoFiles()) - include { - it.file.isProtoFileOrDir() - } - archiveClassifier.set("proto") - } - return task - } +/** + * Locates Proto sources in "main" source set. + * + * "main" source set is added by `java` plugin. Special treatment for Proto sources is needed, + * because they are not Java-related, and, thus, not included in `sourceSets["main"].allSource`. + */ +internal fun Project.protoSources(): Set { + val mainSourceSet = sourceSets["main"] + val protoSourceDirs = mainSourceSet.extensions.findByName("proto") as SourceDirectorySet? + return protoSourceDirs?.srcDirs ?: emptySet() } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Publish.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Publish.kt deleted file mode 100644 index b81a2099..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Publish.kt +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright 2022, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package io.spine.internal.gradle.publish - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.Task -import io.spine.internal.gradle.publish.proto.AssembleProto - -/** - * This plugin allows publishing artifacts to remote Maven repositories. - * - * The plugin can be used with single- and multi-module projects. - * - * When applied to a single-module project, the reference to the project is passed to the plugin: - * ``` - * import io.spine.gradle.internal.PublishingRepos - * import io.spine.gradle.internal.spinePublishing - * - * spinePublishing { - * publish(project) - * targetRepositories.addAll( - * PublishingRepos.cloudRepo, - * PublishingRepos.gitHub("LibraryName") - * ) - * } - * ``` - * When applied to a multi-module project, the plugin should be applied to the root project. - * The sub-projects to be published are specified by their names: - * ``` - * import io.spine.gradle.internal.PublishingRepos - * import io.spine.gradle.internal.spinePublishing - * - * spinePublishing { - * projectsToPublish.addAll( - * "submodule1", - * "submodule2", - * "nested:submodule3" - * ) - * targetRepositories.addAll( - * PublishingRepos.cloudRepo, - * PublishingRepos.gitHub("LibraryName") - * ) - * } - * ``` - * - * By default, we publish artifacts produced by tasks `sourceJar`, `testOutputJar`, - * and `javadocJar`, along with the default project compilation output. - * If any of these tasks is not declared, it's created with sensible default settings by the plugin. - * - * To publish the Protobuf files for some Gradle project — and include the `.proto` files from its - * transitive dependencies, which may be referenced, — the following configuration should be used: - * - * ``` - * import io.spine.internal.gradle.publish.Publish.Companion.publishProtoArtifact - * - * //... - * - * // Typically used with a sub-project, and NOT with a root project. - * publishProtoArtifact(project) - * ``` - * - * The resulting artifact is available under "proto" classifier. I.e., in Gradle 7, one could - * depend on it like this: - * - * ``` - * // Depend on the Proto files of `spine-client`. - * implementation("io.spine:spine-client:$version@proto") - * ``` - * - * To publish more artifacts for a certain project, add them to the `archives` configuration: - * ``` - * artifacts { - * archives(myCustomJarTask) - * } - * ``` - * - * If any plugins applied to the published project declare any other artifacts, those artifacts - * are published as well. - */ -class Publish : Plugin { - - companion object { - const val taskName = "publish" - - /** - * Enables the passed [project] to publish a JAR containing all the `.proto` definitions - * found in the project's classpath, which are the definitions from `sourceSets.main.proto` - * and the proto files extracted from the JAR dependencies of the project. - * - * The relative file paths are kept. - */ - @Suppress("unused") - fun publishProtoArtifact(project: Project) { - val task = AssembleProto.registerIn(project) - project.artifacts { - add("archives", task) - } - } - } - - override fun apply(project: Project) { - val extension = PublishExtension.createIn(project) - - project.afterEvaluate { - val soloMode = extension.singleProject() - val rootPublish: Task? = - if (soloMode) null - else project.createPublishTask() - val checkCredentials: Task = project.createCheckTask(extension) - - if (soloMode) { - project.applyMavenPublish(extension, null, checkCredentials) - } else { - extension.projectsToPublish - .get() - .map { project.project(it) } - .forEach { it.applyMavenPublish(extension, rootPublish, checkCredentials) } - } - } - } -} - diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishExtension.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishExtension.kt deleted file mode 100644 index 0cd3809f..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishExtension.kt +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2022, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package io.spine.internal.gradle.publish - -import io.spine.internal.gradle.Repository -import javax.inject.Inject -import org.gradle.api.Project -import org.gradle.api.provider.Property -import org.gradle.api.provider.SetProperty - -/** - * The extension for configuring the `Publish` plugin. - */ -abstract class PublishExtension @Inject constructor() { - - abstract val projectsToPublish: SetProperty - abstract val targetRepositories: SetProperty - abstract val spinePrefix: Property - - /** - * The project to be published _instead_ of [projectsToPublish]. - * - * If set, [projectsToPublish] will be ignored. - */ - private var soloProject: Project? = null - - internal companion object { - - /** The name of the extension as it appears in a Gradle project. */ - const val name = "spinePublishing" - - /** The prefix to be used before the project name if [spinePrefix] is set to `true`. */ - const val artifactPrefix = "spine-" - - /** - * Creates a new instance of the extension and adds it to the given project. - */ - fun createIn(project: Project): PublishExtension { - val extension = project.extensions.create(name, PublishExtension::class.java) - extension.spinePrefix.convention(true) - return extension - } - } - - /** - * Obtains an artifact ID of the given project, taking into account the value of - * the [spinePrefix] property. If the property is set to `true`, [artifactPrefix] will - * be used before the project name. Otherwise, just the name of the project will be - * used as the artifact ID. - */ - fun artifactId(project: Project): String = - if (spinePrefix.get()) { - "$artifactPrefix${project.name}" - } else { - project.name - } - - /** - * Instructs to publish the passed project _instead_ of [projectsToPublish]. - * - * @see projectsToPublish - */ - fun publish(project: Project) { - soloProject = project - } - - /** - * Returns `true` if the extension is configured to publish only one project. - * `false`, otherwise. - * - * @see publish - * @see projectsToPublish - */ - fun singleProject(): Boolean = soloProject != null -} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt new file mode 100644 index 00000000..d1e355d8 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt @@ -0,0 +1,117 @@ +/* + * Copyright 2022, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.internal.gradle.publish + +import io.spine.internal.gradle.Repository +import org.gradle.api.Project +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.bundling.Jar +import org.gradle.kotlin.dsl.apply + +/** + * Information, required to set up publishing of a project using `maven-publish` plugin. + * + * @param artifactId a name that a project is known by. + * @param destinations set of repositories, to which the resulting artifacts will be sent. + * @param includeProtoJar tells whether [protoJar] artifact should be published. + * @param includeTestJar tells whether [testJar] artifact should be published. + */ +internal class PublishingConfig( + val artifactId: String, + val destinations: Set, + val includeProtoJar: Boolean = true, + val includeTestJar: Boolean = false, +) + +/** + * Applies this configuration to the given project. + * + * This method does the following: + * + * 1. Applies `maven-publish` plugin to the project. + * 2. Registers [MavenJavaPublication] in Gradle's [PublicationContainer][org.gradle.api.publish.PublicationContainer]. + * 4. Configures "publish" task. + * + * The actual list of resulted artifacts is determined by [registerArtifacts]. + */ +internal fun PublishingConfig.apply(project: Project) = with(project) { + apply(plugin = "maven-publish") + createPublication(project) + configurePublishTask(destinations) +} + +private fun PublishingConfig.createPublication(project: Project) { + val artifacts = project.registerArtifacts(includeProtoJar, includeTestJar) + val publication = MavenJavaPublication( + artifactId = artifactId, + jars = artifacts, + destinations = destinations + ) + publication.registerIn(project) +} + +/** + * Registers [Jar] tasks, output of which is used as Maven artifacts. + * + * By default, only a jar with java compilation output is included into publication. This method + * registers tasks which produce additional artifacts. + * + * The list of additional artifacts to be registered: + * + * 1. [sourcesJar] – Java, Kotlin and Proto source files. + * 2. [protoJar] – only Proto source files. + * 3. [javadocJar] – documentation, generated upon Java files. + * 4. [testJar] – compilation output of "test" source set. + * + * Registration of [protoJar] and [testJar] is optional. It can be controlled by the method's + * parameters. + * + * @return the list of the registered tasks. + */ +private fun Project.registerArtifacts( + includeProtoJar: Boolean = true, + includeTestJar: Boolean = false +): Set> { + + val artifacts = mutableSetOf( + sourcesJar(), + javadocJar(), + ) + + // We don't want to have an empty "proto.jar" when a project doesn't have any Proto files. + if (hasProto() && includeProtoJar) { + artifacts.add(protoJar()) + } + + // Here, we don't have the corresponding `hasTests()` check, since this artifact is disabled + // by default. And turning it on means "We have tests and need them to be published." + if (includeTestJar) { + artifacts.add(testJar()) + } + + return artifacts +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExtensions.kt deleted file mode 100644 index bc22c830..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExtensions.kt +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2022, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package io.spine.internal.gradle.publish - -import io.spine.internal.gradle.Repository -import org.gradle.api.Project -import org.gradle.api.artifacts.PublishArtifact -import org.gradle.api.artifacts.PublishArtifactSet -import org.gradle.api.artifacts.repositories.MavenArtifactRepository -import org.gradle.api.publish.PublishingExtension -import org.gradle.api.publish.maven.MavenPublication - -/** - * Creates a `MavenPublication` in the given project, taking custom parameters from - * given `PublishExtension`. - */ -internal fun PublishingExtension.createMavenPublication( - project: Project, - extension: PublishExtension -) { - val artifactIdForPublishing = extension.artifactId(project) - publications { - create("mavenJava", MavenPublication::class.java) { - groupId = project.group.toString() - artifactId = artifactIdForPublishing - version = project.version.toString() - - from(project.components.getAt("java")) - - val archivesConfig = project.configurations.getAt(ConfigurationName.archives) - val allArtifacts = archivesConfig.allArtifacts - val deduplicated = allArtifacts.deduplicate() - setArtifacts(deduplicated) - } - } -} - -/** - * Obtains an [Iterable] containing artifacts that have the same `extension` and `classifier`. - * - * Such a situation may occur when applying both `com.gradle.plugin-publish` plugin AND - * `spinePublishing` in the same project. `com.gradle.plugin-publish` adds `sources` and `javadoc` - * artifacts, and we do it too in [Project.setUpDefaultArtifacts]. - * - * At the time when we add artifacts in [Project.setUpDefaultArtifacts], those added by - * `com.gradle.plugin-publish` are not yet visible to our code. Hence, we have to perform - * the deduplication before we set the artifacts in [PublishingExtension.createMavenPublication]. - */ -private fun PublishArtifactSet.deduplicate(): Iterable { - val deduplicated = mutableSetOf() - for (artifact in this) { - deduplicated.stream() - .filter { - artifact.extension == it.extension && artifact.classifier == it.classifier - }.findFirst() - .ifPresent(deduplicated::remove) - deduplicated.add(artifact) - } - return deduplicated -} - -internal fun PublishingExtension.setUpRepositories( - project: Project, - extension: PublishExtension -) { - val snapshots = project.version - .toString() - .matches(Regex(".+[-.]SNAPSHOT([+.]\\d+)?")) - repositories { - extension.targetRepositories.get().forEach { repo -> - maven { - initialize(repo, project, snapshots) - } - } - } -} - -private fun MavenArtifactRepository.initialize( - repo: Repository, - project: Project, - snapshots: Boolean -) { - val publicRepo = if (snapshots) { - repo.snapshots - } else { - repo.releases - } - // Special treatment for CloudRepo URL. - // Reading is performed via public repositories, and publishing via - // private ones that differ in the `/public` infix. - url = project.uri(publicRepo.replace("/public", "")) - val creds = repo.credentials(project.rootProject) - credentials { - username = creds?.username - password = creds?.password - } -} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt index d64b722c..5abdc10f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt @@ -41,12 +41,7 @@ object PublishingRepos { credentialsFile = "credentials.properties" ) - val cloudRepo = Repository( - name = "CloudRepo", - releases = "https://spine.mycloudrepo.io/public/repositories/releases", - snapshots = "https://spine.mycloudrepo.io/public/repositories/snapshots", - credentialsFile = "cloudrepo.properties" - ) + val cloudRepo = CloudRepo.destination val cloudArtifactRegistry = CloudArtifactRegistry.repository @@ -55,4 +50,3 @@ object PublishingRepos { */ fun gitHub(repoName: String): Repository = GitHubPackages.repository(repoName) } - diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt new file mode 100644 index 00000000..2aaa646f --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt @@ -0,0 +1,379 @@ +/* + * Copyright 2022, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.internal.gradle.publish + +import io.spine.internal.gradle.Repository +import org.gradle.api.Project +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.findByType + +/** + * Configures [SpinePublishing] extension. + * + * This extension sets up publishing of artifacts to Maven repositories. + * + * The extension can be configured for single- and multi-module projects. + * + * When used with a multi-module project, the extension should be opened in a root project's + * build file. The published modules are specified explicitly by their names: + * + * ``` + * spinePublishing { + * modules = setOf( + * "subprojectA", + * "subprojectB", + * ) + * destinations = setOf( + * PublishingRepos.cloudRepo, + * PublishingRepos.cloudArtifactRegistry, + * ) + * } + * ``` + * + * When used with a single-module project, the extension should be opened in a project's build file. + * Only destinations should be specified: + * + * ``` + * spinePublishing { + * destinations = setOf( + * PublishingRepos.cloudRepo, + * PublishingRepos.cloudArtifactRegistry, + * ) + * } + * ``` + * + * It is worth to mention, that publishing of a module can be configured only from a single place. + * For example, declaring `subprojectA` as published in a root project and opening + * `spinePublishing` extension within `subprojectA` itself would lead to an exception. + * + * In Gradle, in order to publish something somewhere one should create a publication. In each + * of published modules, the extension will create a [publication][MavenJavaPublication] + * named "mavenJava". All artifacts, published by this extension belong to this publication. + * + * By default, along with the compilation output of "main" source set, the extension publishes + * the following artifacts: + * + * 1. [sourcesJar] – sources from "main" source set. Includes "hand-made" Java, + * Kotlin and Proto files. In order to include the generated code into this artifact, a module + * should specify those files as a part of "main" source set. + * + * Here's an example of how to do that: + * + * ``` + * sourceSets { + * val generatedDir by extra("$projectDir/generated") + * val generatedSpineDir by extra("$generatedDir/main/java") + * main { + * java.srcDir(generatedSpineDir) + * } + * } + * ``` + * 2. [protoJar] – only Proto sources from "main" source set. It's published only if + * Proto files are actually present in the source set. Publication of this artifact is optional + * and can be disabled via [SpinePublishing.protoJar]. + * 3. [javadocJar] - javadoc, generated upon Java sources from "main" source set. + * If javadoc for Kotlin is also needed, apply Dokka plugin. It tunes `javadoc` task to generate + * docs upon Kotlin sources as well. + * + * Additionally, [testJar] artifact can be published. This artifact contains compilation output + * of "test" source set. Use [SpinePublishing.testJar] to enable its publishing. + * + * @see [registerArtifacts] + */ +fun Project.spinePublishing(configuration: SpinePublishing.() -> Unit) { + val name = SpinePublishing::class.java.simpleName + val extension = with(extensions) { findByType() ?: create(name, project) } + extension.run { + configuration() + configured() + } +} + +/** + * A Gradle extension for setting up publishing of spine modules using `maven-publish` plugin. + * + * @param project a project in which the extension is opened. By default, this project will be + * published as long as a [set][modules] of modules to publish is not specified explicitly. + * + * @see spinePublishing + */ +open class SpinePublishing(private val project: Project) { + + private val protoJar = ProtoJar() + private val testJar = TestJar() + + /** + * Set of modules to be published. + * + * Both module's name or path can be used. + * + * Use this property if the extension is configured from a root project's build file. + * + * If left empty, the [project], in which the extension is opened, will be published. + * + * Empty by default. + */ + var modules: Set = emptySet() + + /** + * Set of repositories, to which the resulting artifacts will be sent. + * + * Usually, Spine-related projects are published to one or more repositories, + * declared in [PublishingRepos]: + * + * ``` + * destinations = setOf( + * PublishingRepos.cloudRepo, + * PublishingRepos.cloudArtifactRegistry, + * PublishingRepos.gitHub("base"), + * ) + * ``` + * + * Empty by default. + */ + var destinations: Set = emptySet() + + /** + * A prefix to be added before the name of each artifact. + * + * Default value is "spine-". + */ + var artifactPrefix: String = "spine-" + + /** + * Allows disabling publishing of [protoJar] artifact, containing all Proto sources + * from `sourceSets.main.proto`. + * + * Here's an example of how to disable it for some of published modules: + * + * ``` + * spinePublishing { + * modules = setOf( + * "subprojectA", + * "subprojectB", + * ) + * protoJar { + * exclusions = setOf( + * "subprojectB", + * ) + * } + * } + * ``` + * + * For all modules, or when the extension is configured within a published module itself: + * + * ``` + * spinePublishing { + * protoJar { + * disabled = true + * } + * } + * ``` + * + * The resulting artifact is available under "proto" classifier. I.e., in Gradle 7+, one could + * depend on it like this: + * + * ``` + * implementation("io.spine:spine-client:$version@proto") + * ``` + */ + fun protoJar(configuration: ProtoJar.() -> Unit) = protoJar.run(configuration) + + /** + * Allows enabling publishing of [testJar] artifact, containing compilation output + * of "test" source set. + * + * Here's an example of how to enable it for some of published modules: + * + * ``` + * spinePublishing { + * modules = setOf( + * "subprojectA", + * "subprojectB", + * ) + * testJar { + * inclusions = setOf( + * "subprojectB", + * ) + * } + * } + * ``` + * + * For all modules, or when the extension is configured within a published module itself: + * + * ``` + * spinePublishing { + * testJar { + * enabled = true + * } + * } + * ``` + * + * The resulting artifact is available under "test" classifier. I.e., in Gradle 7+, one could + * depend on it like this: + * + * ``` + * implementation("io.spine:spine-client:$version@test") + * ``` + */ + fun testJar(configuration: TestJar.() -> Unit) = testJar.run(configuration) + + /** + * Called to notify the extension that its configuration is completed. + * + * On this stage the extension will validate the received configuration and set up + * `maven-publish` plugin for each published module. + */ + internal fun configured() { + + ensureProtoJarExclusionsArePublished() + ensureTestJarInclusionsArePublished() + ensuresModulesNotDuplicated() + + val protoJarExclusions = protoJar.exclusions + val testJarInclusions = testJar.inclusions + val publishedProjects = publishedProjects() + + publishedProjects.forEach { project -> + val name = project.name + val includeProtoJar = (protoJarExclusions.contains(name) || protoJar.disabled).not() + val includeTestJar = (testJarInclusions.contains(name) || testJar.enabled) + setUpPublishing(project, includeProtoJar, includeTestJar) + } + } + + /** + * Maps the names of published modules to [Project] instances. + * + * The method considers two options: + * + * 1. The [set][modules] of subprojects to publish is not empty. It means that the extension + * is opened from a root project. + * 2. The [set][modules] is empty. Then, the [project] in which the extension is opened + * will be published. + * + * @see modules + */ + private fun publishedProjects() = modules.map { name -> project.project(name) } + .ifEmpty { setOf(project) } + + /** + * Sets up `maven-publish` plugin for the given project. + * + * Firstly, an instance of [PublishingConfig] is assembled for the project. Then, this + * config is applied. + * + * This method utilizes `project.afterEvaluate` closure. General rule of thumb is to avoid using + * of this closure, as it configures a project when its configuration is considered completed. + * Which is quite counter-intuitive. + * + * The root cause why it is used here is a possibility to configure publishing of multiple + * modules from a root project. When this possibility is employed, in fact, we configure + * publishing for a module, build file of which has not been even evaluated by that time. + * That leads to an unexpected behavior. + * + * The simplest example here is specifying of `version` and `group` for Maven coordinates. + * Let's suppose, they are declared in a module's build file. It is a common practice. + * But publishing of the module is configured from a root project's build file. By the time, + * when we need to specify them, we just don't know them. As a result, we have to use + * `project.afterEvaluate` in order to guarantee that a module will be configured by the time + * we configure publishing for it. + */ + private fun setUpPublishing(project: Project, includeProtoJar: Boolean, includeTestJar: Boolean) { + val artifactId = artifactId(project) + val publishingConfig = PublishingConfig( + artifactId, + destinations, + includeProtoJar, + includeTestJar, + ) + project.afterEvaluate { + publishingConfig.apply(project) + } + } + + /** + * Obtains an artifact ID for the given project. + * + * It consists of a project's name and [prefix][artifactPrefix]: + * ``. + */ + internal fun artifactId(project: Project): String = "$artifactPrefix${project.name}" + + /** + * Ensures that all modules, marked as excluded from [protoJar] publishing, + * are actually published. + * + * It makes no sense to tell a module don't publish [protoJar] artifact, if the module is not + * published at all. + */ + private fun ensureProtoJarExclusionsArePublished() { + val nonPublishedExclusions = protoJar.exclusions.minus(modules) + if (nonPublishedExclusions.isNotEmpty()) { + throw IllegalStateException("One or more modules are marked as `excluded from proto " + + "JAR publication`, but they are not even published: $nonPublishedExclusions") + } + } + + /** + * Ensures that all modules, marked as included into [testJar] publishing, + * are actually published. + * + * It makes no sense to tell a module publish [testJar] artifact, if the module is not + * published at all. + */ + private fun ensureTestJarInclusionsArePublished() { + val nonPublishedInclusions = testJar.inclusions.minus(modules) + if (nonPublishedInclusions.isNotEmpty()) { + throw IllegalStateException("One or more modules are marked as `included into test " + + "JAR publication`, but they are not even published: $nonPublishedInclusions") + } + } + + /** + * Ensures that publishing of a module is configured only from a single place. + * + * We allow configuration of publishing from two places - a root project and module itself. + * Here we verify that publishing of a module is not configured in both places simultaneously. + */ + private fun ensuresModulesNotDuplicated() { + val rootProject = project.rootProject + if (rootProject == project) { + return + } + + val rootExtension = with(rootProject.extensions) { findByType() } + rootExtension?.let { rootPublishing -> + val thisProject = setOf(project.name, project.path) + if (thisProject.minus(rootPublishing.modules).size != 2) { + throw IllegalStateException("Publishing of `$thisProject` module is already " + + "configured in a root project!") + } + } + } +} + diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt new file mode 100644 index 00000000..b132638c --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt @@ -0,0 +1,110 @@ +/* + * Copyright 2022, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.internal.gradle.publish + +import io.spine.internal.gradle.Repository +import java.util.* +import org.gradle.api.InvalidUserDataException +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.tasks.TaskContainer +import org.gradle.api.tasks.TaskProvider + +private const val PUBLISH = "publish" + +/** + * Locates `publish` task in this [TaskContainer]. + * + * This task publishes all defined publications to all defined repositories. To achieve that, + * the task depends on all `publish`*PubName*`PublicationTo`*RepoName*`Repository` tasks. + * + * Please note, task execution would not copy publications to the local Maven cache. + * + * @see + * Tasks | Maven Publish Plugin + */ +internal val TaskContainer.publish: TaskProvider + get() = named(PUBLISH) + +/** + * Sets dependencies for `publish` task in this [Project]. + * + * This method performs the following: + * + * 1. When this [Project] is not a root, makes `publish` task in a root project + * depend on a local `publish`. + * 2. Makes local `publish` task verify that credentials are present for each + * of destination repositories. + */ +internal fun Project.configurePublishTask(destinations: Set) { + attachCredentialsVerification(destinations) + bindToRootPublish() +} + +private fun Project.attachCredentialsVerification(destinations: Set) { + val checkCredentials = tasks.registerCheckCredentialsTask(destinations) + val localPublish = tasks.publish + localPublish.configure { dependsOn(checkCredentials) } +} + +private fun Project.bindToRootPublish() { + if (project == rootProject) { + return + } + + val localPublish = tasks.publish + val rootPublish = rootProject.tasks.getOrCreatePublishTask() + rootPublish.configure { dependsOn(localPublish) } +} + +/** + * Use this task accessor when it is not guaranteed that the task is present + * in this [TaskContainer]. + */ +private fun TaskContainer.getOrCreatePublishTask() = + if (names.contains(PUBLISH)) { + named(PUBLISH) + } else { + register(PUBLISH) + } + +private fun TaskContainer.registerCheckCredentialsTask(destinations: Set) = + register("checkCredentials") { + doLast { + destinations.forEach { it.ensureCredentials(project) } + } + } + +private fun Repository.ensureCredentials(project: Project) { + val credentials = credentials(project) + if (Objects.isNull(credentials)) { + throw InvalidUserDataException( + "No valid credentials for repository `${this}`. Please make sure " + + "to pass username/password or a valid `.properties` file." + ) + } +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt new file mode 100644 index 00000000..97233992 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2022, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.internal.gradle.publish + +/** + * A DSL element of [SpinePublishing] extension which allows enabling publishing + * of [testJar] artifact. + * + * This artifact contains compilation output of `test` source set. By default, it is not published. + * + * Take a look on [SpinePublishing.testJar] for a usage example. + + * @see [registerArtifacts] + */ +class TestJar { + + /** + * Set of modules, for which a test JAR will be published. + */ + var inclusions: Set = emptySet() + + /** + * Enables test JAR publishing for all published modules. + */ + var enabled = false +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/proto/ProtoLocators.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/proto/ProtoLocators.kt deleted file mode 100644 index dd04e810..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/proto/ProtoLocators.kt +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2022, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package io.spine.internal.gradle.publish.proto - -import io.spine.internal.gradle.sourceSets -import java.io.File -import java.util.* -import org.gradle.api.GradleException -import org.gradle.api.Project -import org.gradle.api.file.SourceDirectorySet - -/** - * Extensions assisting in locating `.proto` files and directories in a Gradle `Project`. - */ - -/** - * Collects all the directories from this project and its dependencies (including zip tree - * directories) which contain `.proto` definitions. - * - * The directories may in practice include files of other extension. The caller should take care - * of handling those files respectively. - * - * It's guaranteed that there are no other Proto definitions in the current project classpath - * except those included into the returned `Collection`. - */ -internal fun Project.protoFiles(): Collection { - val files = this.configurations.findByName("runtimeClasspath")!!.files - val jarFiles = files.map { JarFileName(it.name) } - val result = mutableListOf() - files.filter { it.name.endsWith(".jar") }.forEach { file -> - val tree = zipTree(file) - try { - tree.filter { it.isProto() }.forEach { - val protoRoot = it.rootFolderIn(jarFiles) - result.add(protoRoot) - } - } catch (e: GradleException) { - /* - * This code may be executed at the `configuration` phase of a Gradle project. - * If that's a very first configuration attempt (for instance, a newly created library - * version of the framework is being built), this exception is very likely to be - * thrown. It is so, as we don't have any dependencies fetched yet. - * - * However, we want the `configuration` phase to complete successfully. Therefore, - * here we suppress the `GradleException` throw by `zipTree()`. We believe that - * down the road, in the following stages of build execution the dependencies will - * be fetched, so that `zipTree()` won't fail anymore. - * - * As a side effect, the message is shown upon `./gradlew clean build` or upon - * a newly created version of framework build etc. - * - * However, if this exception is thrown on the execution phase (very much after - * the initial configuration is completed), this IS an error. - * Thus, we log an error message. Framework users should pay attention - * to the circumstances under which this message is logged. - */ - this@protoFiles.logger.debug( - "${e.message}${System.lineSeparator()}" + - "The proto artifact may be corrupted." - ) - } - } - val mainSourceSet = this.sourceSets.findByName("main")!! - val protoSourceDirs = mainSourceSet.extensions.getByName("proto") as SourceDirectorySet - result.addAll(protoSourceDirs.srcDirs) - return result -} - -/** - * Tells whether this file represents either a `.proto` file, or a directory containing Proto files. - * - * If this file is a directory, scans its children recursively. - * - * @return `true` if the this [is a Protobuf file][isProto], or - * a directory containing at least one Protobuf file, - * `false` otherwise - */ -internal fun File.isProtoFileOrDir(): Boolean { - val filesToCheck = LinkedList() - filesToCheck.push(this) - if (this.isDirectory && this.list()?.isEmpty() == true) { - return false - } - while (!filesToCheck.isEmpty()) { - val file = filesToCheck.pop() - if (file.isProto()) { - return true - } - if (file.isDirectory) { - file.listFiles()?.forEach { filesToCheck.push(it) } - } - } - return false -} - -/** - * Tells whether this file is a `.proto` file. - */ -private fun File.isProto(): Boolean { - return this.isFile && this.name.endsWith(".proto") -} - -/** - * Assuming this file is a part of examined JAR dependencies, returns the root folder - * to which this file belongs. - * - * In particular, this may be used to find the Proto root folder for a given `.proto` file, - * which originally was packed into one of Gradle project's dependencies. - */ -private fun File.rootFolderIn(archiveContents: Collection): File { - var pkg = this - while (!archiveContents.contains(pkg.parentFile.jarName())) { - pkg = pkg.parentFile - } - return pkg.parentFile -} - -/** - * Retrieves the name of the `.jar` to which this file belongs, when examining the file through - * Gradle's `zipTree()` API. - * - * The `.jar` suffix is included into the resulting value. - * - * If there is no `.jar` substring in the name of this file, returns `null`. - */ -private fun File.jarName(): JarFileName? { - val unpackedJarInfix = ".jar" - val name = this.name - val index = name.lastIndexOf(unpackedJarInfix) - return if (index < 0) { - null - } else { - JarFileName(name.substring(0, index + unpackedJarInfix.length)) - } -} - -/** - * The filename of a JAR dependency of the project. - */ -private data class JarFileName(val name: String) diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Artifacts.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt similarity index 51% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Artifacts.kt rename to buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt index 3038dc74..25ccac94 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Artifacts.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt @@ -27,45 +27,51 @@ package io.spine.internal.gradle.testing import org.gradle.api.Project -import org.gradle.api.plugins.JavaPluginExtension -import org.gradle.api.tasks.bundling.Jar -import org.gradle.kotlin.dsl.getByType -import org.gradle.kotlin.dsl.register +import io.spine.internal.gradle.publish.testJar /** - * Exposes the test classes of this project as a new `testArtifacts` configuration. + * Exposes the test classes of this project as a new "testArtifacts" configuration. * - * This allows other Gradle projects to depend on the test classes of some project. It is helpful - * in case the dependant projects re-use abstract test suites of some "parent" project. + * This allows other projects to depend on the test classes from this project within a Gradle + * multi-project build. It is helpful in case the dependant projects re-use abstract test suites + * of some "parent" project. * - * Please note that this utility requires Gradle `java` plugin to be applied. - * Hence, it is recommended to call this extension method from `java` scope: + * Please note that this utility requires Gradle `java` plugin to be applied. Hence, it is + * recommended to call this extension method from `java` scope. + * + * Here's an example of how to expose the test classes of "projectA": * * ``` * java { - * exposeTestArtifacts() + * exposeTestConfiguration() * } * ``` * - * Here is a snippet which consumes the exposed test classes: + * Here's an example of how to consume the exposed classes in "projectB": * * ``` * dependencies { - * testImplementation(project(path = ":projectName", configuration = "testArtifacts")) + * testImplementation(project(path = ":projectA", configuration = "testArtifacts")) * } * ``` + * + * Don't forget that this exposure mechanism works only for projects that reside within the same + * multi-project build. In order to share the test classes with external projects, publish a + * dedicated [testJar][io.spine.internal.gradle.publish.SpinePublishing.testJar] artifact. */ -fun Project.exposeTestArtifacts() { +@Suppress("unused") +fun Project.exposeTestConfiguration() { - val testArtifacts = configurations.create("testArtifacts") { - extendsFrom(configurations.getAt("testRuntimeClasspath")) + if (pluginManager.hasPlugin("java").not()) { + throw IllegalStateException( + "Can't expose the test configuration because `java` plugin has not been applied." + ) } - val sourceSets = extensions.getByType().sourceSets - val testJar = tasks.register("testJar") { - archiveClassifier.set("test") - from(sourceSets.getAt("test").output) + configurations.create("testArtifacts") { + extendsFrom(configurations.getByName("testRuntimeClasspath")) + outgoing { + artifact(testJar()) + } } - - artifacts.add(testArtifacts.name, testJar) } diff --git a/buildSrc/src/main/kotlin/pmd-settings.gradle.kts b/buildSrc/src/main/kotlin/pmd-settings.gradle.kts index 234b5b59..03e69a67 100644 --- a/buildSrc/src/main/kotlin/pmd-settings.gradle.kts +++ b/buildSrc/src/main/kotlin/pmd-settings.gradle.kts @@ -41,11 +41,9 @@ pmd { // Disable the default rule set to use the custom rules (see below). ruleSets = listOf() - // Load PMD settings from a file in `buildSrc/resources/`. - val classLoader = Pmd.javaClass.classLoader - val settingsResource = classLoader.getResource("pmd.xml")!! - val pmdSettings: String = settingsResource.readText() - val textResource: TextResource = resources.text.fromString(pmdSettings) + // Load PMD settings. + val pmdSettings = file("$rootDir/config/quality/pmd.xml") + val textResource: TextResource = resources.text.fromFile(pmdSettings) ruleSetConfig = textResource reportsDir = file("build/reports/pmd") diff --git a/config b/config index 4743560b..5a9e4272 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit 4743560b0b678f6f9b0e9a4daddb99a0b4b4b844 +Subproject commit 5a9e4272cf45d4fc2d102bf2e95bfc6d30b27636 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e6e5897..aa991fce 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 5ffb7d64e74f6d93b82a2553a7bc82584ade2478 Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Fri, 8 Apr 2022 19:17:19 +0300 Subject: [PATCH 02/10] Adjust build files --- build.gradle.kts | 20 ++++++++++---------- datastore/build.gradle.kts | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7ed15359..d5622ec0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ import io.spine.internal.dependency.GoogleApis import io.spine.internal.dependency.Grpc import io.spine.internal.dependency.JUnit import io.spine.internal.dependency.PerfMark -import io.spine.internal.gradle.JavadocConfig +import io.spine.internal.gradle.javadoc.JavadocConfig import io.spine.internal.gradle.applyStandard import io.spine.internal.gradle.checkstyle.CheckStyleConfig import io.spine.internal.gradle.excludeProtobufLite @@ -92,19 +92,19 @@ plugins { } spinePublishing { - with(PublishingRepos) { - targetRepositories.addAll( - cloudRepo, - cloudArtifactRegistry, - gitHub("gcloud-java") - ) - } - projectsToPublish.addAll( + modules = setOf( "datastore", "stackdriver-trace", "testutil-gcloud", - "pubsub" + "pubsub", ) + destinations = with(PublishingRepos) { + setOf( + cloudRepo, + cloudArtifactRegistry, + gitHub("gcloud-java"), + ) + } } val spineBaseVersion: String by extra diff --git a/datastore/build.gradle.kts b/datastore/build.gradle.kts index ff1b4d1e..57dfde0a 100644 --- a/datastore/build.gradle.kts +++ b/datastore/build.gradle.kts @@ -25,7 +25,7 @@ */ import io.spine.internal.dependency.GoogleCloud -import io.spine.internal.gradle.IncrementGuard +import io.spine.internal.gradle.publish.IncrementGuard import io.spine.tools.gradle.exec.ExecFork plugins { From 6e99680ad595b49f2f2a3002ad3f6db8e578327e Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Fri, 8 Apr 2022 20:06:57 +0300 Subject: [PATCH 03/10] Bump dependencies --- build.gradle.kts | 2 +- .../kotlin/io/spine/internal/dependency/ErrorProne.kt | 2 +- version.gradle.kts | 9 +++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d5622ec0..ad67df9a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,7 +74,7 @@ buildscript { resolutionStrategy { force( Kotlin.stdLib, - Kotlin.stdLibCommon + Kotlin.stdLibCommon, ) } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt index ab326153..ca73fedc 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt @@ -30,7 +30,7 @@ package io.spine.internal.dependency @Suppress("unused") object ErrorProne { // https://github.com/google/error-prone - private const val version = "2.11.0" + private const val version = "2.10.0" // https://github.com/tbroyer/gradle-errorprone-plugin/blob/v0.8/build.gradle.kts private const val javacPluginVersion = "9+181-r4173-1" diff --git a/version.gradle.kts b/version.gradle.kts index 4aa0a998..5f48ddd9 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -24,8 +24,9 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -val spineBaseVersion: String by extra("2.0.0-SNAPSHOT.75") -val spineBaseTypesVersion: String by extra("2.0.0-SNAPSHOT.75") -val spineCoreVersion: String by extra("2.0.0-SNAPSHOT.89") -val mcJavaVersion: String by extra("2.0.0-SNAPSHOT.76") +val spineBaseVersion: String by extra("2.0.0-SNAPSHOT.88") +val spineBaseTypesVersion: String by extra("2.0.0-SNAPSHOT.88") +val spineCoreVersion: String by extra("2.0.0-SNAPSHOT.94") +val mcJavaVersion: String by extra("2.0.0-SNAPSHOT.83") + val versionToPublish: String by extra("2.0.0-SNAPSHOT.66") From 7c7c1bca9bb7ba950c490b52092a4fe1d1393538 Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Fri, 8 Apr 2022 20:07:10 +0300 Subject: [PATCH 04/10] Group include declarations --- settings.gradle.kts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 27a3a4e9..a2f6d673 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -26,7 +26,9 @@ rootProject.name = "spine-gcloud-java" -include("datastore") -include("stackdriver-trace") -include("testutil-gcloud") -include("pubsub") +include( + "datastore", + "stackdriver-trace", + "testutil-gcloud", + "pubsub", +) From 51613a783bd93abb5252e41cb0d470120fb6884b Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Mon, 11 Apr 2022 13:02:00 +0300 Subject: [PATCH 05/10] Slightly refactor root's build file --- build.gradle.kts | 115 ++++++++++++----------------- datastore/build.gradle.kts | 1 - pubsub/build.gradle.kts | 1 - stackdriver-trace/build.gradle.kts | 1 - testutil-gcloud/build.gradle.kts | 1 - 5 files changed, 47 insertions(+), 72 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index ad67df9a..212d583c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -50,7 +50,6 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @Suppress("RemoveRedundantQualifierName") // Cannot use imported things here. buildscript { - apply(from = "$rootDir/version.gradle.kts") io.spine.internal.gradle.doApplyStandard(repositories) val execForkPlugin = io.spine.internal.dependency.ExecForkPlugin @@ -59,6 +58,7 @@ buildscript { repos.gitHub(execForkPlugin.repository) } + apply(from = "$rootDir/version.gradle.kts") val mcJavaVersion: String by extra dependencies { @@ -80,15 +80,14 @@ buildscript { } } -repositories.applyStandard() - plugins { `java-library` kotlin("jvm") idea - io.spine.internal.dependency.Protobuf.GradlePlugin.apply { id(id) } + @Suppress("RemoveRedundantQualifierName") - io.spine.internal.dependency.ErrorProne.GradlePlugin.apply { id(id) } + id(io.spine.internal.dependency.ErrorProne.GradlePlugin.id) + id(io.spine.internal.dependency.Protobuf.GradlePlugin.id) } spinePublishing { @@ -119,24 +118,6 @@ allprojects { plugin("idea") } - val javaVersion = JavaVersion.VERSION_11 - - java { - sourceCompatibility = javaVersion - targetCompatibility = javaVersion - } - - kotlin { - explicitApi() - } - - tasks.withType().configureEach { - kotlinOptions { - jvmTarget = javaVersion.toString() - freeCompilerArgs = listOf("-Xskip-prerelease-check") - } - } - group = "io.spine.gcloud" version = extra["versionToPublish"]!! @@ -144,7 +125,6 @@ allprojects { } subprojects { - apply { plugin("com.google.protobuf") plugin("net.ltgt.errorprone") @@ -154,16 +134,29 @@ subprojects { plugin("pmd-settings") } - tasks { - withType { + val javaVersion = JavaVersion.VERSION_11 + + java { + sourceCompatibility = javaVersion + targetCompatibility = javaVersion + + tasks.withType().configureEach { configureJavac() configureErrorProne() } - withType { - configureLogging() + } + + kotlin { + explicitApi() + + tasks.withType().configureEach { + kotlinOptions { + jvmTarget = javaVersion.toString() + freeCompilerArgs = listOf("-Xskip-prerelease-check") + } } - registerTestTasks() } + LicenseReporter.generateReportIn(project) JavadocConfig.applyTo(project) CheckStyleConfig.applyTo(project) @@ -174,8 +167,9 @@ subprojects { google() } - configurations.forceVersions() configurations { + forceVersions() + excludeProtobufLite() all { resolutionStrategy { force( @@ -197,10 +191,8 @@ subprojects { } } } - configurations.excludeProtobufLite() val spineCoreVersion: String by extra - dependencies { ErrorProne.apply { errorprone(core) @@ -218,7 +210,6 @@ subprojects { ) } - val sourcesRootDir = "$projectDir/src" val generatedRootDir = "$projectDir/generated" val generatedJavaDir = "$generatedRootDir/main/java" val generatedTestJavaDir = "$generatedRootDir/test/java" @@ -229,50 +220,35 @@ subprojects { sourceSets { main { - java.srcDirs(generatedJavaDir, "$sourcesRootDir/main/java", generatedSpineDir) + java.srcDirs(generatedJavaDir, generatedSpineDir) resources.srcDir("$generatedRootDir/main/resources") - proto.srcDirs("$sourcesRootDir/main/proto") } test { - java.srcDirs(generatedTestJavaDir, "$sourcesRootDir/test/java", generatedTestSpineDir) + java.srcDirs(generatedTestJavaDir, generatedTestSpineDir) resources.srcDir("$generatedRootDir/test/resources") - proto.srcDir("$sourcesRootDir/test/proto") } } - val copyCredentials by tasks.registering(Copy::class) { - val resourceDir = "$projectDir/src/test/resources" - val fileName = "spine-dev.json" - val sourceFile = file("$rootDir/$fileName") - - from(sourceFile) - into(resourceDir) - } - - tasks.processTestResources { - dependsOn(copyCredentials) - } - - tasks.test { - useJUnitPlatform { - includeEngines("junit-jupiter") + tasks { + registerTestTasks() + withType().configureEach { + configureLogging() + useJUnitPlatform { + includeEngines("junit-jupiter") + } } - } - tasks.register("sourceJar", Jar::class) { - from(sourceSets.main.get().allJava) - archiveClassifier.set("sources") - } + val copyCredentials by registering(Copy::class) { + val resourceDir = "$projectDir/src/test/resources" + val fileName = "spine-dev.json" + val sourceFile = file("$rootDir/$fileName") - tasks.register("testOutputJar", Jar::class) { - from(sourceSets.test.get().output) - archiveClassifier.set("test") - } - - tasks.register("javadocJar", Jar::class) { - from("$projectDir/build/docs/javadoc") - archiveClassifier.set("javadoc") - dependsOn(tasks.javadoc) + from(sourceFile) + into(resourceDir) + } + processTestResources { + dependsOn(copyCredentials) + } } // Apply the same IDEA module configuration for each of sub-projects. @@ -299,7 +275,10 @@ subprojects { allowInternalJavadoc.set(true) rootFolder.set(rootDir) } - project.tasks["publish"].dependsOn("${project.path}:updateGitHubPages") + + project.tasks.named("publish") { + dependsOn("${project.path}:updateGitHubPages") + } } JacocoConfig.applyTo(project) diff --git a/datastore/build.gradle.kts b/datastore/build.gradle.kts index 57dfde0a..559038fc 100644 --- a/datastore/build.gradle.kts +++ b/datastore/build.gradle.kts @@ -80,5 +80,4 @@ tasks.withType(Test::class) { dependsOn(startDatastore) } val dupStrategy = DuplicatesStrategy.INCLUDE tasks.processResources.get().duplicatesStrategy = dupStrategy tasks.processTestResources.get().duplicatesStrategy = dupStrategy -tasks.sourceJar.get().duplicatesStrategy = dupStrategy tasks.jar.get().duplicatesStrategy = dupStrategy diff --git a/pubsub/build.gradle.kts b/pubsub/build.gradle.kts index edc72082..75f35fba 100644 --- a/pubsub/build.gradle.kts +++ b/pubsub/build.gradle.kts @@ -36,5 +36,4 @@ dependencies { val dupStrategy = DuplicatesStrategy.INCLUDE tasks.processResources.get().duplicatesStrategy = dupStrategy tasks.processTestResources.get().duplicatesStrategy = dupStrategy -tasks.sourceJar.get().duplicatesStrategy = dupStrategy tasks.jar.get().duplicatesStrategy = dupStrategy diff --git a/stackdriver-trace/build.gradle.kts b/stackdriver-trace/build.gradle.kts index 47a4b81c..4dbff517 100644 --- a/stackdriver-trace/build.gradle.kts +++ b/stackdriver-trace/build.gradle.kts @@ -42,6 +42,5 @@ tasks { processResources { duplicatesStrategy = strategy } processTestResources { duplicatesStrategy = strategy } - sourceJar { duplicatesStrategy = strategy } jar { duplicatesStrategy = strategy } } diff --git a/testutil-gcloud/build.gradle.kts b/testutil-gcloud/build.gradle.kts index 1897482b..3bb1478d 100644 --- a/testutil-gcloud/build.gradle.kts +++ b/testutil-gcloud/build.gradle.kts @@ -33,5 +33,4 @@ dependencies { val dupStrategy = DuplicatesStrategy.INCLUDE tasks.processResources.get().duplicatesStrategy = dupStrategy tasks.processTestResources.get().duplicatesStrategy = dupStrategy -tasks.sourceJar.get().duplicatesStrategy = dupStrategy tasks.jar.get().duplicatesStrategy = dupStrategy From 31d3036372e5929e9cfc7c1124b01919b422fb27 Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Mon, 11 Apr 2022 13:13:15 +0300 Subject: [PATCH 06/10] Slightly refactor modules' build files --- datastore/build.gradle.kts | 20 +++++++++++++------- pubsub/build.gradle.kts | 16 ++++++++++------ testutil-gcloud/build.gradle.kts | 16 ++++++++++------ 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/datastore/build.gradle.kts b/datastore/build.gradle.kts index 559038fc..da5caab1 100644 --- a/datastore/build.gradle.kts +++ b/datastore/build.gradle.kts @@ -73,11 +73,17 @@ val startDatastore by tasks.registering(ExecFork::class) { killDescendants = false } -tasks.withType(Test::class) { dependsOn(startDatastore) } +tasks.withType().configureEach { + dependsOn(startDatastore) +} + +tasks { -//TODO:2021-07-22:alexander.yevsyukov: Turn to WARN and investigate duplicates. -// see https://github.com/SpineEventEngine/base/issues/657 -val dupStrategy = DuplicatesStrategy.INCLUDE -tasks.processResources.get().duplicatesStrategy = dupStrategy -tasks.processTestResources.get().duplicatesStrategy = dupStrategy -tasks.jar.get().duplicatesStrategy = dupStrategy + // Turn to `WARN` and investigate duplicates. + // See: https://github.com/SpineEventEngine/base/issues/657 + val strategy = DuplicatesStrategy.INCLUDE + + processResources { duplicatesStrategy = strategy } + processTestResources { duplicatesStrategy = strategy } + jar { duplicatesStrategy = strategy } +} diff --git a/pubsub/build.gradle.kts b/pubsub/build.gradle.kts index 75f35fba..e5fcbb3e 100644 --- a/pubsub/build.gradle.kts +++ b/pubsub/build.gradle.kts @@ -31,9 +31,13 @@ dependencies { api(GoogleCloud.pubSubGrpcApi) } -//TODO:2021-07-22:alexander.yevsyukov: Turn to WARN and investigate duplicates. -// see https://github.com/SpineEventEngine/base/issues/657 -val dupStrategy = DuplicatesStrategy.INCLUDE -tasks.processResources.get().duplicatesStrategy = dupStrategy -tasks.processTestResources.get().duplicatesStrategy = dupStrategy -tasks.jar.get().duplicatesStrategy = dupStrategy +tasks { + + // Turn to `WARN` and investigate duplicates. + // See: https://github.com/SpineEventEngine/base/issues/657 + val strategy = DuplicatesStrategy.INCLUDE + + processResources { duplicatesStrategy = strategy } + processTestResources { duplicatesStrategy = strategy } + jar { duplicatesStrategy = strategy } +} diff --git a/testutil-gcloud/build.gradle.kts b/testutil-gcloud/build.gradle.kts index 3bb1478d..db2f331f 100644 --- a/testutil-gcloud/build.gradle.kts +++ b/testutil-gcloud/build.gradle.kts @@ -28,9 +28,13 @@ dependencies { implementation(project(":datastore")) } -//TODO:2021-07-22:alexander.yevsyukov: Turn to WARN and investigate duplicates. -// see https://github.com/SpineEventEngine/base/issues/657 -val dupStrategy = DuplicatesStrategy.INCLUDE -tasks.processResources.get().duplicatesStrategy = dupStrategy -tasks.processTestResources.get().duplicatesStrategy = dupStrategy -tasks.jar.get().duplicatesStrategy = dupStrategy +tasks { + + // Turn to `WARN` and investigate duplicates. + // See: https://github.com/SpineEventEngine/base/issues/657 + val strategy = DuplicatesStrategy.INCLUDE + + processResources { duplicatesStrategy = strategy } + processTestResources { duplicatesStrategy = strategy } + jar { duplicatesStrategy = strategy } +} From 9836fc4bb75a43b87df67751054f49108b61a6ad Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Mon, 11 Apr 2022 13:21:44 +0300 Subject: [PATCH 07/10] Bump the library version --- license-report.md | 332 +++++++++++++++++++++++++-------------------- pom.xml | 20 +-- version.gradle.kts | 2 +- 3 files changed, 193 insertions(+), 161 deletions(-) diff --git a/license-report.md b/license-report.md index 2e186d7f..03ec8492 100644 --- a/license-report.md +++ b/license-report.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.gcloud:spine-datastore:2.0.0-SNAPSHOT.66` +# Dependencies of `io.spine.gcloud:spine-datastore:2.0.0-SNAPSHOT.67` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.13.0.**No license information found** @@ -70,18 +70,18 @@ * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.9.0. * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -89,7 +89,7 @@ * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -124,14 +124,17 @@ * **Project URL:** [https://www.google.com/](https://www.google.com/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. + * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + 1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.15. * **Project URL:** [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -140,27 +143,27 @@ * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -176,6 +179,7 @@ * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -193,13 +197,13 @@ * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.0. +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.19. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) @@ -321,7 +325,7 @@ * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.9.0. * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -340,11 +344,11 @@ 1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.10.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -356,11 +360,11 @@ * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre. * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. @@ -398,14 +402,17 @@ * **Project URL:** [https://github.com/google/protobuf-gradle-plugin](https://github.com/google/protobuf-gradle-plugin) * **License:** [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. + * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + 1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.18.0. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) @@ -423,7 +430,7 @@ 1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.3. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 9.2. +1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.1. * **Project URL:** [https://checkstyle.org/](https://checkstyle.org/) * **License:** [LGPL-2.1+](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) @@ -455,7 +462,7 @@ * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : info.picocli. **Name** : picocli. **Version** : 4.6.2. +1. **Group** : info.picocli. **Name** : picocli. **Version** : 4.6.3. * **Project URL:** [http://picocli.info](http://picocli.info) * **License:** [The Apache Software License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -463,27 +470,27 @@ * **Project URL:** [https://github.com/java-diff-utils/java-diff-utils](https://github.com/java-diff-utils/java-diff-utils) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -503,6 +510,7 @@ * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -525,10 +533,10 @@ * **Project URL:** [http://www.saxonica.com/](http://www.saxonica.com/) * **License:** [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/2.0/) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.41.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.44.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.41.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.44.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) 1. **Group** : net.sourceforge.saxon. **Name** : saxon. **Version** : 9.1.0.8. @@ -564,7 +572,7 @@ * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.0. +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [The MIT License](http://opensource.org/licenses/MIT) @@ -572,9 +580,9 @@ * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.19. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.eclipse.jgit. **Name** : org.eclipse.jgit. **Version** : 4.4.1.201607150455-r. * **License:** Eclipse Distribution License (New BSD License) @@ -726,12 +734,12 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). +This report was generated on **Mon Apr 11 13:19:43 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.gcloud:spine-pubsub:2.0.0-SNAPSHOT.66` +# Dependencies of `io.spine.gcloud:spine-pubsub:2.0.0-SNAPSHOT.67` ## Runtime 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. @@ -758,18 +766,18 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.9.0. * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -777,7 +785,7 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -788,35 +796,38 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.43.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. + * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -824,6 +835,7 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -833,13 +845,13 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.0. +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.19. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) @@ -914,7 +926,7 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.9.0. * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -933,11 +945,11 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice 1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.10.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -949,11 +961,11 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre. * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. @@ -967,14 +979,17 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/protobuf-gradle-plugin](https://github.com/google/protobuf-gradle-plugin) * **License:** [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. + * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + 1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.18.0. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) @@ -992,7 +1007,7 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice 1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.3. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 9.2. +1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.1. * **Project URL:** [https://checkstyle.org/](https://checkstyle.org/) * **License:** [LGPL-2.1+](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) @@ -1016,7 +1031,7 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [http://commons.apache.org/lang/](http://commons.apache.org/lang/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : info.picocli. **Name** : picocli. **Version** : 4.6.2. +1. **Group** : info.picocli. **Name** : picocli. **Version** : 4.6.3. * **Project URL:** [http://picocli.info](http://picocli.info) * **License:** [The Apache Software License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1024,27 +1039,27 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/java-diff-utils/java-diff-utils](https://github.com/java-diff-utils/java-diff-utils) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1056,6 +1071,7 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -1078,10 +1094,10 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [http://www.saxonica.com/](http://www.saxonica.com/) * **License:** [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/2.0/) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.41.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.44.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.41.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.44.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) 1. **Group** : net.sourceforge.saxon. **Name** : saxon. **Version** : 9.1.0.8. @@ -1109,7 +1125,7 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.0. +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [The MIT License](http://opensource.org/licenses/MIT) @@ -1117,9 +1133,9 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.19. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.eclipse.jgit. **Name** : org.eclipse.jgit. **Version** : 4.4.1.201607150455-r. * **License:** Eclipse Distribution License (New BSD License) @@ -1267,12 +1283,12 @@ This report was generated on **Wed Jan 05 18:20:55 EET 2022** using [Gradle-Lice The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). +This report was generated on **Mon Apr 11 13:19:43 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.gcloud:spine-stackdriver-trace:2.0.0-SNAPSHOT.66` +# Dependencies of `io.spine.gcloud:spine-stackdriver-trace:2.0.0-SNAPSHOT.67` ## Runtime 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. @@ -1321,18 +1337,18 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.9.0. * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1340,7 +1356,7 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1358,14 +1374,17 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. + * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + 1. **Group** : com.google.re2j. **Name** : re2j. **Version** : 1.5. * **Project URL:** [http://github.com/google/re2j](http://github.com/google/re2j) * **License:** [Go License](https://golang.org/LICENSE) @@ -1382,19 +1401,19 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-auth. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-auth. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1406,11 +1425,11 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1418,7 +1437,7 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1442,6 +1461,7 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -1467,13 +1487,13 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.0. +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.19. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.conscrypt. **Name** : conscrypt-openjdk-uber. **Version** : 2.5.1. * **Project URL:** [https://conscrypt.org/](https://conscrypt.org/) @@ -1578,7 +1598,7 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.9.0. * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1597,11 +1617,11 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice 1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.10.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1613,11 +1633,11 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre. * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. @@ -1638,14 +1658,17 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/protobuf-gradle-plugin](https://github.com/google/protobuf-gradle-plugin) * **License:** [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. + * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + 1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.18.0. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) @@ -1667,7 +1690,7 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice 1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.3. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 9.2. +1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.1. * **Project URL:** [https://checkstyle.org/](https://checkstyle.org/) * **License:** [LGPL-2.1+](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) @@ -1699,7 +1722,7 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : info.picocli. **Name** : picocli. **Version** : 4.6.2. +1. **Group** : info.picocli. **Name** : picocli. **Version** : 4.6.3. * **Project URL:** [http://picocli.info](http://picocli.info) * **License:** [The Apache Software License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1711,19 +1734,19 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-auth. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-auth. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1735,11 +1758,11 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1747,7 +1770,7 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1775,6 +1798,7 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -1797,10 +1821,10 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [http://www.saxonica.com/](http://www.saxonica.com/) * **License:** [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/2.0/) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.41.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.44.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.41.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.44.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) 1. **Group** : net.sourceforge.saxon. **Name** : saxon. **Version** : 9.1.0.8. @@ -1844,7 +1868,7 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.0. +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [The MIT License](http://opensource.org/licenses/MIT) @@ -1852,9 +1876,9 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.19. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.conscrypt. **Name** : conscrypt-openjdk-uber. **Version** : 2.5.1. * **Project URL:** [https://conscrypt.org/](https://conscrypt.org/) @@ -2010,12 +2034,12 @@ This report was generated on **Wed Jan 05 18:20:56 EET 2022** using [Gradle-Lice The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). +This report was generated on **Mon Apr 11 13:19:44 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.gcloud:spine-testutil-gcloud:2.0.0-SNAPSHOT.66` +# Dependencies of `io.spine.gcloud:spine-testutil-gcloud:2.0.0-SNAPSHOT.67` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.13.0.**No license information found** @@ -2085,18 +2109,18 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.9.0. * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2104,7 +2128,7 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2139,14 +2163,17 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [https://www.google.com/](https://www.google.com/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. + * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + 1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.15. * **Project URL:** [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2155,27 +2182,27 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -2191,6 +2218,7 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -2208,13 +2236,13 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.0. +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.19. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) @@ -2336,7 +2364,7 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.9.0. * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2355,11 +2383,11 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice 1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.10.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.6. +1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2371,11 +2399,11 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.0.1-jre. +1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre. * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. @@ -2413,14 +2441,17 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/google/protobuf-gradle-plugin](https://github.com/google/protobuf-gradle-plugin) * **License:** [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.1. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. + * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + 1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.18.0. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) @@ -2438,7 +2469,7 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice 1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.3. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 9.2. +1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.1. * **Project URL:** [https://checkstyle.org/](https://checkstyle.org/) * **License:** [LGPL-2.1+](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) @@ -2470,7 +2501,7 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : info.picocli. **Name** : picocli. **Version** : 4.6.2. +1. **Group** : info.picocli. **Name** : picocli. **Version** : 4.6.3. * **Project URL:** [http://picocli.info](http://picocli.info) * **License:** [The Apache Software License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2478,27 +2509,27 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/java-diff-utils/java-diff-utils](https://github.com/java-diff-utils/java-diff-utils) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.43.1. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -2518,6 +2549,7 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -2540,10 +2572,10 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [http://www.saxonica.com/](http://www.saxonica.com/) * **License:** [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/2.0/) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.41.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.44.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.41.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.44.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) 1. **Group** : net.sourceforge.saxon. **Name** : saxon. **Version** : 9.1.0.8. @@ -2579,7 +2611,7 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.0. +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [The MIT License](http://opensource.org/licenses/MIT) @@ -2587,9 +2619,9 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.19. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.eclipse.jgit. **Name** : org.eclipse.jgit. **Version** : 4.4.1.201607150455-r. * **License:** Eclipse Distribution License (New BSD License) @@ -2741,4 +2773,4 @@ This report was generated on **Wed Jan 05 18:21:05 EET 2022** using [Gradle-Lice The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Jan 05 18:21:06 EET 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file +This report was generated on **Mon Apr 11 13:19:44 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5d21b0e1..8d3ae665 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.gcloud spine-gcloud-java -2.0.0-SNAPSHOT.66 +2.0.0-SNAPSHOT.67 2015 @@ -44,19 +44,19 @@ all modules and does not describe the project structure per-subproject. io.spine spine-base - 2.0.0-SNAPSHOT.75 + 2.0.0-SNAPSHOT.88 compile io.spine spine-base-types - 2.0.0-SNAPSHOT.75 + 2.0.0-SNAPSHOT.88 compile io.spine spine-server - 2.0.0-SNAPSHOT.89 + 2.0.0-SNAPSHOT.94 compile @@ -74,13 +74,13 @@ all modules and does not describe the project structure per-subproject. io.grpc grpc-auth - 1.43.1 + 1.45.0 test io.spine.tools spine-testutil-server - 2.0.0-SNAPSHOT.89 + 2.0.0-SNAPSHOT.94 test @@ -102,7 +102,7 @@ all modules and does not describe the project structure per-subproject. com.puppycrawl.tools checkstyle - 9.2 + 10.1 io.grpc @@ -112,18 +112,18 @@ all modules and does not describe the project structure per-subproject. io.spine.tools spine-mc-java-checks - 2.0.0-SNAPSHOT.76 + 2.0.0-SNAPSHOT.83 provided io.spine.tools spine-mc-java-protoc - 2.0.0-SNAPSHOT.76 + 2.0.0-SNAPSHOT.83 net.sourceforge.pmd pmd-java - 6.41.0 + 6.44.0 org.jacoco diff --git a/version.gradle.kts b/version.gradle.kts index 5f48ddd9..3d894924 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -29,4 +29,4 @@ val spineBaseTypesVersion: String by extra("2.0.0-SNAPSHOT.88") val spineCoreVersion: String by extra("2.0.0-SNAPSHOT.94") val mcJavaVersion: String by extra("2.0.0-SNAPSHOT.83") -val versionToPublish: String by extra("2.0.0-SNAPSHOT.66") +val versionToPublish: String by extra("2.0.0-SNAPSHOT.67") From e8d9f52faab9101d2e2f8b384ccf4046045ce701 Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Mon, 11 Apr 2022 14:28:20 +0300 Subject: [PATCH 08/10] Drop a trailing comma on a call side --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 212d583c..431803d4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -95,13 +95,13 @@ spinePublishing { "datastore", "stackdriver-trace", "testutil-gcloud", - "pubsub", + "pubsub" ) destinations = with(PublishingRepos) { setOf( cloudRepo, cloudArtifactRegistry, - gitHub("gcloud-java"), + gitHub("gcloud-java") ) } } From 089678da1cc4cfe2d053e33a012fdd7c6cae3530 Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Mon, 11 Apr 2022 14:29:07 +0300 Subject: [PATCH 09/10] Bump the version to match `core-java` --- version.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle.kts b/version.gradle.kts index 3d894924..c69419a7 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -29,4 +29,4 @@ val spineBaseTypesVersion: String by extra("2.0.0-SNAPSHOT.88") val spineCoreVersion: String by extra("2.0.0-SNAPSHOT.94") val mcJavaVersion: String by extra("2.0.0-SNAPSHOT.83") -val versionToPublish: String by extra("2.0.0-SNAPSHOT.67") +val versionToPublish: String by extra("2.0.0-SNAPSHOT.94") From ccf63550940406948cd81ee25f78a3fc114c9cc7 Mon Sep 17 00:00:00 2001 From: "yevhenii.nadtochii" Date: Mon, 11 Apr 2022 14:35:20 +0300 Subject: [PATCH 10/10] Update license reports --- license-report.md | 16 ++++++++-------- pom.xml | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/license-report.md b/license-report.md index 03ec8492..31b59140 100644 --- a/license-report.md +++ b/license-report.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.gcloud:spine-datastore:2.0.0-SNAPSHOT.67` +# Dependencies of `io.spine.gcloud:spine-datastore:2.0.0-SNAPSHOT.94` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.13.0.**No license information found** @@ -734,12 +734,12 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 11 13:19:43 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). +This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.gcloud:spine-pubsub:2.0.0-SNAPSHOT.67` +# Dependencies of `io.spine.gcloud:spine-pubsub:2.0.0-SNAPSHOT.94` ## Runtime 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. @@ -1283,12 +1283,12 @@ This report was generated on **Mon Apr 11 13:19:43 EEST 2022** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 11 13:19:43 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). +This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.gcloud:spine-stackdriver-trace:2.0.0-SNAPSHOT.67` +# Dependencies of `io.spine.gcloud:spine-stackdriver-trace:2.0.0-SNAPSHOT.94` ## Runtime 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. @@ -2034,12 +2034,12 @@ This report was generated on **Mon Apr 11 13:19:43 EEST 2022** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 11 13:19:44 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). +This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.gcloud:spine-testutil-gcloud:2.0.0-SNAPSHOT.67` +# Dependencies of `io.spine.gcloud:spine-testutil-gcloud:2.0.0-SNAPSHOT.94` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.13.0.**No license information found** @@ -2773,4 +2773,4 @@ This report was generated on **Mon Apr 11 13:19:44 EEST 2022** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 11 13:19:44 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file +This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8d3ae665..50d5deae 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.gcloud spine-gcloud-java -2.0.0-SNAPSHOT.67 +2.0.0-SNAPSHOT.94 2015