]> nmode's Git Repositories - signal-cli/blobdiff - buildSrc/src/main/kotlin/CheckLibVersionsPlugin.kt
Extract checkLibVersions task to gradle plugin
[signal-cli] / buildSrc / src / main / kotlin / CheckLibVersionsPlugin.kt
diff --git a/buildSrc/src/main/kotlin/CheckLibVersionsPlugin.kt b/buildSrc/src/main/kotlin/CheckLibVersionsPlugin.kt
new file mode 100644 (file)
index 0000000..701bd6e
--- /dev/null
@@ -0,0 +1,39 @@
+import groovy.util.XmlSlurper
+import groovy.util.slurpersupport.GPathResult
+import org.codehaus.groovy.runtime.ResourceGroovyMethods
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.Task
+import org.gradle.api.artifacts.Dependency
+
+class CheckLibVersionsPlugin : Plugin<Project> {
+    override fun apply(project: Project) {
+        project.task("checkLibVersions") {
+            description = "Find any 3rd party libraries which have released new versions to the central Maven repo since we last upgraded."
+            doLast {
+                project.configurations.flatMap { it.allDependencies }
+                        .toSet()
+                        .forEach { checkDependency(it) }
+            }
+        }
+    }
+
+    private fun Task.checkDependency(dependency: Dependency) {
+        val version = dependency.version
+        val group = dependency.group
+        val path = group?.replace(".", "/") ?: ""
+        val name = dependency.name
+        val metaDataUrl = "https://repo1.maven.org/maven2/$path/$name/maven-metadata.xml"
+        try {
+            val url = ResourceGroovyMethods.toURL(metaDataUrl)
+            val metaDataText = ResourceGroovyMethods.getText(url)
+            val metadata = XmlSlurper().parseText(metaDataText)
+            val newest = (metadata.getProperty("versioning") as GPathResult).getProperty("latest")
+            if (version != newest.toString()) {
+                println("UPGRADE {\"group\": \"$group\", \"name\": \"$name\", \"current\": \"$version\", \"latest\": \"$newest\"}")
+            }
+        } catch (e: Throwable) {
+            logger.debug("Unable to download or parse $metaDataUrl: $e.message")
+        }
+    }
+}