Explorar o código

Added gradle version checker

Vadik Sirekanyan %!s(int64=2) %!d(string=hai) anos
pai
achega
84d8f7da0a

+ 3 - 0
build.gradle.kts

@@ -1,5 +1,6 @@
 plugins {
     `kotlin-dsl`
+    kotlin("plugin.serialization") version embeddedKotlinVersion
     id("com.gradle.plugin-publish") version "1.2.0"
     id("org.sirekanyan.version-checker")
 }
@@ -15,6 +16,8 @@ repositories {
 dependencies {
     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
     implementation("io.ktor:ktor-client-cio:2.2.4")
+    implementation("io.ktor:ktor-client-content-negotiation:2.2.4")
+    implementation("io.ktor:ktor-serialization-kotlinx-json:2.2.4")
     implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.14.2")
     implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.2")
 }

+ 11 - 0
src/main/kotlin/org/sirekanyan/versionchecker/VersionCheckerPlugin.kt

@@ -8,6 +8,7 @@ import org.gradle.api.artifacts.SelfResolvingDependency
 import org.gradle.api.artifacts.dsl.RepositoryHandler
 import org.gradle.kotlin.dsl.create
 import org.sirekanyan.versionchecker.extensions.getSettingsRepositories
+import org.sirekanyan.versionchecker.gradlechecker.GradleVersionChecker
 
 class VersionCheckerPlugin : Plugin<Project> {
 
@@ -17,6 +18,7 @@ class VersionCheckerPlugin : Plugin<Project> {
         extension = project.extensions.create("versionCheckerOptions")
         project.task("versionChecker") {
             doLast {
+                executeGradleVersionChecker(project)
                 executeVersionChecker(
                     project.rootProject.buildscript.repositories,
                     project.rootProject.buildscript.configurations,
@@ -33,6 +35,15 @@ class VersionCheckerPlugin : Plugin<Project> {
         }
     }
 
+    private fun executeGradleVersionChecker(project: Project) {
+        val checker = GradleVersionChecker()
+        val current = project.gradle.gradleVersion
+        val max = checker.getMaxVersion()
+        if (current != max) {
+            println("gradle $current => $max")
+        }
+    }
+
     private fun executeVersionChecker(
         repositoryHandler: RepositoryHandler,
         configurationContainer: ConfigurationContainer,

+ 26 - 0
src/main/kotlin/org/sirekanyan/versionchecker/gradlechecker/GradleVersionChecker.kt

@@ -0,0 +1,26 @@
+package org.sirekanyan.versionchecker.gradlechecker
+
+import io.ktor.client.*
+import io.ktor.client.call.*
+import io.ktor.client.plugins.contentnegotiation.*
+import io.ktor.client.request.*
+import io.ktor.serialization.kotlinx.json.*
+import kotlinx.coroutines.runBlocking
+import kotlinx.serialization.json.Json
+import org.sirekanyan.versionchecker.gradlechecker.model.GradleVersion
+
+private const val CURRENT_URL = "https://services.gradle.org/versions/current"
+
+class GradleVersionChecker {
+
+    private val httpClient = HttpClient {
+        install(ContentNegotiation) {
+            json(Json { ignoreUnknownKeys = true })
+        }
+    }
+
+    fun getMaxVersion(): String = runBlocking {
+        httpClient.get(CURRENT_URL).body<GradleVersion>().version
+    }
+
+}

+ 6 - 0
src/main/kotlin/org/sirekanyan/versionchecker/gradlechecker/model/GradleVersion.kt

@@ -0,0 +1,6 @@
+package org.sirekanyan.versionchecker.gradlechecker.model
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+class GradleVersion(val version: String)