Skip to content

Commit

Permalink
Update logic and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pawelpasterz committed Dec 18, 2020
1 parent 63cbcda commit 1b96d4c
Show file tree
Hide file tree
Showing 13 changed files with 174 additions and 96 deletions.
9 changes: 0 additions & 9 deletions flank-scripts/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import com.jfrog.bintray.gradle.BintrayExtension
import java.util.*
import java.nio.file.Paths
import java.io.ByteArrayOutputStream
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
application
Expand Down Expand Up @@ -122,7 +121,6 @@ detekt {
tasks["check"].dependsOn(tasks["detekt"])

dependencies {
implementation(gradleApi())
implementation(kotlin("stdlib", org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION)) // or "stdlib-jdk8"
implementation(Dependencies.KOTLIN_SERIALIZATION)
implementation(Dependencies.Fuel.CORE)
Expand All @@ -144,13 +142,6 @@ dependencies {
testImplementation(Dependencies.SYSTEM_RULES)
}

tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs = listOf("-Xinline-classes")
}
}

val prepareJar by tasks.registering(Copy::class) {
dependsOn("shadowJar")
from("$buildDir/libs")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package flank.scripts.dependencies.update

import flank.scripts.utils.Version
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

Expand All @@ -13,7 +14,7 @@ data class DependenciesResultCheck(
@Serializable
data class Dependency(
val group: String,
val version: String,
val version: Version,
val name: String? = null,
@SerialName("available") val availableVersion: AvailableVersion? = null
)
Expand All @@ -25,7 +26,7 @@ data class Dependencies(

@Serializable
data class AvailableVersion(
val release: String?,
val milestone: String?,
val integration: String?
val release: Version?,
val milestone: Version?,
val integration: Version?
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ val Dependency.versionToUpdate
?: availableVersion?.integration
?: version

fun GradleDependency.needsUpdate() = (running.version != current.version) || (running.version != releaseCandidate.version)
fun GradleDependency.needsUpdate() = running.version < current.version || running.version < releaseCandidate.version
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package flank.scripts.dependencies.update

import flank.scripts.utils.Version

data class DependencyUpdate(
val name: String,
val valName: String,
val oldVersion: String,
val newVersion: String
val oldVersion: Version,
val newVersion: Version
)
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
package flank.scripts.dependencies.update

import flank.scripts.utils.Version
import kotlinx.serialization.Serializable

@Serializable
data class GradleDependency(
val current: GradleVersion,
val nightly: GradleVersion,
val releaseCandidate: GradleVersion,
val running: GradleVersion
val current: GradleReleaseChannel,
val nightly: GradleReleaseChannel,
val releaseCandidate: GradleReleaseChannel,
val running: GradleReleaseChannel
)

@Serializable
data class GradleVersion(
val version: String,
data class GradleReleaseChannel(
val version: Version,
val reason: String,
val isUpdateAvailable: Boolean,
val isFailure: Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,9 @@ private fun updateGradleWrapper(gradleDependency: GradleDependency, gradleWrappe
findAllGradleWrapperPropertiesFiles(gradleWrapperPropertiesPath)
.forEach {
val from = gradleDependency.running.version
val to = if (gradleDependency.releaseCandidate.isUpdateAvailable)
gradleDependency.releaseCandidate.version
else
gradleDependency.current.version
val to = maxOf(gradleDependency.releaseCandidate.version, gradleDependency.current.version)
println("Update gradle wrapper $from to $to in file ${it.path}")
it.updateGradleWrapperPropertiesFile(from, to)
it.updateGradleWrapperPropertiesFile(from.toString(), to.toString())
}
}

Expand All @@ -28,8 +25,6 @@ private fun findAllGradleWrapperPropertiesFiles(gradleWrapperPropertiesPath: Str
.filter { it.fileName.toString() == GRADLE_WRAPPER_PROPERTIES_FILE }
.map { it.toFile() }

private fun File.updateGradleWrapperPropertiesFile(from: String, to: String) {
writeText(readText().replace(from, to))
}
private fun File.updateGradleWrapperPropertiesFile(from: String, to: String) = writeText(readText().replace(from, to))

private const val GRADLE_WRAPPER_PROPERTIES_FILE = "gradle-wrapper.properties"
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ private fun String.getInsertLine(
.find { containsValDeclaration(it) }
?.let {
println("Updated dependency ${it.name} from ${it.oldVersion} to ${it.newVersion}")
replaceFirst(it.oldVersion, it.newVersion)
replaceFirst(it.oldVersion.toString(), it.newVersion.toString())
}
?: this

Expand Down
22 changes: 19 additions & 3 deletions flank-scripts/src/main/kotlin/flank/scripts/utils/Version.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
package flank.scripts.utils

class Version constructor(
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder

object VersionSerializer : KSerializer<Version> {
override val descriptor = PrimitiveSerialDescriptor("Version", PrimitiveKind.STRING)

override fun deserialize(decoder: Decoder): Version = parseToVersion(decoder.decodeString())

override fun serialize(encoder: Encoder, value: Version) = encoder.encodeString(value.toString())
}

@Serializable(with = VersionSerializer::class)
data class Version(
private val major: Int? = null,
private val minor: Int? = null,
private val micro: Int? = null,
private val patch: Int? = null,
private val qualifier: String? = null
) {
) : Comparable<Version> {
private val hasSuffix = major != null && qualifier != null

operator fun compareTo(other: Version): Int = when {
override operator fun compareTo(other: Version): Int = when {
major differs other.major -> compareValuesBy(major, other.major, { it ?: 0 })
minor differs other.minor -> compareValuesBy(minor, other.minor, { it ?: 0 })
micro differs other.micro -> compareValuesBy(micro, other.micro, { it ?: 0 })
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package flank.scripts.dependencies.update

import flank.scripts.utils.toAvailableVersion
import flank.scripts.utils.toDependency
import flank.scripts.utils.toGradleReleaseChannel
import org.junit.Test

import org.junit.Assert.assertEquals
Expand All @@ -11,7 +14,7 @@ class DependencyExtensionsTest {
@Test
fun `should return group with name`() {
// given
val dependency = Dependency(
val dependency = toDependency(
"group",
"1.0",
"name"
Expand All @@ -26,11 +29,11 @@ class DependencyExtensionsTest {

@Test
fun `should get version to update if release available`() {
val dependency = Dependency(
val dependency = toDependency(
"group",
"1.0",
"name",
AvailableVersion(
toAvailableVersion(
"1.1", null, null
)
)
Expand All @@ -44,11 +47,11 @@ class DependencyExtensionsTest {

@Test
fun `should get version to update if milestone available`() {
val dependency = Dependency(
val dependency = toDependency(
"group",
"1.0",
"name",
AvailableVersion(null, "1.1", null)
toAvailableVersion(null, "1.1", null)
)

// when
Expand All @@ -60,11 +63,11 @@ class DependencyExtensionsTest {

@Test
fun `should get version to update if integration available`() {
val dependency = Dependency(
val dependency = toDependency(
"group",
"1.0",
"name",
AvailableVersion(null, null, "1.1")
toAvailableVersion(null, null, "1.1")
)

// when
Expand All @@ -76,7 +79,7 @@ class DependencyExtensionsTest {

@Test
fun `should get current version to update if no update`() {
val dependency = Dependency(
val dependency = toDependency(
"group",
"1.0",
"name",
Expand All @@ -94,22 +97,22 @@ class DependencyExtensionsTest {
fun `should properly check if gradle needs update`() {
// given
val gradleWhichNeedsUpdate = GradleDependency(
current = GradleVersion("1.1", "test", false, false),
nightly = GradleVersion("1.3", "test", false, false),
releaseCandidate = GradleVersion("1.2rc", "test", false, false),
running = GradleVersion("1", "test", false, false),
current = toGradleReleaseChannel("1.1", "test", false, false),
nightly = toGradleReleaseChannel("1.3", "test", false, false),
releaseCandidate = toGradleReleaseChannel("1.2rc", "test", false, false),
running = toGradleReleaseChannel("1", "test", false, false),
)
val gradleWhichNeedsUpdateRc = GradleDependency(
current = GradleVersion("1.1", "test", false, false),
nightly = GradleVersion("1.3", "test", false, false),
releaseCandidate = GradleVersion("1.2rc", "test", false, false),
running = GradleVersion("1.1", "test", false, false),
current = toGradleReleaseChannel("1.1", "test", false, false),
nightly = toGradleReleaseChannel("1.3", "test", false, false),
releaseCandidate = toGradleReleaseChannel("1.2rc", "test", false, false),
running = toGradleReleaseChannel("1.1", "test", false, false),
)
val gradleWhichDoesNotNeedUpdate = GradleDependency(
current = GradleVersion("1.1", "test", false, false),
nightly = GradleVersion("1.3", "test", false, false),
releaseCandidate = GradleVersion("1.1", "test", false, false),
running = GradleVersion("1.1", "test", false, false),
current = toGradleReleaseChannel("1.1", "test", false, false),
nightly = toGradleReleaseChannel("1.3", "test", false, false),
releaseCandidate = toGradleReleaseChannel("1.1", "test", false, false),
running = toGradleReleaseChannel("1.1", "test", false, false),
)


Expand Down
Loading

0 comments on commit 1b96d4c

Please sign in to comment.