diff --git a/config b/config index 16d76925..17e0dbb8 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit 16d76925f19d3e883389169039fb1a8744a6aa82 +Subproject commit 17e0dbb819839d9b65b711efb085b38bcbb5eae9 diff --git a/dependencies.md b/dependencies.md index c305adb6..e182bcaa 100644 --- a/dependencies.md +++ b/dependencies.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.tools:classic-codegen:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:classic-codegen:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -888,14 +888,14 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:gradle-plugin-api:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:gradle-plugin-api:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0. @@ -1838,14 +1838,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:gradle-plugin-api-test-fixtures:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:gradle-plugin-api-test-fixtures:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0. @@ -2321,14 +2321,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:gradle-root-plugin:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:gradle-root-plugin:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -3195,14 +3195,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:intellij-platform:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:intellij-platform:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -4316,14 +4316,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:intellij-platform-java:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:intellij-platform-java:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -6135,14 +6135,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:34 WET 2025** using +This report was generated on **Fri Feb 20 20:25:49 WET 2026** 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.tools:jvm-tool-plugins:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:jvm-tool-plugins:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -7029,14 +7029,14 @@ This report was generated on **Tue Dec 02 18:51:34 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:jvm-tools:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:jvm-tools:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 26.0.2. @@ -7836,14 +7836,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:plugin-base:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:plugin-base:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -8738,14 +8738,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:plugin-testlib:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:plugin-testlib:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2. @@ -9744,14 +9744,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:protobuf-setup-plugins:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:protobuf-setup-plugins:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -10658,14 +10658,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:49 WET 2026** 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.tools:psi:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:psi:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -11822,14 +11822,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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.tools:psi-java:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:psi-java:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -13704,14 +13704,14 @@ This report was generated on **Tue Dec 02 18:51:33 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:34 WET 2025** using +This report was generated on **Fri Feb 20 20:25:49 WET 2026** 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.tools:tool-base:2.0.0-SNAPSHOT.371` +# Dependencies of `io.spine.tools:tool-base:2.0.0-SNAPSHOT.372` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -14631,6 +14631,6 @@ This report was generated on **Tue Dec 02 18:51:34 WET 2025** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Dec 02 18:51:33 WET 2025** using +This report was generated on **Fri Feb 20 20:25:48 WET 2026** 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/gradle-root-plugin/src/main/kotlin/io/spine/tools/gradle/root/RootPlugin.kt b/gradle-root-plugin/src/main/kotlin/io/spine/tools/gradle/root/RootPlugin.kt index f5fb7c6b..367a084a 100644 --- a/gradle-root-plugin/src/main/kotlin/io/spine/tools/gradle/root/RootPlugin.kt +++ b/gradle-root-plugin/src/main/kotlin/io/spine/tools/gradle/root/RootPlugin.kt @@ -24,13 +24,19 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("UnstableApiUsage") // We need to use unstable settings API. + package io.spine.tools.gradle.root import io.spine.tools.gradle.DslSpec +import io.spine.tools.gradle.applyStandard import io.spine.tools.gradle.project.ProjectPlugin import io.spine.tools.gradle.root.RootExtension.Companion.NAME import org.gradle.api.Project import org.gradle.api.file.Directory +import org.gradle.api.initialization.resolve.RepositoriesMode +import org.gradle.api.internal.GradleInternal +import org.gradle.api.internal.SettingsInternal import org.gradle.api.plugins.ExtensionAware /** @@ -38,6 +44,10 @@ import org.gradle.api.plugins.ExtensionAware * * The extension is used by Gradle plugins of libraries that extend * the [root extension][RootExtension] with custom configuration DSL. + * + * The plugin also applies repositories [standard for Spine SDK][applyStandard] + * to the project IFF `dependencyResolutionManagement.repositoriesMode` property set + * in `settings.gradle.kts` to [RepositoriesMode.PREFER_PROJECT] or assumed such. */ public class RootPlugin : ProjectPlugin(DslSpec(NAME, RootExtension::class)) { @@ -58,11 +68,12 @@ public class RootPlugin : } /** - * Applies the plugin to the given project by forcing creation of the [extension]. + * Applies the plugin to the given [project]. */ override fun apply(project: Project) { super.apply(project) createExtension() + project.tryApplyStandardRepositories() check(extension != null) { "The extension of the `${this::class.simpleName}` has not been created." } @@ -76,3 +87,30 @@ public class RootPlugin : public const val ID: String = "io.spine.root" } } + +/** + * Attempts to apply repositories [standard for Spine SDK][applyStandard] to the project + * by inspecting the `dependencyResolutionManagement.repositoriesMode` value set + * in `settings.gradle.kts`. + * + * If the value set explicitly or assumed as [RepositoriesMode.PREFER_PROJECT], + * the repositories are applied. + */ +private fun Project.tryApplyStandardRepositories() { + val settings = project.settings + if (settings == null) { + repositories.applyStandard() + return + } + val mode = settings.dependencyResolutionManagement.repositoriesMode.get() + if (mode == RepositoriesMode.PREFER_PROJECT) { + repositories.applyStandard() + } +} + +private val Project.settings: SettingsInternal? + get() = try { + (project.gradle as GradleInternal).settings + } catch (_: IllegalStateException) { + null + } diff --git a/gradle-root-plugin/src/test/kotlin/io/spine/tools/gradle/root/RootPluginSpec.kt b/gradle-root-plugin/src/test/kotlin/io/spine/tools/gradle/root/RootPluginSpec.kt index 726f8c2a..45aeac95 100644 --- a/gradle-root-plugin/src/test/kotlin/io/spine/tools/gradle/root/RootPluginSpec.kt +++ b/gradle-root-plugin/src/test/kotlin/io/spine/tools/gradle/root/RootPluginSpec.kt @@ -26,9 +26,11 @@ package io.spine.tools.gradle.root +import io.kotest.matchers.collections.shouldContain import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe import io.kotest.matchers.string.shouldContain +import io.kotest.matchers.string.shouldNotContain import io.spine.tools.gradle.task.BaseTaskName import io.spine.tools.gradle.testing.Gradle import io.spine.tools.gradle.testing.Gradle.BUILD_SUCCESSFUL @@ -36,6 +38,7 @@ import io.spine.tools.gradle.testing.runGradleBuild import io.spine.tools.gradle.testing.under import java.io.File import org.gradle.api.Project +import org.gradle.api.artifacts.repositories.MavenArtifactRepository import org.gradle.testfixtures.ProjectBuilder import org.gradle.testkit.runner.TaskOutcome import org.junit.jupiter.api.BeforeEach @@ -76,6 +79,92 @@ internal class RootPluginSpec { } } + @Test + fun `apply standard repositories`() { + project.pluginManager.apply(pluginClass) + + val repositories = project.repositories.map { it.name } + repositories shouldContain "MavenLocal" + repositories shouldContain "MavenRepo" + + val mavenRepositories = project.repositories.withType(MavenArtifactRepository::class.java) + val urls = mavenRepositories.map { it.url.toString() } + + urls shouldContain "https://europe-maven.pkg.dev/spine-event-engine/releases" + urls shouldContain "https://europe-maven.pkg.dev/spine-event-engine/snapshots" + } + + @Test + fun `apply repositories if 'repositoriesMode' is 'PREFER_PROJECT'`( + @TempDir projectDir: File + ) { + Gradle.settingsFile.under(projectDir).writeText( + """ + dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.PREFER_PROJECT) + } + """.trimIndent() + ) + Gradle.buildFile.under(projectDir).writeText( + """ + plugins { + id("io.spine.root") + } + + tasks.register("checkRepos") { + doLast { + if (project.repositories.isEmpty()) { + println("NO_REPOS") + } else { + project.repositories.forEach { + println("REPO: " + it.name) + } + } + } + } + """.trimIndent() + ) + + val result = runGradleBuild(projectDir, listOf("checkRepos")) + result.output shouldContain "REPO: MavenLocal" + } + + @Test + fun `not apply repositories if 'repositoriesMode' is other than 'PREFER_PROJECT'`( + @TempDir projectDir: File + ) { + Gradle.settingsFile.under(projectDir).writeText( + """ + dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) + } + """.trimIndent() + ) + Gradle.buildFile.under(projectDir).writeText( + """ + plugins { + id("io.spine.root") + } + + tasks.register("checkRepos") { + doLast { + if (project.repositories.isEmpty()) { + println("NO_REPOS") + } else { + project.repositories.forEach { + println("REPO: " + it.name) + } + } + } + } + """.trimIndent() + ) + + val result = runGradleBuild(projectDir, listOf("checkRepos")) + result.output shouldContain "NO_REPOS" + result.output shouldNotContain "REPO: MavenLocal" + } + @Test fun `be applied via its ID`(@TempDir projectDir: File) { Gradle.buildFile.under(projectDir).writeText( diff --git a/pom.xml b/pom.xml index 08e4b3fa..9f6217bc 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.tools tool-base -2.0.0-SNAPSHOT.371 +2.0.0-SNAPSHOT.372 2015 @@ -416,7 +416,7 @@ all modules and does not describe the project structure per-subproject. org.jetbrains.kotlin kotlin-build-tools-impl - null + 2.2.21 org.jetbrains.kotlin diff --git a/version.gradle.kts b/version.gradle.kts index 4724f793..dc1ad09f 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -24,4 +24,4 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -val versionToPublish: String by extra("2.0.0-SNAPSHOT.371") +val versionToPublish: String by extra("2.0.0-SNAPSHOT.372")