build-logic: reintroduce versions plugin

This commit is contained in:
Harsh Shandilya 2022-06-30 21:33:59 +05:30
parent 431444f87c
commit d83e68ac18
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
4 changed files with 52 additions and 1 deletions

View file

@ -46,6 +46,10 @@ gradlePlugin {
id = "dev.msfjarvis.claw.spotless"
implementationClass = "dev.msfjarvis.aps.gradle.SpotlessPlugin"
}
register("versions") {
id = "dev.msfjarvis.claw.versions"
implementationClass = "dev.msfjarvis.aps.gradle.DependencyUpdatesPlugin"
}
}
}
@ -54,4 +58,6 @@ dependencies {
implementation(libs.build.kotlin.gradle)
implementation(libs.build.kotlin.serialization)
implementation(libs.build.spotless)
implementation(libs.build.vcu)
implementation(libs.build.versions)
}

View file

@ -0,0 +1,43 @@
package dev.msfjarvis.aps.gradle
import com.github.benmanes.gradle.versions.VersionsPlugin
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
import java.util.Locale
import nl.littlerobots.vcu.plugin.VersionCatalogUpdateExtension
import nl.littlerobots.vcu.plugin.VersionCatalogUpdatePlugin
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.withType
@Suppress("Unused")
class DependencyUpdatesPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.pluginManager.apply(VersionsPlugin::class)
project.pluginManager.apply(VersionCatalogUpdatePlugin::class)
project.tasks.withType<DependencyUpdatesTask>().configureEach {
rejectVersionIf {
when (candidate.group) {
"com.android.application",
"com.android.library",
"com.google.accompanist",
"org.jetbrains.kotlin" -> true
else -> isNonStable(candidate.version) && !isNonStable(currentVersion)
}
}
checkForGradleUpdate = false
}
project.extensions.getByType<VersionCatalogUpdateExtension>().run {
keep.keepUnusedLibraries.set(true)
}
}
private fun isNonStable(version: String): Boolean {
val stableKeyword =
listOf("RELEASE", "FINAL", "GA").any { version.toUpperCase(Locale.ROOT).contains(it) }
val regex = "^[\\d,.v-]+(-r)?$".toRegex()
val isStable = stableKeyword || regex.matches(version)
return isStable.not()
}
}