All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.sentry.android.gradle.tasks.dependencies.SentryExternalDependenciesReportTaskV2.kt Maven / Gradle / Ivy

package io.sentry.android.gradle.tasks.dependencies

import io.sentry.android.gradle.extensions.SentryPluginExtension
import io.sentry.android.gradle.tasks.DirectoryOutputTask
import io.sentry.android.gradle.tasks.dependencies.SentryExternalDependenciesReportTaskFactory.SENTRY_DEPENDENCIES_REPORT_OUTPUT
import io.sentry.android.gradle.telemetry.SentryTelemetryService
import io.sentry.android.gradle.telemetry.withSentryTelemetry
import io.sentry.android.gradle.util.artifactsFor
import java.io.File
import org.gradle.api.Project
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
import org.gradle.api.file.Directory
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider

@CacheableTask
abstract class SentryExternalDependenciesReportTaskV2 : DirectoryOutputTask() {

    @get:Input
    abstract val includeReport: Property

    init {
        description = "Generates an external dependencies report"

        @Suppress("LeakingThis")
        onlyIf { includeReport.get() }
    }

    @get:Input
    abstract val artifactIds: SetProperty

    @TaskAction
    fun action() {
        val outputDir = output.get().asFile
        outputDir.mkdirs()

        val dependencies = artifactIds.get().toSortedSet()

        val outputFile = File(outputDir, SENTRY_DEPENDENCIES_REPORT_OUTPUT)
        outputFile.writeText(dependencies.joinToString("\n"))
    }

    companion object {
        fun register(
            project: Project,
            extension: SentryPluginExtension,
            sentryTelemetryProvider: Provider,
            configurationName: String,
            attributeValueJar: String,
            output: Provider?,
            includeReport: Provider,
            taskSuffix: String = ""
        ): TaskProvider {
            return project.tasks.register(
                "collectExternal${taskSuffix}DependenciesForSentry",
                SentryExternalDependenciesReportTaskV2::class.java
            ) { task ->
                val configuration = project.configurations.getByName(configurationName)
                val artifacts = configuration.artifactsFor(attributeValueJar).resolvedArtifacts
                val artifactIds = artifacts.map { list ->
                    list.map { artifact -> artifact.id.componentIdentifier }
                        // we're only interested in external deps
                        .filterIsInstance()
                        // and those that have proper version defined (e.g. flat jars don't have it)
                        .filter { id -> id.version.isNotEmpty() }
                        .map { id -> id.displayName }
                }
                task.artifactIds.set(artifactIds)
                task.includeReport.set(includeReport)
                output?.let { task.output.set(it) }
                task.withSentryTelemetry(extension, sentryTelemetryProvider)
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy