Wizard: use cache redirector on project importing tests

This commit is contained in:
Ilya Kirillov
2020-06-02 17:08:39 +03:00
parent cce5a9a1ca
commit 8a4521864e
13 changed files with 108 additions and 55 deletions

View File

@@ -64,4 +64,5 @@ testsJar()
projectTest {
dependsOn(":dist")
workingDir = rootDir
systemProperty("cacheRedirectorEnabled", findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() == true)
}

View File

@@ -14,17 +14,20 @@ import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.asNullable
import org.jetbrains.kotlin.tools.projectWizard.core.safe
import org.jetbrains.kotlin.tools.projectWizard.core.service.EapVersionDownloader
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardUIBundle
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.runWithProgressBar
class IdeaKotlinVersionProviderService : KotlinVersionProviderService, IdeaWizardService {
override fun getKotlinVersion(): Version =
getPatchedKotlinVersion()
class IdeaKotlinVersionProviderService : KotlinVersionProviderService(), IdeaWizardService {
override fun getKotlinVersion(): WizardKotlinVersion {
val version = getPatchedKotlinVersion()
?: getKotlinVersionFromCompiler()
?: VersionsDownloader.downloadLatestEapOrStableKotlinVersion()
?: Versions.KOTLIN
return kotlinVersionWithDefaultValues(version)
}
private fun getPatchedKotlinVersion() =
if (ApplicationManager.getApplication().isInternal) {

View File

@@ -6,13 +6,41 @@
package org.jetbrains.kotlin.tools.projectWizard.cli
import org.jetbrains.kotlin.tools.projectWizard.core.service.EapVersionDownloader
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionKind
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.BintrayRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
class KotlinVersionProviderTestWizardService : KotlinVersionProviderService, TestWizardService {
override fun getKotlinVersion(): Version = TEST_KOTLIN_VERSION
class KotlinVersionProviderTestWizardService() : KotlinVersionProviderService(), TestWizardService {
private val useCacheRedirector
get() = System.getProperty("cacheRedirectorEnabled")?.toBoolean() == true
override fun getKotlinVersion(): WizardKotlinVersion =
kotlinVersionWithDefaultValues(TEST_KOTLIN_VERSION)
override fun getKotlinVersionRepository(versionKind: KotlinVersionKind): Repository = if (useCacheRedirector) {
getKotlinVersionRepositoryWithCacheRedirector(versionKind)
} else {
super.getKotlinVersionRepository(versionKind)
}
private fun getKotlinVersionRepositoryWithCacheRedirector(versionKind: KotlinVersionKind): Repository = when (versionKind) {
KotlinVersionKind.STABLE -> DefaultRepository.MAVEN_CENTRAL
KotlinVersionKind.EAP -> KOTLIN_EAP_BINTRAY_WITH_CACHE_REDIRECTOR
KotlinVersionKind.DEV -> KOTLIN_DEV_BINTRAY_WITH_CACHE_REDIRECTOR
KotlinVersionKind.M -> KOTLIN_EAP_BINTRAY_WITH_CACHE_REDIRECTOR
}
companion object {
private const val CACHE_REDIRECTOR_BINTRAY_URL = "https://cache-redirector.jetbrains.com/dl.bintray.com"
private val KOTLIN_EAP_BINTRAY_WITH_CACHE_REDIRECTOR = BintrayRepository("kotlin/kotlin-eap", CACHE_REDIRECTOR_BINTRAY_URL)
private val KOTLIN_DEV_BINTRAY_WITH_CACHE_REDIRECTOR = BintrayRepository("kotlin/kotlin-dev", CACHE_REDIRECTOR_BINTRAY_URL)
val TEST_KOTLIN_VERSION by lazy {
EapVersionDownloader.getLatestDevVersion()!!
}

View File

@@ -20,28 +20,47 @@ import java.io.InputStreamReader
import java.net.URL
import java.util.stream.Collectors
interface KotlinVersionProviderService : WizardService {
fun getKotlinVersion(): Version
}
data class WizardKotlinVersion(val version: Version, val kind: KotlinVersionKind, val repository: Repository)
class KotlinVersionProviderServiceImpl : KotlinVersionProviderService, IdeaIndependentWizardService {
override fun getKotlinVersion(): Version = Versions.KOTLIN
}
abstract class KotlinVersionProviderService : WizardService {
abstract fun getKotlinVersion(): WizardKotlinVersion
protected fun kotlinVersionWithDefaultValues(version: Version) = WizardKotlinVersion(
version,
getKotlinVersionKind(version),
getKotlinVersionRepository(version)
)
val Version.kotlinVersionKind
get() = when {
"eap" in toString().toLowerCase() -> KotlinVersionKind.EAP
"dev" in toString().toLowerCase() -> KotlinVersionKind.DEV
"m" in toString().toLowerCase() -> KotlinVersionKind.M
else -> KotlinVersionKind.STABLE
protected open fun getKotlinVersionRepository(versionKind: KotlinVersionKind): Repository = when (versionKind) {
KotlinVersionKind.STABLE -> DefaultRepository.MAVEN_CENTRAL
KotlinVersionKind.EAP -> Repositories.KOTLIN_EAP_BINTRAY
KotlinVersionKind.M -> Repositories.KOTLIN_EAP_BINTRAY
KotlinVersionKind.DEV -> Repositories.KOTLIN_DEV_BINTRAY
}
enum class KotlinVersionKind(val repository: Repository) {
STABLE(repository = DefaultRepository.MAVEN_CENTRAL),
EAP(repository = Repositories.KOTLIN_EAP_BINTRAY),
DEV(repository = Repositories.KOTLIN_DEV_BINTRAY),
M(repository = Repositories.KOTLIN_EAP_BINTRAY)
private fun getKotlinVersionRepository(version: Version) =
getKotlinVersionRepository(getKotlinVersionKind(version))
private fun getKotlinVersionKind(version: Version) = when {
"eap" in version.toString().toLowerCase() -> KotlinVersionKind.EAP
"dev" in version.toString().toLowerCase() -> KotlinVersionKind.DEV
"m" in version.toString().toLowerCase() -> KotlinVersionKind.M
else -> KotlinVersionKind.STABLE
}
}
class KotlinVersionProviderServiceImpl : KotlinVersionProviderService(), IdeaIndependentWizardService {
override fun getKotlinVersion(): WizardKotlinVersion =
kotlinVersionWithDefaultValues(Versions.KOTLIN)
}
enum class KotlinVersionKind {
STABLE,
EAP,
DEV,
M
}
val KotlinVersionKind.isStable

View File

@@ -2,6 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.core.ignore
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIR
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
@@ -39,7 +40,7 @@ data class GradleOnlyPluginByNameIR(@NonNls val pluginId: String, override val p
data class KotlinBuildSystemPluginIR(
val type: Type,
val version: Version?,
val version: WizardKotlinVersion?,
override val priority: Int? = null
) : BuildSystemPluginIR {
@@ -49,7 +50,7 @@ data class KotlinBuildSystemPluginIR(
GradlePrinter.GradleDsl.KOTLIN -> call("kotlin") { +type.toString().quotified }
GradlePrinter.GradleDsl.GROOVY -> call("id") { +"org.jetbrains.kotlin.$type".quotified }
}
version?.let {
version?.version?.let {
+" version "
+it.toString().quotified
}.ignore()
@@ -57,7 +58,7 @@ data class KotlinBuildSystemPluginIR(
is MavenPrinter -> node("plugin") {
singleLineNode("groupId") { +"org.jetbrains.kotlin" }
singleLineNode("artifactId") { +"kotlin-maven-plugin" }
singleLineNode("version") { +version.toString() }
singleLineNode("version") { +version?.version.toString() }
node("executions") {
node("execution") {

View File

@@ -1,6 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIR
import org.jetbrains.kotlin.tools.projectWizard.library.LibraryArtifact
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
@@ -8,9 +8,7 @@ import org.jetbrains.kotlin.tools.projectWizard.library.NpmArtifact
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository.Companion.MAVEN_CENTRAL
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModulePath
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
@@ -112,14 +110,15 @@ data class ArtifactBasedLibraryDependencyIR(
abstract class KotlinLibraryDependencyIR(
val artifactName: String,
override val version: Version,
override val dependencyType: DependencyType
) : LibraryDependencyIR {
abstract val kotlinVersion: WizardKotlinVersion
final override val version: Version get() = kotlinVersion.version
abstract val isInMppModule: Boolean
override val artifact: LibraryArtifact
get() = MavenArtifact(
version.kotlinVersionKind.repository,
kotlinVersion.repository,
"org.jetbrains.kotlin",
"kotlin-$artifactName"
)
@@ -153,18 +152,18 @@ abstract class KotlinLibraryDependencyIR(
data class KotlinStdlibDependencyIR(
val type: StdlibType,
override val isInMppModule: Boolean,
override val version: Version,
override val kotlinVersion: WizardKotlinVersion,
override val dependencyType: DependencyType
) : KotlinLibraryDependencyIR(type.artifact, version, dependencyType) {
) : KotlinLibraryDependencyIR(type.artifact, dependencyType) {
override fun withDependencyType(type: DependencyType): KotlinStdlibDependencyIR = copy(dependencyType = type)
}
data class KotlinArbitraryDependencyIR(
val name: String,
override val isInMppModule: Boolean,
override val version: Version,
override val kotlinVersion: WizardKotlinVersion,
override val dependencyType: DependencyType
) : KotlinLibraryDependencyIR(name, version, dependencyType) {
) : KotlinLibraryDependencyIR(name, dependencyType) {
override fun withDependencyType(type: DependencyType): KotlinArbitraryDependencyIR = copy(dependencyType = type)
}

View File

@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfi
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSettingReference
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference
import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.AndroidConfigIR
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
@@ -111,11 +111,11 @@ interface AndroidModuleConfigurator : ModuleConfigurator,
}
companion object {
fun createRepositories(kotlinVersion: Version) = buildList<Repository> {
fun createRepositories(kotlinVersion: WizardKotlinVersion) = buildList<Repository> {
+DefaultRepository.GRADLE_PLUGIN_PORTAL
+DefaultRepository.GOOGLE
+DefaultRepository.JCENTER
addIfNotNull(kotlinVersion.kotlinVersionKind.repository)
+kotlinVersion.repository
}
}
}

View File

@@ -5,7 +5,6 @@ import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.BuildScriptDependencyIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.BuildScriptRepositoryIR
@@ -45,13 +44,13 @@ object AndroidSinglePlatformModuleConfigurator :
DefaultRepository.GRADLE_PLUGIN_PORTAL,
DefaultRepository.JCENTER,
DefaultRepository.GOOGLE,
configurationData.kotlinVersion.kotlinVersionKind.repository
configurationData.kotlinVersion.repository
).forEach { repository ->
+BuildScriptRepositoryIR(RepositoryIR((repository)))
}
irsList {
"classpath"(const("org.jetbrains.kotlin:kotlin-gradle-plugin:${configurationData.kotlinVersion}"))
"classpath"(const("org.jetbrains.kotlin:kotlin-gradle-plugin:${configurationData.kotlinVersion.version}"))
"classpath"(const("com.android.tools.build:gradle:${Versions.GRADLE_PLUGINS.ANDROID}"))
}.forEach {
+BuildScriptDependencyIR(it)

View File

@@ -63,7 +63,7 @@ interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings {
dependencyName,
isInMppModule = module.kind
.let { it == ModuleKind.multiplatform || it == ModuleKind.target },
version = KotlinPlugin::version.propertyValue,
kotlinVersion = KotlinPlugin::version.propertyValue,
dependencyType = DependencyType.TEST
)
}

View File

@@ -23,7 +23,10 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
import java.nio.file.Path
class KotlinPlugin(context: Context) : Plugin(context) {
val version by property(Versions.KOTLIN)
val version by property(
// todo do not hardcode kind & repository
WizardKotlinVersion(Versions.KOTLIN, KotlinVersionKind.M, Repositories.KOTLIN_EAP_BINTRAY)
)
val initKotlinVersions by pipelineTask(GenerationPhase.PREPARE_GENERATION) {
title = KotlinNewProjectWizardBundle.message("plugin.kotlin.downloading.kotlin.versions")
@@ -93,10 +96,9 @@ class KotlinPlugin(context: Context) : Plugin(context) {
val createPluginRepositories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
runBefore(BuildSystemPlugin::createModules)
withAction {
val pluginRepository = KotlinPlugin::version.propertyValue.kotlinVersionKind
.takeUnless(KotlinVersionKind::isStable)
?.repository
?: return@withAction UNIT_SUCCESS
val version = KotlinPlugin::version.propertyValue
if (version.kind.isStable) return@withAction UNIT_SUCCESS
val pluginRepository = version.repository
BuildSystemPlugin::pluginRepositoreis.addValues(pluginRepository) andThen
updateBuildFiles { buildFile ->
buildFile.withIrs(RepositoryIR(pluginRepository)).asSuccess()

View File

@@ -5,6 +5,7 @@ import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
@@ -19,7 +20,7 @@ data class ModulesToIrConversionData(
val rootModules: List<Module>,
val projectPath: Path,
val projectName: String,
val kotlinVersion: Version,
val kotlinVersion: WizardKotlinVersion,
val buildSystemType: BuildSystemType,
val pomIr: PomIR
) {
@@ -147,7 +148,7 @@ class ModulesToIRsConverter(
KotlinStdlibDependencyIR(
type = stdlibType,
isInMppModule = false,
version = data.kotlinVersion,
kotlinVersion = data.kotlinVersion,
dependencyType = DependencyType.MAIN
)
}
@@ -243,7 +244,7 @@ class ModulesToIRsConverter(
KotlinStdlibDependencyIR(
type = stdlibType,
isInMppModule = true,
version = data.kotlinVersion,
kotlinVersion = data.kotlinVersion,
dependencyType = DependencyType.MAIN
)
}

View File

@@ -30,8 +30,8 @@ data class DefaultRepository(val type: Type) : Repository {
interface CustomMavenRepository : Repository
data class BintrayRepository(val repository: String) : CustomMavenRepository {
override val url: String = "https://dl.bintray.com/$repository"
data class BintrayRepository(val repository: String, val base: String = "https://dl.bintray.com") : CustomMavenRepository {
override val url: String = "$base/$repository"
override val idForMaven: String
get() = "bintray." + repository.replace('/', '.')

View File

@@ -78,13 +78,13 @@ class SimpleJsClientTemplate : Template() {
val kotlinVersion = KotlinPlugin::version.propertyValue
if (renderEngine.reference.settingValue != RenderEngine.KOTLINX_HTML) {
+Dependencies.KOTLIN_REACT(kotlinVersion)
+Dependencies.KOTLIN_REACT_DOM(kotlinVersion)
+Dependencies.KOTLIN_REACT(kotlinVersion.version)
+Dependencies.KOTLIN_REACT_DOM(kotlinVersion.version)
+Dependencies.NPM_REACT
+Dependencies.NPM_REACT_DOM
if (renderEngine.reference.settingValue == RenderEngine.REACT_WITH_STYLED) {
+Dependencies.NPM_REACT_IS
+Dependencies.KOTLIN_STYLED(kotlinVersion)
+Dependencies.KOTLIN_STYLED(kotlinVersion.version)
+Dependencies.NPM_STYLED_COMPONENTS
+Dependencies.NPM_INLINE_STYLE_PREFIXER
}