]> nmode's Git Repositories - signal-cli/blob - buildSrc/src/main/kotlin/CheckLibVersionsPlugin.kt
Extract checkLibVersions task to gradle plugin
[signal-cli] / buildSrc / src / main / kotlin / CheckLibVersionsPlugin.kt
1 import groovy.util.XmlSlurper
2 import groovy.util.slurpersupport.GPathResult
3 import org.codehaus.groovy.runtime.ResourceGroovyMethods
4 import org.gradle.api.Plugin
5 import org.gradle.api.Project
6 import org.gradle.api.Task
7 import org.gradle.api.artifacts.Dependency
8
9 class CheckLibVersionsPlugin : Plugin<Project> {
10 override fun apply(project: Project) {
11 project.task("checkLibVersions") {
12 description = "Find any 3rd party libraries which have released new versions to the central Maven repo since we last upgraded."
13 doLast {
14 project.configurations.flatMap { it.allDependencies }
15 .toSet()
16 .forEach { checkDependency(it) }
17 }
18 }
19 }
20
21 private fun Task.checkDependency(dependency: Dependency) {
22 val version = dependency.version
23 val group = dependency.group
24 val path = group?.replace(".", "/") ?: ""
25 val name = dependency.name
26 val metaDataUrl = "https://repo1.maven.org/maven2/$path/$name/maven-metadata.xml"
27 try {
28 val url = ResourceGroovyMethods.toURL(metaDataUrl)
29 val metaDataText = ResourceGroovyMethods.getText(url)
30 val metadata = XmlSlurper().parseText(metaDataText)
31 val newest = (metadata.getProperty("versioning") as GPathResult).getProperty("latest")
32 if (version != newest.toString()) {
33 println("UPGRADE {\"group\": \"$group\", \"name\": \"$name\", \"current\": \"$version\", \"latest\": \"$newest\"}")
34 }
35 } catch (e: Throwable) {
36 logger.debug("Unable to download or parse $metaDataUrl: $e.message")
37 }
38 }
39 }