diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 35efb2cf..bddfbf73 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -54,6 +54,10 @@ gradlePlugin { id = "dev.msfjarvis.claw.versioning-plugin" implementationClass = "dev.msfjarvis.claw.gradle.versioning.VersioningPlugin" } + register("versions") { + id = "dev.msfjarvis.claw.versions" + implementationClass = "dev.msfjarvis.claw.gradle.DependencyUpdatesPlugin" + } } } @@ -64,6 +68,7 @@ dependencies { implementation(libs.build.semver) implementation(libs.build.sentry) implementation(libs.build.spotless) + implementation(libs.build.vcu) // Expose the generated version catalog API to the plugin. implementation(files(libs::class.java.superclass.protectionDomain.codeSource.location)) diff --git a/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/DependencyUpdatesPlugin.kt b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/DependencyUpdatesPlugin.kt new file mode 100644 index 00000000..610c817f --- /dev/null +++ b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/DependencyUpdatesPlugin.kt @@ -0,0 +1,36 @@ +/* + * Copyright © 2024 Harsh Shandilya. + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + */ +package dev.msfjarvis.claw.gradle + +import com.github.zafarkhaja.semver.Version +import kotlin.jvm.optionals.getOrNull +import nl.littlerobots.vcu.plugin.VersionCatalogUpdateExtension +import nl.littlerobots.vcu.plugin.VersionCatalogUpdatePlugin +import nl.littlerobots.vcu.plugin.versionSelector +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.configure + +@Suppress("Unused") +class DependencyUpdatesPlugin : Plugin { + override fun apply(project: Project) { + project.pluginManager.apply(VersionCatalogUpdatePlugin::class) + project.extensions.configure { + keep.keepUnusedLibraries.set(true) + versionSelector { + val currentVersion = Version.tryParse(it.currentVersion).getOrNull() + val newVersion = Version.tryParse(it.candidate.version).getOrNull() + if (currentVersion == null || newVersion == null) { + false + } else { + newVersion.isHigherThan(currentVersion) + } + } + } + } +} diff --git a/build.gradle.kts b/build.gradle.kts index b0b1e7f0..042e9fae 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,5 +6,6 @@ */ plugins { id("dev.msfjarvis.claw.spotless") + id("dev.msfjarvis.claw.versions") id("dev.msfjarvis.claw.kotlin-common") } diff --git a/gradle.properties b/gradle.properties index 8116204d..969a290a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -53,3 +53,8 @@ android.suppressUnsupportedOptionWarnings=android.dependencyResolutionAtConfigur # Make Spotless default to keeping license headers years in sync spotlessSetLicenseHeaderYearsFromGitHistory=true + +# Version Catalog Update Plugin workarounds and fixes +systemProp.javax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl +systemProp.javax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl +systemProp.javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 112be88f..fbd3f002 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -60,6 +60,7 @@ build-kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", ve build-semver = "com.github.zafarkhaja:java-semver:0.10.2" build-sentry = "io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin:4.2.0" build-spotless = "com.diffplug.spotless:spotless-plugin-gradle:6.25.0" +build-vcu = "nl.littlerobots.version-catalog-update:nl.littlerobots.version-catalog-update.gradle.plugin:0.8.4" coil = { module = "io.coil-kt:coil", version.ref = "coil" } coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" } compose-richtext-markdown = { module = "com.halilibo.compose-richtext:richtext-commonmark", version.ref = "richtext" }