diff --git a/build.gradle.kts b/build.gradle.kts index 89f4bf4..a552fe1 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.3" + version = "0.1.4" displayName = "Poolside Semantic Version Plugin" } } diff --git a/src/main/kotlin/dev/poolside/gradle/semanticversion/VersionFinder.kt b/src/main/kotlin/dev/poolside/gradle/semanticversion/VersionFinder.kt index 046bf8e..fbb00b5 100644 --- a/src/main/kotlin/dev/poolside/gradle/semanticversion/VersionFinder.kt +++ b/src/main/kotlin/dev/poolside/gradle/semanticversion/VersionFinder.kt @@ -32,7 +32,7 @@ object VersionFinder { logger.lifecycle("No published version of '${publication.groupId}:${publication.artifactId}:${publication.version}' resolved to '$newVersion'") newVersion } else { - val newVersion = incrementVersion(latestVersion!!) + val newVersion = compareAndIncrementVersion(versionParser.transform(publication.version), latestVersion!!) logger.lifecycle("Resolved published version of '${publication.groupId}:${publication.artifactId}:${publication.version}' to '$newVersion'") newVersion } @@ -61,9 +61,17 @@ object VersionFinder { return result.versions } - private fun incrementVersion(version: Version): String { - val parts = version.numericParts.filterNotNull() + private fun compareAndIncrementVersion(original: Version, found: Version): String { + // major version bump + if (original.numericParts[0] > found.numericParts[0]) { + return original.source + ".0" + } + // minor version bump + if (original.numericParts[1] > found.numericParts[1]) { + return original.source + ".0" + } + val parts = found.numericParts.filterNotNull() val last = parts.last() + 1 return parts.dropLast(1).joinToString(".") + ".$last" } -} \ 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 3b79bae..09e4554 100644 --- a/src/test/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPluginTest.kt +++ b/src/test/kotlin/dev/poolside/gradle/semanticversion/SemanticVersionPluginTest.kt @@ -97,6 +97,186 @@ class SemanticVersionPluginTest { assertEquals("0.1.1", pom.version) } + @ParameterizedTest(name = "{index} gradle version {0}") + @MethodSource("gradleVersions") + fun `minor version bump`(gradleVersion: String) { + var build = """ + plugins { + java + `maven-publish` + id("dev.poolside.gradle.semantic-version") + } + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + group = "dev.poolside.test" + version = "0.1" + publishing { + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + publications { + create("mavenJava") { + artifactId = "my-library" + from(components["java"]) + } + } + } + """.trimIndent() + val settings = """rootProject.name = "testing"""" + File(testProjectDir, "build.gradle.kts").writeText(build) + File(testProjectDir, "settings.gradle.kts").writeText(settings) + GradleRunner.create() + .withPluginClasspath() + .withProjectDir(testProjectDir) + .withGradleVersion(gradleVersion) + .withArguments("publish") +// .withDebug(true) + .build() + var version = "0.1.0" + var pomFile = testProjectDir.walk().filter { it.name.startsWith("pom") }.first() + var pom = PomParser.parse(pomFile.absolutePath) + assertEquals(version, pom.version) + var jarFile = mavenRepo.walk().filter { it.name.endsWith("my-library-$version.jar") }.first() + assertTrue(jarFile.absolutePath.endsWith("/dev/poolside/test/my-library/$version/my-library-$version.jar"), jarFile.absolutePath) + var publishedPom = mavenRepo.walk().filter { it.name.equals("my-library-$version.pom") }.first() + pom = PomParser.parse(publishedPom.absolutePath) + assertEquals(version, pom.version) + + build = """ + plugins { + java + `maven-publish` + id("dev.poolside.gradle.semantic-version") + } + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + group = "dev.poolside.test" + version = "0.2" + publishing { + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + publications { + create("mavenJava") { + artifactId = "my-library" + from(components["java"]) + } + } + } + """.trimIndent() + File(testProjectDir, "build.gradle.kts").writeText(build) + + // should +0 + GradleRunner.create() + .withPluginClasspath() + .withProjectDir(testProjectDir) + .withGradleVersion(gradleVersion) + .withArguments("publish") +// .withDebug(true) + .build() + version = "0.2.0" + pomFile = testProjectDir.walk().filter { it.name.startsWith("pom") }.first() + pom = PomParser.parse(pomFile.absolutePath) + assertEquals(version, pom.version) + jarFile = mavenRepo.walk().filter { it.name.endsWith("my-library-$version.jar") }.first() + assertTrue(jarFile.absolutePath.endsWith("/dev/poolside/test/my-library/$version/my-library-$version.jar"), jarFile.absolutePath) + publishedPom = mavenRepo.walk().filter { it.name.equals("my-library-$version.pom") }.first() + pom = PomParser.parse(publishedPom.absolutePath) + assertEquals(version, pom.version) + } + + @ParameterizedTest(name = "{index} gradle version {0}") + @MethodSource("gradleVersions") + fun `major version bump`(gradleVersion: String) { + var build = """ + plugins { + java + `maven-publish` + id("dev.poolside.gradle.semantic-version") + } + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + group = "dev.poolside.test" + version = "0.1" + publishing { + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + publications { + create("mavenJava") { + artifactId = "my-library" + from(components["java"]) + } + } + } + """.trimIndent() + val settings = """rootProject.name = "testing"""" + File(testProjectDir, "build.gradle.kts").writeText(build) + File(testProjectDir, "settings.gradle.kts").writeText(settings) + GradleRunner.create() + .withPluginClasspath() + .withProjectDir(testProjectDir) + .withGradleVersion(gradleVersion) + .withArguments("publish") +// .withDebug(true) + .build() + var version = "0.1.0" + var pomFile = testProjectDir.walk().filter { it.name.startsWith("pom") }.first() + var pom = PomParser.parse(pomFile.absolutePath) + assertEquals(version, pom.version) + var jarFile = mavenRepo.walk().filter { it.name.endsWith("my-library-$version.jar") }.first() + assertTrue(jarFile.absolutePath.endsWith("/dev/poolside/test/my-library/$version/my-library-$version.jar"), jarFile.absolutePath) + var publishedPom = mavenRepo.walk().filter { it.name.equals("my-library-$version.pom") }.first() + pom = PomParser.parse(publishedPom.absolutePath) + assertEquals(version, pom.version) + + build = """ + plugins { + java + `maven-publish` + id("dev.poolside.gradle.semantic-version") + } + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + group = "dev.poolside.test" + version = "1.0" + publishing { + repositories { + maven { url = uri("${mavenRepo.absolutePath}") } + } + publications { + create("mavenJava") { + artifactId = "my-library" + from(components["java"]) + } + } + } + """.trimIndent() + File(testProjectDir, "build.gradle.kts").writeText(build) + + // should +0 + GradleRunner.create() + .withPluginClasspath() + .withProjectDir(testProjectDir) + .withGradleVersion(gradleVersion) + .withArguments("publish") +// .withDebug(true) + .build() + version = "1.0.0" + pomFile = testProjectDir.walk().filter { it.name.startsWith("pom") }.first() + pom = PomParser.parse(pomFile.absolutePath) + assertEquals(version, pom.version) + jarFile = mavenRepo.walk().filter { it.name.endsWith("my-library-$version.jar") }.first() + assertTrue(jarFile.absolutePath.endsWith("/dev/poolside/test/my-library/$version/my-library-$version.jar"), jarFile.absolutePath) + publishedPom = mavenRepo.walk().filter { it.name.equals("my-library-$version.pom") }.first() + pom = PomParser.parse(publishedPom.absolutePath) + assertEquals(version, pom.version) + } + @ParameterizedTest(name = "{index} gradle version {0}") @MethodSource("gradleVersions") fun `modules version is set correctly`(gradleVersion: String) {