refactor(build): use a hack to expose catalog type-safe API

This commit is contained in:
Harsh Shandilya 2023-11-08 17:04:35 +05:30
parent 8922142ade
commit fcc20d2f1e
No known key found for this signature in database
4 changed files with 17 additions and 22 deletions

View file

@ -71,4 +71,7 @@ dependencies {
implementation(libs.build.spotless)
implementation(libs.build.vcu)
implementation(libs.build.versions)
// Expose the generated version catalog API to the plugin.
implementation(files(libs::class.java.superclass.protectionDomain.codeSource.location))
}

View file

@ -15,14 +15,13 @@ import com.android.build.api.variant.HasUnitTestBuilder
import com.android.build.api.variant.LibraryAndroidComponentsExtension
import com.android.build.gradle.BaseExtension
import dev.msfjarvis.claw.gradle.LintConfig.configureLint
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.android.AndroidCacheFixPlugin
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.findByType
import org.gradle.kotlin.dsl.getByType
class AndroidCommonPlugin : Plugin<Project> {
@ -59,10 +58,9 @@ class AndroidCommonPlugin : Plugin<Project> {
}
project.extensions.findByType<ApplicationExtension>()?.lint?.configureLint(project)
project.extensions.findByType<LibraryExtension>()?.lint?.configureLint(project)
val catalog = project.extensions.getByType<VersionCatalogsExtension>()
val libs = catalog.named("libs")
project.dependencies.addProvider("lintChecks", libs.findLibrary("slack-compose-lints").get())
project.dependencies.addProvider("lintChecks", libs.findLibrary("slack-lints").get())
val libs = project.extensions.getByName("libs") as LibrariesForLibs
project.dependencies.addProvider("lintChecks", libs.slack.compose.lints)
project.dependencies.addProvider("lintChecks", libs.slack.lints)
}
private fun Project.configureSlimTests() {

View file

@ -10,20 +10,18 @@ import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import io.sentry.android.gradle.extensions.InstrumentationFeature
import io.sentry.android.gradle.extensions.SentryPluginExtension
import java.util.EnumSet
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getByType
@Suppress("Unused")
class SentryPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.pluginManager.withPlugin("com.android.application") {
val catalog = project.extensions.getByType<VersionCatalogsExtension>()
val libs = catalog.named("libs")
val libs = project.extensions.getByName("libs") as LibrariesForLibs
project.extensions.configure<ApplicationAndroidComponentsExtension> {
onVariants(selector().all()) { variant ->
val sentryDsn = project.providers.environmentVariable(SENTRY_DSN_PROPERTY)
@ -52,13 +50,11 @@ class SentryPlugin : Plugin<Project> {
experimentalGuardsquareSupport.set(false)
autoInstallation {
enabled.set(true)
sentryVersion.set(libs.findVersion("sentry-sdk").get().requiredVersion)
sentryVersion.set(libs.versions.sentry.sdk)
}
includeDependenciesReport.set(true)
}
with(project.dependencies) {
addProvider("implementation", platform(libs.findLibrary("sentry-bom").get()))
}
with(project.dependencies) { addProvider("implementation", platform(libs.sentry.bom)) }
}
}

View file

@ -6,29 +6,27 @@
*/
package dev.msfjarvis.claw.gradle
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Project
import org.gradle.api.artifacts.ExternalModuleDependency
import org.gradle.api.artifacts.MinimalExternalModuleDependency
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.DependencyHandlerScope
import org.gradle.kotlin.dsl.exclude
import org.gradle.kotlin.dsl.getByType
/** Extension function to configure JUnit5 dependencies with the Truth assertion library. */
fun DependencyHandlerScope.addTestDependencies(project: Project) {
val catalog = project.extensions.getByType<VersionCatalogsExtension>()
val libs = catalog.named("libs")
addProvider("testImplementation", libs.findLibrary("junit-jupiter-api").get())
val libs = project.extensions.getByName("libs") as LibrariesForLibs
addProvider("testImplementation", libs.junit.jupiter.api)
addProvider<MinimalExternalModuleDependency, ExternalModuleDependency>(
"testImplementation",
libs.findLibrary("truth").get(),
libs.truth,
) {
exclude(group = "junit", module = "junit")
}
addProvider("testRuntimeOnly", libs.findLibrary("junit-jupiter-engine").get())
addProvider("testRuntimeOnly", libs.junit.jupiter.engine)
addProvider<MinimalExternalModuleDependency, ExternalModuleDependency>(
"testRuntimeOnly",
libs.findLibrary("junit-legacy").get(),
libs.junit.legacy,
) {
// See https://github.com/google/truth/issues/333
because("Truth needs it")