From ef86539163de29b258ae7a80593e6c0d9f624fcd Mon Sep 17 00:00:00 2001 From: Dmytro Dashenkov Date: Tue, 1 Sep 2020 18:16:24 +0300 Subject: [PATCH 1/9] Update Spine dependencies --- license-report.md | 4 ++-- pom.xml | 16 ++++++++-------- version.gradle.kts | 7 ++++--- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/license-report.md b/license-report.md index 004864d2..024fc349 100644 --- a/license-report.md +++ b/license-report.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.tools:spine-plugin:1.5.27` +# Dependencies of `io.spine.tools:spine-plugin:1.5.28` ## Runtime 1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2 @@ -338,4 +338,4 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Fri Aug 28 17:52:22 EEST 2020** 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 **Tue Sep 01 16:45:15 EEST 2020** 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 150b79a7..60535360 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ all modules and does not describe the project structure per-subproject. io.spine.tools spine-bootstrap -1.5.27 +1.5.28 2015 @@ -52,25 +52,25 @@ all modules and does not describe the project structure per-subproject. io.spine spine-base - 1.5.29 + 1.5.30 compile io.spine.tools spine-model-compiler - 1.5.29 + 1.5.30 compile io.spine.tools spine-plugin-base - 1.5.29 + 1.5.30 compile io.spine.tools spine-proto-js-plugin - 1.5.29 + 1.5.30 compile @@ -106,13 +106,13 @@ all modules and does not describe the project structure per-subproject. io.spine spine-testlib - 1.5.29 + 1.5.30 test io.spine.tools spine-plugin-testlib - 1.5.29 + 1.5.30 test @@ -152,7 +152,7 @@ all modules and does not describe the project structure per-subproject. io.spine.tools spine-protoc-plugin - 1.5.29 + 1.5.30 net.sourceforge.pmd diff --git a/version.gradle.kts b/version.gradle.kts index 4c8a0a97..73847e70 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -29,7 +29,8 @@ * already in the root directory. */ -val spineBaseVersion: String by extra("1.5.29") +val spineBaseVersion: String by extra("1.5.30") val spineTimeVersion: String by extra("1.5.24") -val spineVersion: String by extra("1.5.26") -val pluginVersion: String by extra("1.5.27") +val spineVersion: String by extra("1.5.27") +val spineWebVersion: String by extra("1.5.25") +val pluginVersion: String by extra("1.5.28") From 238e27413a278565137468afec34879879d6c457 Mon Sep 17 00:00:00 2001 From: Dmytro Dashenkov Date: Tue, 1 Sep 2020 18:16:58 +0300 Subject: [PATCH 2/9] Add Gradle API for adding `web`, `firebase-web`, and `gcloud` dependencies --- .../prepare-config-resources.gradle.kts | 2 + .../tools/gradle/bootstrap/JavaExtension.java | 31 +++++++++- .../tools/gradle/config/ArtifactSnapshot.java | 16 +++++ .../tools/gradle/config/SpineDependency.java | 61 ++++++++++++++++--- 4 files changed, 99 insertions(+), 11 deletions(-) diff --git a/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts b/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts index 5b242dc0..784fd29f 100644 --- a/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts +++ b/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts @@ -55,6 +55,7 @@ tasks.processResources { val spineBaseVersion: String by extra val spineTimeVersion: String by extra val spineVersion: String by extra +val spineWebVersion: String by extra val writeDependencies by tasks.registering { group = taskGroup @@ -76,6 +77,7 @@ val writeDependencies by tasks.registering { artifacts.setProperty("spine.version.base", spineBaseVersion) artifacts.setProperty("spine.version.time", spineTimeVersion) artifacts.setProperty("spine.version.core", spineVersion) + artifacts.setProperty("spine.version.web", spineWebVersion) artifacts.setProperty("protobuf.compiler", Deps.build.protoc) artifacts.setProperty("protobuf.java", Deps.build.protobuf[0]) artifacts.setProperty("grpc.stub", Deps.grpc.stub) diff --git a/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java index c0eb6aaa..5e9a7c4f 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java +++ b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java @@ -83,7 +83,7 @@ public void codegen(Action config) { config.execute(codegen); } - public void codegen(Closure config) { + public void codegen(@SuppressWarnings("rawtypes") /* For Gradle API. */ Closure config) { configure(config, codegen); } @@ -109,6 +109,35 @@ public void server() { dependOnCore(SpineDependency.testUtilServer(), testImplementation); } + /** + * Marks this project as a part of a Java server and a Web server. + * + *

Additionally to the {@linkplain #server() server} dependencies, adds a dependency for + * {@code io.spine:spine-web} and {@code io.spine:spine-testutil-web}. + */ + public void webServer() { + dependOnWeb(SpineDependency.web()); + } + + /** + * Marks this project as a part of a Java server and a Web server based on the Firebase RDB. + * + *

Additionally to the {@linkplain #server() server} dependencies, adds a dependency for + * {@code io.spine.gcloud:spine-firebase-web} and {@code io.spine:spine-testutil-web}. + */ + public void firebaseWebServer() { + dependOnWeb(SpineDependency.firebaseWeb()); + } + + private void dependOnWeb(SpineDependency dependency) { + server(); + String version = artifacts.spineWebVersion(); + dependOn(dependency.ofVersion(version), implementation); + Artifact testDependency = SpineDependency.testUtilWeb() + .ofVersion(version); + dependOn(testDependency, testImplementation); + } + private void dependOn(Artifact module, ConfigurationName configurationName) { dependant().depend(configurationName, module.notation()); } diff --git a/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java b/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java index 239d69b8..4097ba42 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java +++ b/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java @@ -44,6 +44,7 @@ public final class ArtifactSnapshot { private final String spineBaseVersion; private final String spineTimeVersion; private final String spineCoreVersion; + private final String spineWebVersion; private final String protoc; private final String protobufJava; @@ -60,6 +61,7 @@ private ArtifactSnapshot(Builder builder) { this.spineBaseVersion = checkNotNull(builder.spineBaseVersion); this.spineTimeVersion = checkNotNull(builder.spineTimeVersion); this.spineCoreVersion = checkNotNull(builder.spineCoreVersion); + this.spineWebVersion = checkNotNull(builder.spineWebVersion); this.protoc = checkNotNull(builder.protoc); this.protobufJava = checkNotNull(builder.protobufJava); this.grpcProtobuf = checkNotNull(builder.grpcProtobuf); @@ -80,6 +82,7 @@ private static ArtifactSnapshot load() { .setSpineCoreVersion(properties.getProperty("spine.version.core")) .setSpineBaseVersion(properties.getProperty("spine.version.base")) .setSpineTimeVersion(properties.getProperty("spine.version.time")) + .setSpineWebVersion(properties.getProperty("spine.version.web")) .setProtoc(properties.getProperty("protobuf.compiler")) .setProtobufJava(properties.getProperty("protobuf.java")) .setGrpcProtobuf(properties.getProperty("grpc.protobuf")) @@ -120,6 +123,13 @@ public String spineTimeVersion() { return spineTimeVersion; } + /** + * Obtains the current version of Spine {@code web} API. + */ + public String spineWebVersion() { + return spineWebVersion; + } + /** * Obtains the Maven repository which hosts Spine artifacts with release versions. */ @@ -173,6 +183,7 @@ public static final class Builder { private String spineBaseVersion; private String spineTimeVersion; private String spineCoreVersion; + private String spineWebVersion; private String protoc; private String protobufJava; private String grpcProtobuf; @@ -201,6 +212,11 @@ public Builder setSpineCoreVersion(String version) { return this; } + public Builder setSpineWebVersion(String spineWebVersion) { + this.spineWebVersion = checkNotNull(spineWebVersion); + return this; + } + public Builder setProtoc(String artifact) { this.protoc = checkNotNull(artifact); return this; diff --git a/plugin/src/main/java/io/spine/tools/gradle/config/SpineDependency.java b/plugin/src/main/java/io/spine/tools/gradle/config/SpineDependency.java index 9545a825..bb3b41e9 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/config/SpineDependency.java +++ b/plugin/src/main/java/io/spine/tools/gradle/config/SpineDependency.java @@ -27,20 +27,45 @@ */ public final class SpineDependency implements Dependency { - private static final String SPINE_PREFIX = "spine-"; + private static final String DEFAULT_GROUP = "io.spine"; + private static final String G_CLOUD_GROUP = DEFAULT_GROUP + ".gcloud"; - private static final SpineDependency BASE = new SpineDependency("base"); - private static final SpineDependency TIME = new SpineDependency("time"); - private static final SpineDependency CLIENT = new SpineDependency("client"); - private static final SpineDependency SERVER = new SpineDependency("server"); - private static final SpineDependency TEST_UTIL_SERVER = new SpineDependency("testutil-server"); - private static final SpineDependency TEST_UTIL_CLIENT = new SpineDependency("testutil-client"); - private static final SpineDependency TESTLIB = new SpineDependency("testlib"); - private static final SpineDependency TEST_UTIL_TIME = new SpineDependency("testutil-time"); + private static final String SPINE_PREFIX = "spine-"; + private static final SpineDependency BASE = + new SpineDependency("base"); + private static final SpineDependency TIME = + new SpineDependency("time"); + private static final SpineDependency CLIENT = + new SpineDependency("client"); + private static final SpineDependency SERVER = + new SpineDependency("server"); + private static final SpineDependency TEST_UTIL_SERVER = + new SpineDependency("testutil-server"); + private static final SpineDependency TEST_UTIL_CLIENT = + new SpineDependency("testutil-client"); + private static final SpineDependency TESTLIB = + new SpineDependency("testlib"); + private static final SpineDependency TEST_UTIL_TIME = + new SpineDependency("testutil-time"); + private static final SpineDependency WEB = + new SpineDependency("web"); + private static final SpineDependency TEST_UTIL_WEB = + new SpineDependency("testutil-web"); + private static final SpineDependency FIREBASE_WEB = + new SpineDependency(G_CLOUD_GROUP, "firebase-web"); + private static final SpineDependency DATASTORE = + new SpineDependency(G_CLOUD_GROUP, "datastore"); + + private final String group; private final String shortName; private SpineDependency(String name) { + this(DEFAULT_GROUP, name); + } + + private SpineDependency(String group, String name) { + this.group = group; this.shortName = name; } @@ -100,6 +125,22 @@ public static SpineDependency testUtilTime() { return TEST_UTIL_TIME; } + public static SpineDependency web() { + return WEB; + } + + public static SpineDependency testUtilWeb() { + return TEST_UTIL_WEB; + } + + public static SpineDependency firebaseWeb() { + return FIREBASE_WEB; + } + + public static SpineDependency datastore() { + return DATASTORE; + } + @Override public String name() { return SPINE_PREFIX + shortName; @@ -107,7 +148,7 @@ public String name() { @Override public String groupId() { - return "io.spine"; + return group; } @Override From 1a448a2713d2802f293ffa37014f706eba4844a8 Mon Sep 17 00:00:00 2001 From: Dmytro Dashenkov Date: Tue, 1 Sep 2020 18:44:07 +0300 Subject: [PATCH 3/9] Add Gradle API for adding `gcloud` dependency --- .../tools/gradle/bootstrap/JavaExtension.java | 11 +++++++++++ .../tools/gradle/config/ArtifactSnapshot.java | 15 +++++++++++++++ .../gradle/bootstrap/given/FakeArtifacts.java | 2 ++ 3 files changed, 28 insertions(+) diff --git a/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java index 5e9a7c4f..7e82d190 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java +++ b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java @@ -129,6 +129,17 @@ public void firebaseWebServer() { dependOnWeb(SpineDependency.firebaseWeb()); } + /** + * Marks this project as a part of a Java server and adds the Google Cloud Datastore storage + * dependency to the project. + */ + public void withDatastore() { + server(); + Artifact dependency = SpineDependency.datastore() + .ofVersion(artifacts.spineGCloudVersion()); + dependOn(dependency, implementation); + } + private void dependOnWeb(SpineDependency dependency) { server(); String version = artifacts.spineWebVersion(); diff --git a/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java b/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java index 4097ba42..e4952843 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java +++ b/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java @@ -45,6 +45,7 @@ public final class ArtifactSnapshot { private final String spineTimeVersion; private final String spineCoreVersion; private final String spineWebVersion; + private final String spineGCloudVersion; private final String protoc; private final String protobufJava; @@ -62,6 +63,7 @@ private ArtifactSnapshot(Builder builder) { this.spineTimeVersion = checkNotNull(builder.spineTimeVersion); this.spineCoreVersion = checkNotNull(builder.spineCoreVersion); this.spineWebVersion = checkNotNull(builder.spineWebVersion); + this.spineGCloudVersion = checkNotNull(builder.spineGCloudVersion); this.protoc = checkNotNull(builder.protoc); this.protobufJava = checkNotNull(builder.protobufJava); this.grpcProtobuf = checkNotNull(builder.grpcProtobuf); @@ -130,6 +132,13 @@ public String spineWebVersion() { return spineWebVersion; } + /** + * Obtains the current version of Spine GCloud. + */ + public String spineGCloudVersion() { + return spineGCloudVersion; + } + /** * Obtains the Maven repository which hosts Spine artifacts with release versions. */ @@ -184,6 +193,7 @@ public static final class Builder { private String spineTimeVersion; private String spineCoreVersion; private String spineWebVersion; + private String spineGCloudVersion; private String protoc; private String protobufJava; private String grpcProtobuf; @@ -217,6 +227,11 @@ public Builder setSpineWebVersion(String spineWebVersion) { return this; } + public Builder setGCloudVersion(String spineGCloudVersion) { + this.spineGCloudVersion = checkNotNull(spineGCloudVersion); + return this; + } + public Builder setProtoc(String artifact) { this.protoc = checkNotNull(artifact); return this; diff --git a/plugin/src/test/java/io/spine/tools/gradle/bootstrap/given/FakeArtifacts.java b/plugin/src/test/java/io/spine/tools/gradle/bootstrap/given/FakeArtifacts.java index 8ac84b04..5c8d3b88 100644 --- a/plugin/src/test/java/io/spine/tools/gradle/bootstrap/given/FakeArtifacts.java +++ b/plugin/src/test/java/io/spine/tools/gradle/bootstrap/given/FakeArtifacts.java @@ -41,6 +41,8 @@ public static ArtifactSnapshot snapshot() { .setSpineBaseVersion(spineVersion) .setSpineTimeVersion(spineVersion) .setSpineCoreVersion(spineVersion) + .setSpineWebVersion(spineVersion) + .setGCloudVersion(spineVersion) .setGrpcProtobuf(GRPC_PROTO_DEPENDENCY) .setGrpcStub(GRPC_STUB_DEPENDENCY) .setProtoc("com.google.protobuf:protoc:3.6.1") From b68311639faa90cebe34e8e0a574cc680c206c35 Mon Sep 17 00:00:00 2001 From: Dmytro Dashenkov Date: Tue, 1 Sep 2020 21:17:21 +0300 Subject: [PATCH 4/9] Fix a typo --- .../java/io/spine/tools/gradle/bootstrap/ExtensionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/src/test/java/io/spine/tools/gradle/bootstrap/ExtensionTest.java b/plugin/src/test/java/io/spine/tools/gradle/bootstrap/ExtensionTest.java index 25e3937f..34d35532 100644 --- a/plugin/src/test/java/io/spine/tools/gradle/bootstrap/ExtensionTest.java +++ b/plugin/src/test/java/io/spine/tools/gradle/bootstrap/ExtensionTest.java @@ -55,7 +55,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@DisplayName("`spine` extension øshould") +@DisplayName("`spine` extension should") class ExtensionTest { private PluginTarget pluginTarget; From 5285fd6fdf921336981dada4d52daefadff48fe7 Mon Sep 17 00:00:00 2001 From: Dmytro Dashenkov Date: Tue, 1 Sep 2020 21:42:25 +0300 Subject: [PATCH 5/9] Add tests for the new Gradle extension API --- .../prepare-config-resources.gradle.kts | 2 + license-report.md | 2 +- .../tools/gradle/bootstrap/JavaExtension.java | 11 ++---- .../tools/gradle/config/ArtifactSnapshot.java | 3 +- .../tools/gradle/config/SpineDependency.java | 6 --- .../tools/gradle/bootstrap/ExtensionTest.java | 37 +++++++++++++++++++ .../gradle/bootstrap/given/FakeArtifacts.java | 2 +- version.gradle.kts | 1 + 8 files changed, 48 insertions(+), 16 deletions(-) diff --git a/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts b/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts index 784fd29f..693bf508 100644 --- a/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts +++ b/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts @@ -56,6 +56,7 @@ val spineBaseVersion: String by extra val spineTimeVersion: String by extra val spineVersion: String by extra val spineWebVersion: String by extra +val spineGCloudVersion: String by extra val writeDependencies by tasks.registering { group = taskGroup @@ -78,6 +79,7 @@ val writeDependencies by tasks.registering { artifacts.setProperty("spine.version.time", spineTimeVersion) artifacts.setProperty("spine.version.core", spineVersion) artifacts.setProperty("spine.version.web", spineWebVersion) + artifacts.setProperty("spine.version.gcloud", spineWebVersion) artifacts.setProperty("protobuf.compiler", Deps.build.protoc) artifacts.setProperty("protobuf.java", Deps.build.protobuf[0]) artifacts.setProperty("grpc.stub", Deps.grpc.stub) diff --git a/license-report.md b/license-report.md index 024fc349..7f0f7f0e 100644 --- a/license-report.md +++ b/license-report.md @@ -338,4 +338,4 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Sep 01 16:45:15 EEST 2020** 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 **Tue Sep 01 21:39:32 EEST 2020** 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/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java index 7e82d190..001a4a75 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java +++ b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java @@ -112,8 +112,8 @@ public void server() { /** * Marks this project as a part of a Java server and a Web server. * - *

Additionally to the {@linkplain #server() server} dependencies, adds a dependency for - * {@code io.spine:spine-web} and {@code io.spine:spine-testutil-web}. + *

Additionally to the {@linkplain #server() server} dependencies, adds a dependency on + * {@code io.spine:spine-web}. */ public void webServer() { dependOnWeb(SpineDependency.web()); @@ -122,8 +122,8 @@ public void webServer() { /** * Marks this project as a part of a Java server and a Web server based on the Firebase RDB. * - *

Additionally to the {@linkplain #server() server} dependencies, adds a dependency for - * {@code io.spine.gcloud:spine-firebase-web} and {@code io.spine:spine-testutil-web}. + *

Additionally to the {@linkplain #server() server} dependencies, adds a dependency on + * {@code io.spine.gcloud:spine-firebase-web}. */ public void firebaseWebServer() { dependOnWeb(SpineDependency.firebaseWeb()); @@ -144,9 +144,6 @@ private void dependOnWeb(SpineDependency dependency) { server(); String version = artifacts.spineWebVersion(); dependOn(dependency.ofVersion(version), implementation); - Artifact testDependency = SpineDependency.testUtilWeb() - .ofVersion(version); - dependOn(testDependency, testImplementation); } private void dependOn(Artifact module, ConfigurationName configurationName) { diff --git a/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java b/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java index e4952843..db09da8b 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java +++ b/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java @@ -85,6 +85,7 @@ private static ArtifactSnapshot load() { .setSpineBaseVersion(properties.getProperty("spine.version.base")) .setSpineTimeVersion(properties.getProperty("spine.version.time")) .setSpineWebVersion(properties.getProperty("spine.version.web")) + .setSpineGCloudVersion(properties.getProperty("spine.version.gcloud")) .setProtoc(properties.getProperty("protobuf.compiler")) .setProtobufJava(properties.getProperty("protobuf.java")) .setGrpcProtobuf(properties.getProperty("grpc.protobuf")) @@ -227,7 +228,7 @@ public Builder setSpineWebVersion(String spineWebVersion) { return this; } - public Builder setGCloudVersion(String spineGCloudVersion) { + public Builder setSpineGCloudVersion(String spineGCloudVersion) { this.spineGCloudVersion = checkNotNull(spineGCloudVersion); return this; } diff --git a/plugin/src/main/java/io/spine/tools/gradle/config/SpineDependency.java b/plugin/src/main/java/io/spine/tools/gradle/config/SpineDependency.java index bb3b41e9..2c619f7a 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/config/SpineDependency.java +++ b/plugin/src/main/java/io/spine/tools/gradle/config/SpineDependency.java @@ -50,8 +50,6 @@ public final class SpineDependency implements Dependency { new SpineDependency("testutil-time"); private static final SpineDependency WEB = new SpineDependency("web"); - private static final SpineDependency TEST_UTIL_WEB = - new SpineDependency("testutil-web"); private static final SpineDependency FIREBASE_WEB = new SpineDependency(G_CLOUD_GROUP, "firebase-web"); private static final SpineDependency DATASTORE = @@ -129,10 +127,6 @@ public static SpineDependency web() { return WEB; } - public static SpineDependency testUtilWeb() { - return TEST_UTIL_WEB; - } - public static SpineDependency firebaseWeb() { return FIREBASE_WEB; } diff --git a/plugin/src/test/java/io/spine/tools/gradle/bootstrap/ExtensionTest.java b/plugin/src/test/java/io/spine/tools/gradle/bootstrap/ExtensionTest.java index 34d35532..c51bd15d 100644 --- a/plugin/src/test/java/io/spine/tools/gradle/bootstrap/ExtensionTest.java +++ b/plugin/src/test/java/io/spine/tools/gradle/bootstrap/ExtensionTest.java @@ -174,6 +174,31 @@ void addTestUtilTimeDependecy() { .contains(testUtilTimeDependency()); } + @Test + @DisplayName("add `web` dependencies to a Java project") + void addWebDependency() { + extension.enableJava(JavaExtension::webServer); + assertThat(dependencyTarget.dependencies()) + .contains(webDependency()); + } + + @Test + @DisplayName("add `firebase-web` dependencies to a Java project") + void addFirebaseWebDependency() { + extension.enableJava(JavaExtension::firebaseWebServer); + assertThat(dependencyTarget.dependencies()) + .contains(firebaseWebDependency()); + } + + @Test + @DisplayName("add `gcloud` dependency to a Java project") + void addGCloudDependency() { + extension.enableJava(JavaExtension::withDatastore); + IterableSubject assertDependencies = assertThat(dependencyTarget.dependencies()); + assertDependencies + .contains(datastoreDependency()); + } + @Test @DisplayName("apply `com.google.protobuf` plugin to a Java project") void applyProtoForJava() { @@ -376,6 +401,18 @@ private String testUtilTimeDependency() { return "io.spine:spine-testutil-time:" + spineVersion; } + private String webDependency() { + return "io.spine:spine-web:" + spineVersion; + } + + private String firebaseWebDependency() { + return "io.spine.gcloud:spine-firebase-web:" + spineVersion; + } + + private String datastoreDependency() { + return "io.spine.gcloud:spine-datastore:" + spineVersion; + } + private void assertApplied(Class> pluginClass) { GradlePlugin plugin = GradlePlugin.implementedIn(pluginClass); assertTrue(pluginTarget.isApplied(plugin), diff --git a/plugin/src/test/java/io/spine/tools/gradle/bootstrap/given/FakeArtifacts.java b/plugin/src/test/java/io/spine/tools/gradle/bootstrap/given/FakeArtifacts.java index 5c8d3b88..183ffe24 100644 --- a/plugin/src/test/java/io/spine/tools/gradle/bootstrap/given/FakeArtifacts.java +++ b/plugin/src/test/java/io/spine/tools/gradle/bootstrap/given/FakeArtifacts.java @@ -42,7 +42,7 @@ public static ArtifactSnapshot snapshot() { .setSpineTimeVersion(spineVersion) .setSpineCoreVersion(spineVersion) .setSpineWebVersion(spineVersion) - .setGCloudVersion(spineVersion) + .setSpineGCloudVersion(spineVersion) .setGrpcProtobuf(GRPC_PROTO_DEPENDENCY) .setGrpcStub(GRPC_STUB_DEPENDENCY) .setProtoc("com.google.protobuf:protoc:3.6.1") diff --git a/version.gradle.kts b/version.gradle.kts index 73847e70..91eae494 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -33,4 +33,5 @@ val spineBaseVersion: String by extra("1.5.30") val spineTimeVersion: String by extra("1.5.24") val spineVersion: String by extra("1.5.27") val spineWebVersion: String by extra("1.5.25") +val spineGCloudVersion: String by extra("1.5.22") val pluginVersion: String by extra("1.5.28") From 15b41717e09b589ca7a1c11b9a60fec9f8c375cd Mon Sep 17 00:00:00 2001 From: Dmytro Dashenkov Date: Tue, 1 Sep 2020 23:07:55 +0300 Subject: [PATCH 6/9] Configure IDEA file structure if plugin is applied --- license-report.md | 2 +- .../tools/gradle/bootstrap/JavaExtension.java | 24 ++++++++++++++ .../gradle/bootstrap/SpinePluginTarget.java | 31 +++++++++++++++---- pom.xml | 14 ++++----- version.gradle.kts | 2 +- 5 files changed, 58 insertions(+), 15 deletions(-) diff --git a/license-report.md b/license-report.md index 7f0f7f0e..bac0c7f2 100644 --- a/license-report.md +++ b/license-report.md @@ -338,4 +338,4 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Sep 01 21:39:32 EEST 2020** 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 **Tue Sep 01 23:01:59 EEST 2020** 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/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java index 001a4a75..c0ba3285 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java +++ b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java @@ -26,11 +26,17 @@ import io.spine.tools.gradle.Artifact; import io.spine.tools.gradle.ConfigurationName; import io.spine.tools.gradle.GeneratedSourceRoot; +import io.spine.tools.gradle.compiler.Extension; import io.spine.tools.gradle.config.ArtifactSnapshot; import io.spine.tools.gradle.config.SpineDependency; import io.spine.tools.gradle.project.SourceSuperset; import org.gradle.api.Action; import org.gradle.api.Project; +import org.gradle.plugins.ide.idea.model.IdeaModel; +import org.gradle.plugins.ide.idea.model.IdeaModule; + +import java.io.File; +import java.util.Set; import static com.google.common.base.Preconditions.checkNotNull; import static io.spine.tools.gradle.ConfigurationName.implementation; @@ -69,6 +75,24 @@ void enableGeneration() { pluginTarget().apply(SpinePluginScripts.modelCompilerConfig()); addSourceSets(); excludeProtobufLite(); + pluginTarget().withIdeaPlugin(this::configureIdea); + } + + private void configureIdea(IdeaModel idea) { + IdeaModule module = idea.getModule(); + + add(module.getSourceDirs(), Extension.getMainProtoSrcDir(project)); + add(module.getGeneratedSourceDirs(), Extension.getMainGenProtoDir(project)); + add(module.getGeneratedSourceDirs(), Extension.getMainGenGrpcDir(project)); + + add(module.getTestSourceDirs(), Extension.getTestProtoSrcDir(project)); + add(module.getGeneratedSourceDirs(), Extension.getTestGenProtoDir(project)); + add(module.getGeneratedSourceDirs(), Extension.getTestGenGrpcDir(project)); + } + + private static void add(Set files, String path) { + File file = new File(path); + files.add(file); } private void excludeProtobufLite() { diff --git a/plugin/src/main/java/io/spine/tools/gradle/bootstrap/SpinePluginTarget.java b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/SpinePluginTarget.java index 7a8dd7d1..95ea6895 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/bootstrap/SpinePluginTarget.java +++ b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/SpinePluginTarget.java @@ -26,7 +26,13 @@ import io.spine.tools.gradle.PluginScript; import io.spine.tools.gradle.compiler.ModelCompilerPlugin; import io.spine.tools.gradle.project.PluginTarget; +import org.gradle.api.Plugin; +import org.gradle.api.Project; import org.gradle.api.plugins.JavaPlugin; +import org.gradle.plugins.ide.idea.IdeaPlugin; +import org.gradle.plugins.ide.idea.model.IdeaModel; + +import java.util.function.Consumer; import static com.google.common.base.Preconditions.checkNotNull; @@ -45,7 +51,12 @@ public SpinePluginTarget(PluginTarget delegate) { } @Override - public void apply(GradlePlugin plugin) { + public

> void with(GradlePlugin

plugin, Consumer

action) { + delegate.with(plugin, action); + } + + @Override + public void apply(GradlePlugin plugin) { delegate.apply(plugin); } @@ -55,7 +66,7 @@ public void apply(PluginScript pluginScript) { } @Override - public boolean isApplied(GradlePlugin plugin) { + public boolean isApplied(GradlePlugin plugin) { return delegate.isApplied(plugin); } @@ -63,7 +74,7 @@ public boolean isApplied(GradlePlugin plugin) { * Applies the standard {@link JavaPlugin}. */ public void applyJavaPlugin() { - GradlePlugin javaPlugin = GradlePlugin.implementedIn(JavaPlugin.class); + GradlePlugin javaPlugin = GradlePlugin.implementedIn(JavaPlugin.class); apply(javaPlugin); } @@ -74,7 +85,7 @@ public void applyJavaPlugin() { */ public void applyProtobufPlugin() { applyJavaPlugin(); - GradlePlugin protoPlugin = GradlePlugin.implementedIn(ProtobufPlugin.class); + GradlePlugin protoPlugin = GradlePlugin.implementedIn(ProtobufPlugin.class); apply(protoPlugin); } @@ -82,7 +93,7 @@ public void applyProtobufPlugin() { * Applies the {@link ModelCompilerPlugin}. */ public void applyModelCompiler() { - GradlePlugin plugin = GradlePlugin.implementedIn(ModelCompilerPlugin.class); + GradlePlugin plugin = GradlePlugin.implementedIn(ModelCompilerPlugin.class); apply(plugin); } @@ -90,7 +101,15 @@ public void applyModelCompiler() { * Applies the {@link ProtoJsPlugin}. */ public void applyProtoJsPlugin() { - GradlePlugin plugin = GradlePlugin.implementedIn(ProtoJsPlugin.class); + GradlePlugin plugin = GradlePlugin.implementedIn(ProtoJsPlugin.class); apply(plugin); } + + /** + * Checks if the {@code idea} plugin is applied to this project. + */ + public void withIdeaPlugin(Consumer action) { + GradlePlugin plugin = GradlePlugin.implementedIn(IdeaPlugin.class); + with(plugin, idea -> action.accept(idea.getModel())); + } } diff --git a/pom.xml b/pom.xml index 60535360..00bd1740 100644 --- a/pom.xml +++ b/pom.xml @@ -52,25 +52,25 @@ all modules and does not describe the project structure per-subproject. io.spine spine-base - 1.5.30 + 1.5.31 compile io.spine.tools spine-model-compiler - 1.5.30 + 1.5.31 compile io.spine.tools spine-plugin-base - 1.5.30 + 1.5.31 compile io.spine.tools spine-proto-js-plugin - 1.5.30 + 1.5.31 compile @@ -106,13 +106,13 @@ all modules and does not describe the project structure per-subproject. io.spine spine-testlib - 1.5.30 + 1.5.31 test io.spine.tools spine-plugin-testlib - 1.5.30 + 1.5.31 test @@ -152,7 +152,7 @@ all modules and does not describe the project structure per-subproject. io.spine.tools spine-protoc-plugin - 1.5.30 + 1.5.31 net.sourceforge.pmd diff --git a/version.gradle.kts b/version.gradle.kts index 91eae494..e33b6b7c 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -29,7 +29,7 @@ * already in the root directory. */ -val spineBaseVersion: String by extra("1.5.30") +val spineBaseVersion: String by extra("1.5.31") val spineTimeVersion: String by extra("1.5.24") val spineVersion: String by extra("1.5.27") val spineWebVersion: String by extra("1.5.25") From 8c2df88c35b30d9d30401c21df38e7e777739edb Mon Sep 17 00:00:00 2001 From: Dmytro Dashenkov Date: Tue, 1 Sep 2020 23:08:08 +0300 Subject: [PATCH 7/9] Allow testing with local artifacts --- plugin/src/test/build.gradle.template | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugin/src/test/build.gradle.template b/plugin/src/test/build.gradle.template index 2a5939a0..f977bb57 100644 --- a/plugin/src/test/build.gradle.template +++ b/plugin/src/test/build.gradle.template @@ -22,6 +22,10 @@ plugins { id 'io.spine.tools.gradle.bootstrap' version '@spine-version@' } +repositories { + mavenLocal() +} + // This script file is created at a test runtime by the `GradleProject`. // // If Spine Bootstrap plugin requires a configuration, specific to a test case, the test case From 04769823c7aa30b45c07a51ff658b21eeae5b05a Mon Sep 17 00:00:00 2001 From: Dmytro Dashenkov Date: Thu, 3 Sep 2020 13:20:26 +0300 Subject: [PATCH 8/9] Add more generated source roots --- license-report.md | 2 +- .../tools/gradle/bootstrap/JavaExtension.java | 22 +++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/license-report.md b/license-report.md index bac0c7f2..f3c7348a 100644 --- a/license-report.md +++ b/license-report.md @@ -338,4 +338,4 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Sep 01 23:01:59 EEST 2020** 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 **Thu Sep 03 12:51:44 EEST 2020** 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/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java index c0ba3285..405a3659 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java +++ b/plugin/src/main/java/io/spine/tools/gradle/bootstrap/JavaExtension.java @@ -81,13 +81,21 @@ void enableGeneration() { private void configureIdea(IdeaModel idea) { IdeaModule module = idea.getModule(); - add(module.getSourceDirs(), Extension.getMainProtoSrcDir(project)); - add(module.getGeneratedSourceDirs(), Extension.getMainGenProtoDir(project)); - add(module.getGeneratedSourceDirs(), Extension.getMainGenGrpcDir(project)); - - add(module.getTestSourceDirs(), Extension.getTestProtoSrcDir(project)); - add(module.getGeneratedSourceDirs(), Extension.getTestGenProtoDir(project)); - add(module.getGeneratedSourceDirs(), Extension.getTestGenGrpcDir(project)); + Set mainSrc = module.getSourceDirs(); + Set mainGenerated = module.getGeneratedSourceDirs(); + add(mainSrc, Extension.getMainProtoSrcDir(project)); + add(mainGenerated, Extension.getMainGenProtoDir(project)); + add(mainGenerated, Extension.getMainGenGrpcDir(project)); + add(mainGenerated, Extension.getTargetGenColumnsRootDir(project)); + add(mainGenerated, Extension.getTargetGenRejectionsRootDir(project)); + + Set testSrc = module.getTestSourceDirs(); + add(testSrc, Extension.getTestProtoSrcDir(project)); + add(testSrc, Extension.getTestGenProtoDir(project)); + add(testSrc, Extension.getTestGenGrpcDir(project)); + + module.setDownloadJavadoc(true); + module.setDownloadSources(true); } private static void add(Set files, String path) { From 5ee197959b533471e1efe28ed86b9a19a83c8e25 Mon Sep 17 00:00:00 2001 From: Dmytro Dashenkov Date: Thu, 3 Sep 2020 16:33:28 +0300 Subject: [PATCH 9/9] Document duplicated values --- .../src/main/kotlin/prepare-config-resources.gradle.kts | 8 ++++++++ .../io/spine/tools/gradle/config/ArtifactSnapshot.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts b/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts index 693bf508..37a7ae4d 100644 --- a/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts +++ b/buildSrc/src/main/kotlin/prepare-config-resources.gradle.kts @@ -58,6 +58,14 @@ val spineVersion: String by extra val spineWebVersion: String by extra val spineGCloudVersion: String by extra +/* + This task creates the `artifact-snapshot.properties` file which is later added to the classpath of + the Bootstrap plugin. The file contains versions, artifact notations, repositories, etc. used in + the Gradle scripts which should also be used in the runtime of the Bootstrap plugin. + + The keys for the `artifact-snapshot.properties` file are duplicated in + the `io.spine.tools.gradle.config.ArtifactSnapshot` class, where the file is parsed. + */ val writeDependencies by tasks.registering { group = taskGroup diff --git a/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java b/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java index db09da8b..7e31b60f 100644 --- a/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java +++ b/plugin/src/main/java/io/spine/tools/gradle/config/ArtifactSnapshot.java @@ -72,6 +72,14 @@ private ArtifactSnapshot(Builder builder) { this.spineSnapshotRepository = checkNotNull(builder.spineSnapshotRepository); } + /** + * Loads the values from the {@code artifact-snapshot.properties} file from classpath. + * + *

The keys for the {@code artifact-snapshot.properties} file are duplicated in + * the {@code prepare-config-resources.gradle.kts} Gradle script, where the file is generated. + * + * @return loaded {@code ArtifactSnapshot} + */ private static ArtifactSnapshot load() { Resource file = Resource.file("artifact-snapshot.properties"); Properties properties = new Properties();