X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/c72aeed8bba4d5ca873b36b4edb2b8eda9c24ec7..4eaec8359423df351a2c978095419e65e8dbac49:/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 index 00000000..701bd6e3 --- /dev/null +++ b/buildSrc/src/main/kotlin/CheckLibVersionsPlugin.kt @@ -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 { + 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") + } + } +}