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

com.bugsnag.gradle.android.CreateBuildTask.kt Maven / Gradle / Ivy

The newest version!
package com.bugsnag.gradle.android

import com.bugsnag.gradle.BugsnagCliTask
import com.bugsnag.gradle.dsl.VariantConfiguration
import org.gradle.api.Project
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.TaskAction

internal abstract class CreateBuildTask : BugsnagCliTask() {
    @get:Optional
    @get:Input
    abstract val metadata: MapProperty

    @get:Nested
    abstract val systemMetadata: SystemMetadata

    @get:Nested
    abstract val variantMetadata: AndroidVariantMetadata

    @get:InputFile
    abstract val androidManifestFile: RegularFileProperty

    @get:Input
    abstract val projectPath: Property

    @TaskAction
    fun createBuild() {
        val buildMetadata = systemMetadata.toMap() + metadata.orElse(emptyMap()).get()
        val metadataOption = buildMetadata.entries.joinToString(";") { (key, value) -> "$key=$value" }
        exec("create-build") {
            if (globalOptions.buildApiEndpointRootUrl.isPresent) {
                "build-api-root-url" `=` globalOptions.buildApiEndpointRootUrl.get()
            }
            "metadata" `=` metadataOption
            "app-manifest" `=` androidManifestFile
            "builder-name" `=` systemMetadata.builderName
            "release-stage" `=` variantMetadata.variantName
            "version-name" `=` variantMetadata.versionName
            "version-code" `=` variantMetadata.versionCode.map { it.toString() }

            +projectPath.get().toString()
        }
    }

    interface SystemMetadata {
        @get:Input
        @get:Optional
        val osArch: Property

        @get:Input
        @get:Optional
        val osName: Property

        @get:Input
        @get:Optional
        val osVersion: Property

        @get:Input
        @get:Optional
        val javaVersion: Property

        @get:Input
        @get:Optional
        val gradleVersion: Property

        @get:Input
        @get:Optional
        val gitVersion: Property

        @get:Optional
        @get:Input
        val builderName: Property
    }
}

private const val PROP_OS_ARCH = "os.arch"
private const val PROP_OS_NAME = "os.name"
private const val PROP_OS_VERSION = "os.version"
private const val PROP_JAVA_VERSION = "java.version"
private const val PROP_USER_NAME = "user.name"

internal fun CreateBuildTask.SystemMetadata.configureFrom(project: Project, bugsnag: VariantConfiguration) {
    val providerFactory = project.providers

    osArch.set(providerFactory.systemProperty(PROP_OS_ARCH))
    osName.set(providerFactory.systemProperty(PROP_OS_NAME))
    osVersion.set(providerFactory.systemProperty(PROP_OS_VERSION))
    javaVersion.set(providerFactory.systemProperty(PROP_JAVA_VERSION))
    gradleVersion.set(project.gradle.gradleVersion)

    builderName.convention(providerFactory.systemProperty(PROP_USER_NAME))
    bugsnag.builderName?.let { builderName.set(it) }
}

internal fun CreateBuildTask.SystemMetadata.toMap(): Map =
    mapOf(
        "os_arch" to osArch.orNull,
        "os_name" to osName.orNull,
        "os_version" to osVersion.orNull,
        "java_version" to javaVersion.orNull,
        "gradle_version" to gradleVersion.orNull,
        "git_version" to gitVersion.orNull
    )




© 2015 - 2025 Weber Informatics LLC | Privacy Policy