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> {
applynull10     override fun apply(project: Project) {
11         project.task("checkLibVersions") {
12             description =
13                 "Find any 3rd party libraries which have released new versions to the central Maven repo since we last upgraded."
14             doLast {
15                 project.configurations.flatMap { it.allDependencies }
16                     .toSet()
17                     .forEach { checkDependency(it) }
18             }
19         }
20     }
21 
Tasknull22     private fun Task.checkDependency(dependency: Dependency) {
23         val version = dependency.version
24         val group = dependency.group
25         val path = group?.replace(".", "/") ?: ""
26         val name = dependency.name
27         val metaDataUrl = "https://repo1.maven.org/maven2/$path/$name/maven-metadata.xml"
28         try {
29             val url = ResourceGroovyMethods.toURL(metaDataUrl)
30             val metaDataText = ResourceGroovyMethods.getText(url)
31             val metadata = XmlSlurper().parseText(metaDataText)
32             val newest = (metadata.getProperty("versioning") as GPathResult).getProperty("latest")
33             if (version != newest.toString()) {
34                 println("UPGRADE {\"group\": \"$group\", \"name\": \"$name\", \"current\": \"$version\", \"latest\": \"$newest\"}")
35             }
36         } catch (e: Throwable) {
37             logger.debug("Unable to download or parse $metaDataUrl: $e.message")
38         }
39     }
40 }
41