Add possibility to hardcode version

^KT-42921 fixed
This commit is contained in:
Ilya Goncharov
2020-11-14 20:59:25 +03:00
committed by TeamCityServer
parent 88abb3d6c9
commit a06feaf819
4 changed files with 67 additions and 41 deletions
@@ -6,27 +6,32 @@
package org.jetbrains.kotlin.generators.gradle.targets.js package org.jetbrains.kotlin.generators.gradle.targets.js
val npmPackages = listOf( val npmPackages = listOf(
"dukat", NpmPackage("dukat", "0.5.8-rc.3"),
"webpack", NpmPackage("webpack"),
"webpack-cli", NpmPackage("webpack-cli"),
"webpack-bundle-analyzer", NpmPackage("webpack-bundle-analyzer"),
"webpack-dev-server", NpmPackage("webpack-dev-server"),
"source-map-loader", NpmPackage("source-map-loader"),
"source-map-support", NpmPackage("source-map-support"),
"css-loader", NpmPackage("css-loader"),
"style-loader", NpmPackage("style-loader"),
"to-string-loader", NpmPackage("to-string-loader"),
"mini-css-extract-plugin", NpmPackage("mini-css-extract-plugin"),
"mocha", NpmPackage("mocha"),
"karma", NpmPackage("karma"),
"karma-chrome-launcher", NpmPackage("karma-chrome-launcher"),
"karma-phantomjs-launcher", NpmPackage("karma-phantomjs-launcher"),
"karma-firefox-launcher", NpmPackage("karma-firefox-launcher"),
"karma-opera-launcher", NpmPackage("karma-opera-launcher"),
"karma-ie-launcher", NpmPackage("karma-ie-launcher"),
"karma-safari-launcher", NpmPackage("karma-safari-launcher"),
"karma-mocha", NpmPackage("karma-mocha"),
"karma-webpack", NpmPackage("karma-webpack"),
"karma-coverage", NpmPackage("karma-coverage"),
"karma-sourcemap-loader", NpmPackage("karma-sourcemap-loader"),
)
data class NpmPackage(
val name: String,
val version: String? = null
) )
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.generators.gradle.targets.js
data class Package( data class Package(
val name: String, val name: String,
val version: SemVer val version: String
) { ) {
// Used in velocity template // Used in velocity template
@Suppress("unused") @Suppress("unused")
@@ -18,7 +18,19 @@ data class Package(
.joinToString("") .joinToString("")
} }
data class PackageInformation( sealed class PackageInformation {
val name: String, abstract val name: String
val versions: Set<String> abstract val versions: Set<String>
) }
data class RealPackageInformation(
override val name: String,
override val versions: Set<String>
) : PackageInformation()
data class HardcodedPackageInformation(
override val name: String,
val version: String
) : PackageInformation() {
override val versions: Set<String> = setOf(version)
}
@@ -21,15 +21,19 @@ class VersionFetcher : AutoCloseable {
suspend fun fetch(): List<PackageInformation> { suspend fun fetch(): List<PackageInformation> {
return coroutineScope { return coroutineScope {
npmPackages npmPackages
.map { async { fetchPackageInformationAsync(it) } } .filter { it.version != null }
.map { fetched -> .map { HardcodedPackageInformation(it.name, it.version!!) } +
val (packageName, value) = fetched.await() npmPackages
val fetchedPackageInformation = Gson().fromJson(value, FetchedPackageInformation::class.java) .filter { it.version == null }
PackageInformation( .map { async { fetchPackageInformationAsync(it.name) } }
packageName, .map { fetched ->
fetchedPackageInformation.versions.keys val (packageName, value) = fetched.await()
) val fetchedPackageInformation = Gson().fromJson(value, FetchedPackageInformation::class.java)
} RealPackageInformation(
packageName,
fetchedPackageInformation.versions.keys
)
}
} }
} }
@@ -53,10 +53,15 @@ fun main() {
fun findLastVersions(packages: List<PackageInformation>): List<Package> { fun findLastVersions(packages: List<PackageInformation>): List<Package> {
return packages return packages
.map { packageInformation -> .map { packageInformation ->
val maximumVersion = packageInformation.versions val maximumVersion = when (packageInformation) {
.map { SemVer.from(it) } is RealPackageInformation -> packageInformation.versions
.filter { it.preRelease == null && it.build == null } .map { SemVer.from(it) }
.maxOrNull() ?: throw error("There is no applicable version for ${packageInformation.name}") .filter { it.preRelease == null && it.build == null }
.maxOrNull()
?.toString()
?: throw error("There is no applicable version for ${packageInformation.name}")
is HardcodedPackageInformation -> packageInformation.version
}
Package( Package(
packageInformation.name, packageInformation.name,