diff --git a/subprojects/gradle/cd/src/main/kotlin/com/avito/ci/BuildStepListExtension.kt b/subprojects/gradle/cd/src/main/kotlin/com/avito/ci/BuildStepListExtension.kt index 90d844cbbf..2aa39efc28 100644 --- a/subprojects/gradle/cd/src/main/kotlin/com/avito/ci/BuildStepListExtension.kt +++ b/subprojects/gradle/cd/src/main/kotlin/com/avito/ci/BuildStepListExtension.kt @@ -8,6 +8,7 @@ import com.avito.ci.steps.DeployStep import com.avito.ci.steps.DetektCheck import com.avito.ci.steps.FlakyReportStep import com.avito.ci.steps.ImpactAnalysisAwareBuildStep +import com.avito.ci.steps.ImpactMetrics import com.avito.ci.steps.LintCheck import com.avito.ci.steps.MarkReportAsSourceForTMSStep import com.avito.ci.steps.TestSummaryStep @@ -42,6 +43,9 @@ open class BuildStepListExtension( registerFactory(CompileUiTests::class.java) { name -> CompileUiTests(buildStepListName, name) } + registerFactory(ImpactMetrics::class.java) { name -> + ImpactMetrics(buildStepListName, name) + } registerFactory(UnitTestCheck::class.java) { name -> UnitTestCheck(buildStepListName, name) } @@ -111,6 +115,14 @@ open class BuildStepListExtension( configureAndAdd("compileUiTests", action) } + fun impactMetrics(closure: Closure) { + configureAndAdd("impactMetrics", closure) + } + + fun impactMetrics(action: Action) { + configureAndAdd("impactMetrics", action) + } + fun unitTests(closure: Closure) { configureAndAdd("unitTests", closure) } diff --git a/subprojects/gradle/cd/src/main/kotlin/com/avito/ci/steps/ImpactMetrics.kt b/subprojects/gradle/cd/src/main/kotlin/com/avito/ci/steps/ImpactMetrics.kt new file mode 100644 index 0000000000..3806f8ee77 --- /dev/null +++ b/subprojects/gradle/cd/src/main/kotlin/com/avito/ci/steps/ImpactMetrics.kt @@ -0,0 +1,22 @@ +package com.avito.ci.steps + +import com.avito.kotlin.dsl.isRoot +import com.avito.kotlin.dsl.namedOrNull +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.tasks.TaskProvider + +class ImpactMetrics(context: String, name: String) : BuildStep(context, name) { + + override fun registerTask(project: Project, rootTask: TaskProvider) { + require(project.isRoot()) { failMessage("should be configured for root project") } + + val impactMetricsTask = requireNotNull(project.tasks.namedOrNull("impactMetrics")) { + failMessage("impactMetrics task not registered for root project") + } + + rootTask.configure { it.dependsOn(impactMetricsTask) } + } + + private fun failMessage(reason: String): String = "Failed to setup ImpactMetrics: $reason" +}