From ea38cfebf278b4dc51114c822971f2f5e615c846 Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Wed, 3 May 2023 20:29:10 +0200 Subject: [PATCH] [Build, IGS] Implement InternalGradleSetupSettingsPlugin #KTI-1223 In Progress --- .../InternalGradleSetupSettingsPlugin.kt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/InternalGradleSetupSettingsPlugin.kt b/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/InternalGradleSetupSettingsPlugin.kt index f0c9c7687d3..67de83114ee 100644 --- a/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/InternalGradleSetupSettingsPlugin.kt +++ b/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/InternalGradleSetupSettingsPlugin.kt @@ -7,8 +7,36 @@ package org.jetbrains.kotlin.build import org.gradle.api.Plugin import org.gradle.api.initialization.Settings +import org.gradle.api.plugins.ExtensionAware +import org.gradle.kotlin.dsl.extra +import java.net.URL +import kotlin.concurrent.thread + +private const val DOMAIN_NAME = "kotlin-build-properties.labs.jb.gg" +private const val SETUP_JSON_URL = "https://$DOMAIN_NAME/setup.json" abstract class InternalGradleSetupSettingsPlugin : Plugin { override fun apply(target: Settings) { + val isTeamCityBuild = (target as? ExtensionAware)?.extra?.has("teamcity") == true || System.getenv("TEAMCITY_VERSION") != null + if (isTeamCityBuild) return + val rootDir = target.rootDir + // invoke this logic in a separate thread to not pause the build + // the properties will be configured for the future builds + thread { + try { + val modifier = LocalPropertiesModifier(rootDir.resolve("local.properties")) + val consentManager = ConsentManager(modifier) + val initialDecision = consentManager.getUserDecision() + if (initialDecision == false) return@thread // user has opted out + val connection = URL(SETUP_JSON_URL).run { openConnection().apply { connectTimeout = 300 } } + val setupFile = connection.getInputStream().buffered().use { + parseSetupFile(it) + } + if (initialDecision == null && !consentManager.askForConsent()) return@thread + modifier.applySetup(setupFile) + } catch (_: Throwable) { + // no-op + } + } } } \ No newline at end of file