Wizard: download latest dev version for tests from bintray

This commit is contained in:
Ilya Kirillov
2020-06-01 23:14:57 +03:00
parent 1ea72ec378
commit cce5a9a1ca
3 changed files with 44 additions and 33 deletions
@@ -11,18 +11,13 @@ import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.config.KotlinCompilerVersion
import org.jetbrains.kotlin.idea.framework.ui.ConfigureDialogWithModulesAndVersion
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
import org.jetbrains.kotlin.tools.projectWizard.core.asNullable
import org.jetbrains.kotlin.tools.projectWizard.core.compute
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.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
import java.io.BufferedReader
import java.io.InputStreamReader
import java.net.URL
import java.util.stream.Collectors
class IdeaKotlinVersionProviderService : KotlinVersionProviderService, IdeaWizardService {
override fun getKotlinVersion(): Version =
@@ -68,28 +63,3 @@ private object VersionsDownloader {
ConfigureDialogWithModulesAndVersion.loadVersions("1.0.0")
}.asNullable?.firstOrNull { !it.contains(SNAPSHOT_TAG, ignoreCase = true) }?.let { Version.fromString(it) }
}
private object EapVersionDownloader {
fun getLatestEapVersion() = downloadVersions(EAP_URL).firstOrNull()
private fun downloadPage(url: String): TaskResult<String> = safe {
BufferedReader(InputStreamReader(URL(url).openStream())).lines().collect(Collectors.joining("\n"))
}
@Suppress("SameParameterValue")
private fun downloadVersions(url: String): List<Version> = compute {
val (text) = downloadPage(url)
versionRegexp.findAll(text)
.map { it.groupValues[1].removeSuffix("/") }
.filter { it.isNotEmpty() && it[0].isDigit() }
.map { Version.fromString(it) }
.toList()
.asReversed()
}.asNullable.orEmpty()
@NonNls
private val EAP_URL = "https://dl.bintray.com/kotlin/kotlin-eap/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin/"
@NonNls
private val versionRegexp = """href="([^"\\]+)"""".toRegex()
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.tools.projectWizard.cli
import org.jetbrains.kotlin.tools.projectWizard.core.service.EapVersionDownloader
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
@@ -12,6 +13,8 @@ class KotlinVersionProviderTestWizardService : KotlinVersionProviderService, Tes
override fun getKotlinVersion(): Version = TEST_KOTLIN_VERSION
companion object {
val TEST_KOTLIN_VERSION = Version("1.4.0-dev-5730")
val TEST_KOTLIN_VERSION by lazy {
EapVersionDownloader.getLatestDevVersion()!!
}
}
}
@@ -5,11 +5,20 @@
package org.jetbrains.kotlin.tools.projectWizard.core.service
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
import org.jetbrains.kotlin.tools.projectWizard.core.asNullable
import org.jetbrains.kotlin.tools.projectWizard.core.compute
import org.jetbrains.kotlin.tools.projectWizard.core.safe
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
import java.io.BufferedReader
import java.io.InputStreamReader
import java.net.URL
import java.util.stream.Collectors
interface KotlinVersionProviderService : WizardService {
fun getKotlinVersion(): Version
@@ -36,4 +45,33 @@ enum class KotlinVersionKind(val repository: Repository) {
}
val KotlinVersionKind.isStable
get() = this == KotlinVersionKind.STABLE
get() = this == KotlinVersionKind.STABLE
object EapVersionDownloader {
fun getLatestEapVersion() = downloadVersions(EAP_URL).firstOrNull()
fun getLatestDevVersion() = downloadVersions(DEV_URL).firstOrNull()
private fun downloadPage(url: String): TaskResult<String> = safe {
BufferedReader(InputStreamReader(URL(url).openStream())).lines().collect(Collectors.joining("\n"))
}
@Suppress("SameParameterValue")
private fun downloadVersions(url: String): List<Version> = compute {
val (text) = downloadPage(url)
versionRegexp.findAll(text)
.map { it.groupValues[1].removeSuffix("/") }
.filter { it.isNotEmpty() && it[0].isDigit() }
.map { Version.fromString(it) }
.toList()
.asReversed()
}.asNullable.orEmpty()
@NonNls
private val EAP_URL = "https://dl.bintray.com/kotlin/kotlin-eap/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin/"
@NonNls
private val DEV_URL = "https://dl.bintray.com/kotlin/kotlin-dev/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin/"
@NonNls
private val versionRegexp = """href="([^"\\]+)"""".toRegex()
}