From 780d28e7744669cfdadc49fc9576bebed52037a6 Mon Sep 17 00:00:00 2001 From: Rachel Aurand Date: Tue, 20 Sep 2022 12:49:58 -0700 Subject: [PATCH] fix when applying version with root project without jar --- build.gradle.kts | 2 +- .../semanticversion/SemanticVersionPlugin.kt | 14 +- .../SemanticVersionPluginTest.kt | 166 +++++++++++++++++- 3 files changed, 175 insertions(+), 7 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index a552fe1..d7d5553 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,7 +32,7 @@ gradlePlugin { id = "dev.poolside.gradle.semantic-version" group = "dev.poolside.gradle.semanticversion" implementationClass = "dev.poolside.gradle.semanticversion.SemanticVersionPlugin" - version = "0.1.4" + version = "0.1.5" displayName = "Poolside Semantic Version Plugin" } } diff --git a/src/main/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPlugin.kt b/src/main/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPlugin.kt index 354d55e..c456cd3 100644 --- a/src/main/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPlugin.kt +++ b/src/main/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPlugin.kt @@ -14,11 +14,15 @@ class SemanticVersionPlugin : Plugin { this.group = "publishing" this.manual = extension.manual } - project.tasks.withType { - this.dependsOn("semanticVersion") + project.allprojects.forEach { p -> + p.tasks.withType { + this.dependsOn(":semanticVersion") + } } - project.tasks.withType { - this.dependsOn("semanticVersion") + project.allprojects.forEach { p -> + p.tasks.withType { + this.dependsOn(":semanticVersion") + } } } -} \ No newline at end of file +} diff --git a/src/test/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPluginTest.kt b/src/test/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPluginTest.kt index 09e4554..83b7a7a 100644 --- a/src/test/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPluginTest.kt +++ b/src/test/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPluginTest.kt @@ -25,7 +25,8 @@ class SemanticVersionPluginTest { companion object { @JvmStatic private fun gradleVersions(): Stream = Stream.of( - Arguments.of("7.4.2") + Arguments.of("7.4.2"), + Arguments.of("7.5.1") ) } @@ -366,6 +367,169 @@ class SemanticVersionPluginTest { assertTrue(valid.isEmpty()) } + @ParameterizedTest(name = "{index} gradle version {0}") + @MethodSource("gradleVersions") + fun `subproject version is set correctly`(gradleVersion: String) { + val build = """ + plugins { + `java-library` + `maven-publish` + id("dev.poolside.gradle.semantic-version") + } + allprojects { + apply(plugin = "java-library") + apply(plugin = "maven-publish") + repositories { + mavenCentral() + maven { url = uri("${mavenRepo.absolutePath}") } + } + java { + group = "dev.poolside.test" + version = "0.1" + } + publishing { + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + } + } + """.trimIndent() + FileManager.writeFile(folder = testProjectDir, filename = "build.gradle.kts", content = build) + val settings = """ + rootProject.name = "testing" + include("lib") + """.trimIndent() + FileManager.writeFile(folder = testProjectDir, filename = "settings.gradle.kts", content = settings) + val libBuild = """ + publishing { + publications { + create("mavenJava") { + artifactId = "my-sublibrary" + from(components["java"]) + } + } + } + dependencies { + api("org.apache.commons:commons-math3:3.6.1") + implementation("com.google.guava:guava:30.1.1-jre") + } + """.trimIndent() + FileManager.writeFile(folder = testProjectDir, path = "lib", filename = "build.gradle.kts", content = libBuild) + GradleRunner.create() + .withPluginClasspath() + .withProjectDir(testProjectDir) + .withGradleVersion(gradleVersion) + .withArguments("publish") +// .withDebug(true) + .build() + testProjectDir.walk().filter { it.name.startsWith("pom") }.forEach { pomFile -> + pomFile.forEachLine { println(it) } + val pom = PomParser.parse(pomFile.absolutePath) + assertEquals("0.1.0", pom.version) + } + val valid = mutableListOf( + "${mavenRepo.absolutePath}/dev/poolside/test/my-sublibrary/0.1.0/my-sublibrary-0.1.0.jar" + ) + mavenRepo.walk().filter { it.name.endsWith(".jar") }.forEach { jarFile -> + if (valid.contains(jarFile.absolutePath)) { + valid.remove(jarFile.absolutePath) + } else { + fail("missing jarfile ${jarFile.absolutePath}") + } + } + assertTrue(valid.isEmpty()) + } + + @ParameterizedTest(name = "{index} gradle version {0}") + @MethodSource("gradleVersions") + fun `two subprojects version is set correctly`(gradleVersion: String) { + val build = """ + plugins { + `java-library` + `maven-publish` + id("dev.poolside.gradle.semantic-version") + } + allprojects { + apply(plugin = "java-library") + apply(plugin = "maven-publish") + repositories { + mavenCentral() + maven { url = uri("${mavenRepo.absolutePath}") } + } + java { + group = "dev.poolside.test" + version = "0.1" + } + publishing { + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + } + } + """.trimIndent() + FileManager.writeFile(folder = testProjectDir, filename = "build.gradle.kts", content = build) + val settings = """ + rootProject.name = "testing" + include("lib") + include("lib2") + """.trimIndent() + FileManager.writeFile(folder = testProjectDir, filename = "settings.gradle.kts", content = settings) + val libBuild = """ + publishing { + publications { + create("mavenJava") { + artifactId = "my-sublibrary" + from(components["java"]) + } + } + } + dependencies { + api("org.apache.commons:commons-math3:3.6.1") + implementation("com.google.guava:guava:30.1.1-jre") + } + """.trimIndent() + FileManager.writeFile(folder = testProjectDir, path = "lib", filename = "build.gradle.kts", content = libBuild) + val lib2Build = """ + publishing { + publications { + create("mavenJava") { + artifactId = "my-sublibrary2" + from(components["java"]) + } + } + } + dependencies { + api("org.apache.commons:commons-math3:3.6.1") + implementation("com.google.guava:guava:30.1.1-jre") + } + """.trimIndent() + FileManager.writeFile(folder = testProjectDir, path = "lib2", filename = "build.gradle.kts", content = lib2Build) + GradleRunner.create() + .withPluginClasspath() + .withProjectDir(testProjectDir) + .withGradleVersion(gradleVersion) + .withArguments("publish") +// .withDebug(true) + .build() + testProjectDir.walk().filter { it.name.startsWith("pom") }.forEach { pomFile -> + pomFile.forEachLine { println(it) } + val pom = PomParser.parse(pomFile.absolutePath) + assertEquals("0.1.0", pom.version) + } + val valid = mutableListOf( + "${mavenRepo.absolutePath}/dev/poolside/test/my-sublibrary/0.1.0/my-sublibrary-0.1.0.jar", + "${mavenRepo.absolutePath}/dev/poolside/test/my-sublibrary2/0.1.0/my-sublibrary2-0.1.0.jar" + ) + mavenRepo.walk().filter { it.name.endsWith(".jar") }.forEach { jarFile -> + if (valid.contains(jarFile.absolutePath)) { + valid.remove(jarFile.absolutePath) + } else { + fail("missing jarfile ${jarFile.absolutePath}") + } + } + assertTrue(valid.isEmpty()) + } + @ParameterizedTest(name = "{index} gradle version {0}") @MethodSource("gradleVersions") fun `bom version set correct`(gradleVersion: String) {