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.spotless)
implementation(libs.build.vcu) implementation(libs.build.vcu)
implementation(libs.build.versions) 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.api.variant.LibraryAndroidComponentsExtension
import com.android.build.gradle.BaseExtension import com.android.build.gradle.BaseExtension
import dev.msfjarvis.claw.gradle.LintConfig.configureLint import dev.msfjarvis.claw.gradle.LintConfig.configureLint
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.android.AndroidCacheFixPlugin import org.gradle.android.AndroidCacheFixPlugin
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.findByType import org.gradle.kotlin.dsl.findByType
import org.gradle.kotlin.dsl.getByType
class AndroidCommonPlugin : Plugin<Project> { class AndroidCommonPlugin : Plugin<Project> {
@ -59,10 +58,9 @@ class AndroidCommonPlugin : Plugin<Project> {
} }
project.extensions.findByType<ApplicationExtension>()?.lint?.configureLint(project) project.extensions.findByType<ApplicationExtension>()?.lint?.configureLint(project)
project.extensions.findByType<LibraryExtension>()?.lint?.configureLint(project) project.extensions.findByType<LibraryExtension>()?.lint?.configureLint(project)
val catalog = project.extensions.getByType<VersionCatalogsExtension>() val libs = project.extensions.getByName("libs") as LibrariesForLibs
val libs = catalog.named("libs") project.dependencies.addProvider("lintChecks", libs.slack.compose.lints)
project.dependencies.addProvider("lintChecks", libs.findLibrary("slack-compose-lints").get()) project.dependencies.addProvider("lintChecks", libs.slack.lints)
project.dependencies.addProvider("lintChecks", libs.findLibrary("slack-lints").get())
} }
private fun Project.configureSlimTests() { 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.InstrumentationFeature
import io.sentry.android.gradle.extensions.SentryPluginExtension import io.sentry.android.gradle.extensions.SentryPluginExtension
import java.util.EnumSet import java.util.EnumSet
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getByType
@Suppress("Unused") @Suppress("Unused")
class SentryPlugin : Plugin<Project> { class SentryPlugin : Plugin<Project> {
override fun apply(project: Project) { override fun apply(project: Project) {
project.pluginManager.withPlugin("com.android.application") { project.pluginManager.withPlugin("com.android.application") {
val catalog = project.extensions.getByType<VersionCatalogsExtension>() val libs = project.extensions.getByName("libs") as LibrariesForLibs
val libs = catalog.named("libs")
project.extensions.configure<ApplicationAndroidComponentsExtension> { project.extensions.configure<ApplicationAndroidComponentsExtension> {
onVariants(selector().all()) { variant -> onVariants(selector().all()) { variant ->
val sentryDsn = project.providers.environmentVariable(SENTRY_DSN_PROPERTY) val sentryDsn = project.providers.environmentVariable(SENTRY_DSN_PROPERTY)
@ -52,13 +50,11 @@ class SentryPlugin : Plugin<Project> {
experimentalGuardsquareSupport.set(false) experimentalGuardsquareSupport.set(false)
autoInstallation { autoInstallation {
enabled.set(true) enabled.set(true)
sentryVersion.set(libs.findVersion("sentry-sdk").get().requiredVersion) sentryVersion.set(libs.versions.sentry.sdk)
} }
includeDependenciesReport.set(true) includeDependenciesReport.set(true)
} }
with(project.dependencies) { with(project.dependencies) { addProvider("implementation", platform(libs.sentry.bom)) }
addProvider("implementation", platform(libs.findLibrary("sentry-bom").get()))
}
} }
} }

View file

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