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

com.datadog.gradle.plugin.GenerateBuildIdTask.kt Maven / Gradle / Ivy

The newest version!
/*
 * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
 * This product includes software developed at Datadog (https://www.datadoghq.com/).
 * Copyright 2020-Present Datadog, Inc.
 */

package com.datadog.gradle.plugin

import com.datadog.gradle.plugin.internal.variant.AppVariant
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.file.Directory
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFile
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import java.util.UUID

/**
 * This task generates unique Build ID which is later used to match error and mapping file.
 */
abstract class GenerateBuildIdTask : DefaultTask() {

    /**
     * Directory to store build ID file.
     */
    @get:OutputDirectory
    abstract val buildIdDirectory: DirectoryProperty

    /**
     * File containing build ID.
     */
    @get:Internal
    val buildIdFile: Provider = buildIdDirectory.file(BUILD_ID_FILE_NAME)

    /**
     * Variant name this task is linked to.
     */
    @get:Internal
    abstract val variantName: Property

    init {
        outputs.upToDateWhen { false }
        // not a part of any group, we don't want to expose it
        description = "Generates a unique build ID to associate mapping file and application."
    }

    /**
     * Generates unique build ID and saves it to a file.
     */
    @TaskAction
    fun generateBuildId() {
        val buildIdDirectory = buildIdDirectory.get().asFile
        buildIdDirectory.mkdirs()

        val buildId = UUID.randomUUID().toString()
        logger.info("Generated buildId=$buildId for variant=${variantName.get()}")
        buildIdFile.get().asFile
            .writeText(buildId)
    }

    internal companion object {
        private const val TASK_NAME = "generateBuildId"

        /**
         * Name of the file containing build ID information.
         */
        const val BUILD_ID_FILE_NAME = "datadog.buildId"

        /**
         * Registers a new instance of [GenerateBuildIdTask] specific for the given [AppVariant].
         */
        fun register(
            target: Project,
            variant: AppVariant,
            buildIdDirectory: Provider
        ): TaskProvider {
            val generateBuildIdTask = target.tasks.register(
                TASK_NAME + variant.name.capitalize(),
                GenerateBuildIdTask::class.java
            ) {
                it.buildIdDirectory.set(buildIdDirectory)
                it.variantName.set(variant.name)
            }
            variant.bindWith(generateBuildIdTask, buildIdDirectory)

            return generateBuildIdTask
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy