diff --git a/build.gradle.kts b/build.gradle.kts index 58b3ad55..6c8be329 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,6 +3,7 @@ */ import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion +import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockMismatchReport import util.getSpacePassword import util.kotlinVersionParsed import util.libs @@ -65,6 +66,9 @@ if (kotlinVersion != kotlinGPVersion) { error("KGP version mismatch. Project version: $kotlinVersion, KGP version: $kotlinGPVersion") } +val isCI = System.getenv("TEAMCITY_VERSION") != null +val localYarnUpdate = providers.gradleProperty("kotlinx.rpc.localYarnUpdate") + val executeNpmLogin by tasks.registering { val registryUrl = "https://packages.jetbrains.team/npm/p/krpc/build-deps/" @@ -72,20 +76,23 @@ val executeNpmLogin by tasks.registering { val buildYarnConfigFile = File(project.rootDir, "build/js/.yarnrc") val buildYarnYmlConfigFile = File(project.rootDir, "build/js/.yarnrc.yml") - val spacePassword: String? = getSpacePassword() - doLast { - var outputYarnYmlText = "npmRegistryServer: \"$registryUrl\"" + val spacePassword: String = getSpacePassword() - if (spacePassword != null) { - if (spacePassword.split(".").size != 3) { - error("Unexpected Space Token format") - } + if (!isCI && localYarnUpdate.orNull?.toBooleanStrictOrNull() != true) { + return@doLast + } - outputYarnYmlText += "npmAlwaysAuth: true" - outputYarnYmlText += "npmAuthToken: \"$spacePassword\"" + if (spacePassword.split(".").size != 3) { + error("Unexpected Space Token format") } + val outputYarnYmlText = """ + npmRegistryServer: \"$registryUrl\" + npmAlwaysAuth: true + npmAuthToken: "$spacePassword" + """.trimIndent() + buildYarnConfigFile.createNewFile() buildYarnConfigFile.writeText("registry: $registryUrl") buildYarnYmlConfigFile.createNewFile() @@ -96,8 +103,6 @@ val executeNpmLogin by tasks.registering { outputs.file(buildYarnYmlConfigFile).withPropertyName("buildOutputYarnYmlFile") } -val isCI = System.getenv("TEAMCITY_VERSION") != null - plugins.withType(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin::class.java).configureEach { rootProject.extensions.configure(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension::class.java) { download = true @@ -120,6 +125,9 @@ rootProject.plugins.withType c.titlecase() } } url = uri("https://packages.jetbrains.team/maven/p/krpc/$repoName") - val username = getSpaceUsername() - val password = getSpacePassword() - - if (username != null && password != null) { - credentials { - this.username = username - this.password = password - } + credentials { + username = getSpaceUsername() + password = getSpacePassword() } } } @@ -73,16 +67,21 @@ pluginManagement { fun RepositoryHandler.buildDepsEap() = jbTeamPackages(repoName = "build-deps-eap") repositories { - buildDeps() - buildDepsEap() + if (isCI) { + buildDeps() + buildDepsEap() + } else { + mavenCentral() + gradlePluginPortal() + } } } gradle.rootProject { - fun logAbsentProperty(name: String, env: String): Nothing? { - logger.info("Property '$name' (or env var '$env') is not present for repository credentials.") + val isCI = System.getenv("TEAMCITY_VERSION") != null - return null + fun requiredPropertyError(name: String, env: String): Nothing { + throw GradleException("Property '$name' (or env var '$env') is not present for repository credentials.") } fun getLocalProperties(): java.util.Properties { @@ -102,22 +101,22 @@ gradle.rootProject { } } - fun getSpaceUsername(): String? { + fun getSpaceUsername(): String { val username = "kotlinx.rpc.team.space.username" val usernameEnv = "kotlinx_rpc_team_space_username" return getLocalProperties()[username] as String? ?: settings.providers.gradleProperty(username).orNull ?: System.getenv(usernameEnv)?.ifEmpty { null } - ?: logAbsentProperty(username, usernameEnv) + ?: requiredPropertyError(username, usernameEnv) } - fun getSpacePassword(): String? { + fun getSpacePassword(): String { val password = "kotlinx.rpc.team.space.password" val passwordEnv = "kotlinx_rpc_team_space_password" return getLocalProperties()[password] as String? ?: settings.providers.gradleProperty(password).orNull ?: System.getenv(passwordEnv)?.ifEmpty { null } - ?: logAbsentProperty(password, passwordEnv) + ?: requiredPropertyError(password, passwordEnv) } /** @@ -131,14 +130,9 @@ gradle.rootProject { url = uri("https://packages.jetbrains.team/maven/p/krpc/$repoName") - val username = getSpaceUsername() - val password = getSpacePassword() - - if (username != null && password != null) { - credentials { - this.username = username - this.password = password - } + credentials { + username = getSpaceUsername() + password = getSpacePassword() } } } @@ -149,13 +143,27 @@ gradle.rootProject { allprojects { buildscript { repositories { - buildDeps() - buildDepsEap() + if (isCI) { + buildDeps() + buildDepsEap() + } else { + mavenCentral() + gradlePluginPortal() + } } } + repositories { - buildDeps() - buildDepsEap() + if (isCI) { + buildDeps() + buildDepsEap() + } else { + mavenCentral() + maven("https://www.jetbrains.com/intellij-repository/releases") + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev") + maven("https://maven.pkg.jetbrains.space/public/p/ktor/eap") + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap") + } } } } diff --git a/gradle-conventions-settings/src/main/kotlin/util/properties.kt b/gradle-conventions-settings/src/main/kotlin/util/properties.kt index 2267bd6f..570fd136 100644 --- a/gradle-conventions-settings/src/main/kotlin/util/properties.kt +++ b/gradle-conventions-settings/src/main/kotlin/util/properties.kt @@ -6,14 +6,13 @@ package util +import org.gradle.api.GradleException import org.gradle.api.Project import java.io.File import java.util.* -fun Project.logAbsentProperty(name: String, env: String): Nothing? { - logger.info("Property '$name' (or env var '$env') is not present for repository credentials.") - - return null +fun requiredPropertyError(name: String, env: String): Nothing { + throw GradleException("Property '$name' (or env var '$env') is not present for repository credentials.") } fun Project.getLocalProperties(): Properties { @@ -33,20 +32,20 @@ fun Project.getLocalProperties(): Properties { } } -fun Project.getSpaceUsername(): String? { +fun Project.getSpaceUsername(): String { val username = "kotlinx.rpc.team.space.username" val usernameEnv = "kotlinx_rpc_team_space_username" return getLocalProperties()[username] as String? ?: providers.gradleProperty(username).orNull ?: System.getenv(usernameEnv)?.ifEmpty { null } - ?: logAbsentProperty(username, usernameEnv) + ?: requiredPropertyError(username, usernameEnv) } -fun Project.getSpacePassword(): String? { +fun Project.getSpacePassword(): String { val password = "kotlinx.rpc.team.space.password" val passwordEnv = "kotlinx_rpc_team_space_password" return getLocalProperties()[password] as String? ?: providers.gradleProperty(password).orNull ?: System.getenv(passwordEnv)?.ifEmpty { null } - ?: logAbsentProperty(password, passwordEnv) + ?: requiredPropertyError(password, passwordEnv) } diff --git a/gradle.properties b/gradle.properties index 7b29c975..856ae935 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,3 +38,7 @@ systemProp.org.gradle.kotlin.dsl.precompiled.accessors.strict=true # Using compileOnly dependencies in these targets is not currently supported # because compileOnly dependencies must be present during the compilation of projects that depend on this project. kotlin.suppressGradlePluginWarnings=IncorrectCompileOnlyDependencyWarning + +# uncomment to update yarn.lock locally +# Space credentials required - JB team only +#kotlinx.rpc.localYarnUpdate=true