Skip to content

Commit

Permalink
Hook source contexts with install tasks (#643)
Browse files Browse the repository at this point in the history
  • Loading branch information
romtsn authored Jan 25, 2024
1 parent dbac17c commit 12b9e20
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- Bundle ASM version within the plugin and bump it to `9.4` ([#637](https://github.com/getsentry/sentry-android-gradle-plugin/pull/637))
- This should fix the `java.lang.AssertionError: Class with incorrect id found` exception when using `kotlinx.serialization`
- Fall back to `findTask` if `assembleProvider` of AndroidVariant is null when hooking source bundle and native symbols upload tasks ([#639](https://github.com/getsentry/sentry-android-gradle-plugin/pull/639))
- Hook source context tasks to also run after `install{Variant}` tasks ([#643](https://github.com/getsentry/sentry-android-gradle-plugin/pull/643))

### Dependencies

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ interface SentryVariant {
val isDebuggable: Boolean
val packageProvider: TaskProvider<out Task>? get() = null
val assembleProvider: TaskProvider<out Task>? get() = null
val installProvider: TaskProvider<out Task>? get() = null
fun mappingFileProvider(project: Project): Provider<FileCollection>
fun sources(
project: Project,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ data class AndroidVariant70(
override val isDebuggable: Boolean = variant.buildType.isDebuggable
override val packageProvider: TaskProvider<out Task>? = variant.packageApplicationProvider
override val assembleProvider: TaskProvider<out Task>? = variant.assembleProvider
override val installProvider: TaskProvider<out Task>? = variant.installProvider
override fun mappingFileProvider(project: Project): Provider<FileCollection> =
variant.mappingFileProvider
override fun sources(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ data class AndroidVariant74(
// dependencies via artifacts API.
override val assembleProvider: TaskProvider<out Task>?
get() = (variant as? VariantImpl<*>)?.taskContainer?.assembleTask
override val installProvider: TaskProvider<out Task>?
get() = (variant as? VariantImpl<*>)?.taskContainer?.installTask
override fun mappingFileProvider(project: Project): Provider<FileCollection> =
project.provider {
project.files(variant.artifacts.get(SingleArtifact.OBFUSCATION_MAPPING_FILE))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,15 @@ internal object SentryTasksProvider {
fun getAssembleTaskProvider(project: Project, variant: SentryVariant): TaskProvider<out Task>? =
variant.assembleProvider ?: project.findTask(listOf("assemble${variant.name.capitalized}"))

/**
* Returns the install task provider
*
* @return the provider if found or null otherwise
*/
@JvmStatic
fun getInstallTaskProvider(project: Project, variant: SentryVariant): TaskProvider<out Task>? =
variant.installProvider ?: project.findTask(listOf("install${variant.name.capitalized}"))

/**
* Returns the merge asset provider
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package io.sentry.android.gradle.util
import io.sentry.android.gradle.SentryTasksProvider.capitalized
import io.sentry.android.gradle.SentryTasksProvider.getAssembleTaskProvider
import io.sentry.android.gradle.SentryTasksProvider.getBundleTask
import io.sentry.android.gradle.SentryTasksProvider.getInstallTaskProvider
import io.sentry.android.gradle.SentryTasksProvider.getPackageBundleTask
import io.sentry.android.gradle.SentryTasksProvider.getPackageProvider
import io.sentry.android.gradle.SentryTasksProvider.getPreBundleTask
Expand Down Expand Up @@ -87,6 +88,9 @@ fun TaskProvider<out Task>.hookWithAssembleTasks(
getAssembleTaskProvider(project, variant)?.configure {
it.finalizedBy(this)
}
getInstallTaskProvider(project, variant)?.configure {
it.finalizedBy(this)
}
// if its a bundle aab, assemble might not be executed, so we hook into bundle task
bundleTask?.configure { it.finalizedBy(this) }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package io.sentry.android.gradle
import com.android.build.gradle.AppExtension
import io.sentry.android.gradle.SentryTasksProvider.getAssembleTaskProvider
import io.sentry.android.gradle.SentryTasksProvider.getBundleTask
import io.sentry.android.gradle.SentryTasksProvider.getInstallTaskProvider
import io.sentry.android.gradle.SentryTasksProvider.getLintVitalAnalyzeProvider
import io.sentry.android.gradle.SentryTasksProvider.getLintVitalReportProvider
import io.sentry.android.gradle.SentryTasksProvider.getMergeAssetsProvider
Expand Down Expand Up @@ -192,6 +193,37 @@ class SentryTaskProviderTest {
}
}

@Test
fun `getInstallTaskProvider works correctly for all the variants AGP70`() {
val (project, android) = getAndroidExtFromProject()

android.applicationVariants.configureEach {
if (it.name == "debug") {
assertEquals(
"installDebug",
getInstallTaskProvider(project, AndroidVariant70(it))?.get()?.name
)
}
}
}

@Test
fun `getInstallTaskProvider falls back to findTask if assembleProvider is null`() {
val (project, android) = getAndroidExtFromProject()

android.applicationVariants.configureEach {
val sentryVariant = object : SentryVariant by AndroidVariant70(it) {
override val installProvider: TaskProvider<out Task>? get() = null
}
if (it.name == "debug") {
assertEquals(
"installDebug",
getInstallTaskProvider(project, sentryVariant)?.get()?.name
)
}
}
}

@Test
fun `getMergeAssetsProvider works correctly for all the variants`() {
val (_, android) = getAndroidExtFromProject()
Expand Down

0 comments on commit 12b9e20

Please sign in to comment.