blob: eccac26e597ce569cd45315fdaf1f61b765ccbdd [file] [log] [blame]
@file:JvmName("KotlinConfiguration")
import org.gradle.api.Project
import org.gradle.api.artifacts.dsl.RepositoryHandler
import java.net.URI
import java.util.logging.Logger
/*
* Functions in this file are responsible for configuring atomicfu build
* against a custom development version of Kotlin compiler.
* Such configuration is used in Kotlin aggregate builds and builds of Kotlin user projects
* in order to check whether not-yet-released changes are compatible with our libraries
* (aka "integration testing that substitutes lack of unit testing").
*/
private val LOGGER: Logger = Logger.getLogger("Kotlin settings logger")
/**
* Should be used for running against a non-released Kotlin compiler on a system test level.
*
* @return a custom repository with development builds of the Kotlin compiler taken from:
*
* 1. the Kotlin community project Gradle plugin,
* 2. or `kotlin_repo_url` Gradle property (from command line or from `gradle.properties`),
*
* or null otherwise
*/
fun getCustomKotlinRepositoryURL(project: Project): String? {
val communityPluginKotlinRepoURL = project.findProperty("community.project.kotlin.repo") as? String
val gradlePropertyKotlinRepoURL = project.findProperty("kotlin_repo_url") as? String
val kotlinRepoURL = when {
communityPluginKotlinRepoURL != null -> communityPluginKotlinRepoURL
gradlePropertyKotlinRepoURL != null -> gradlePropertyKotlinRepoURL
else -> return null
}
LOGGER.info("A custom Kotlin repository $kotlinRepoURL was found for project ${project.name}")
return kotlinRepoURL
}
/**
* Should be used for running against a non-released Kotlin compiler on a system test level.
*
* Adds a custom repository with development builds of the Kotlin compiler to [repositoryHandler]
* if the URL is provided (see [getCustomKotlinRepositoryURL]).
*/
fun addCustomKotlinRepositoryIfEnabled(repositoryHandler: RepositoryHandler, project: Project) {
val kotlinRepoURL = getCustomKotlinRepositoryURL(project) ?: return
repositoryHandler.maven { url = URI.create(kotlinRepoURL) }
}
/**
* Should be used for running against a non-released Kotlin compiler on a system test level.
*
* @return a Kotlin version taken from the Kotlin community project Gradle plugin,
* or null otherwise
*/
fun getOverridingKotlinVersion(project: Project): String? {
val communityPluginKotlinVersion = project.findProperty("community.project.kotlin.version") as? String
// add any other ways of overriding the Kotlin version here
val kotlinVersion = when {
communityPluginKotlinVersion != null -> communityPluginKotlinVersion
// add any other ways of overriding the Kotlin version here
else -> return null
}
LOGGER.info("An overriding Kotlin version of $kotlinVersion was found for project ${project.name}")
return kotlinVersion
}
/**
* Should be used for running against a non-released Kotlin compiler on a system test level.
*
* @return a Kotlin language version taken from:
*
* 1. the Kotlin community project Gradle plugin,
* 2. or `kotlin_language_version` Gradle property (from command line or from `gradle.properties`),
*
* or null otherwise
*/
fun getOverridingKotlinLanguageVersion(project: Project): String? {
val communityPluginLanguageVersion = project.findProperty("community.project.kotlin.languageVersion") as? String
val gradlePropertyLanguageVersion = project.findProperty("kotlin_language_version") as? String
val languageVersion = when {
communityPluginLanguageVersion != null -> communityPluginLanguageVersion
gradlePropertyLanguageVersion != null -> gradlePropertyLanguageVersion
else -> return null
}
LOGGER.info("An overriding Kotlin language version of $languageVersion was found for project ${project.name}")
return languageVersion
}
/**
* Should be used for running against a non-released Kotlin compiler on a system test level.
*
* @return a Kotlin API version taken from:
*
* 1. the Kotlin community project Gradle plugin,
* 2. or `kotlin_language_version` Gradle property (from command line or from `gradle.properties`),
*
* or null otherwise
*/
fun getOverridingKotlinApiVersion(project: Project): String? {
val communityPluginApiVersion = project.findProperty("community.project.kotlin.apiVersion") as? String
val gradlePropertyApiVersion = project.findProperty("kotlin_api_version") as? String
val apiVersion = when {
communityPluginApiVersion != null -> communityPluginApiVersion
gradlePropertyApiVersion != null -> gradlePropertyApiVersion
else -> return null
}
LOGGER.info("An overriding Kotlin api version of $apiVersion was found for project ${project.name}")
return apiVersion
}