Skip to content

Commit

Permalink
fix major/minor version bump bug
Browse files Browse the repository at this point in the history
  • Loading branch information
countableSet committed Sep 20, 2022
1 parent 9391f99 commit 4af3c2c
Show file tree
Hide file tree
Showing 3 changed files with 193 additions and 5 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down Expand Up @@ -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"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<MavenPublication>("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<MavenPublication>("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<MavenPublication>("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<MavenPublication>("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) {
Expand Down

0 comments on commit 4af3c2c

Please sign in to comment.