override fun fetchAvailable()

in kotlin-script-runner-server/src/main/kotlin/jetbrains/buildServer/runner/kotlinBuildStep/KotlinScriptAvailableToolsFetcherImpl.kt [26:48]


    override fun fetchAvailable(): FetchAvailableToolsResult {
        val url = URL(TeamCityProperties.getProperty("teamcity.internal.runner.kotlinScript.toolsUrl", TOOL_REPOSITORY_URL))
        try {
            val json = IOGuard.allowNetworkCall<String, Exception> {
                BufferedReader(InputStreamReader(url.openConnection().getInputStream(), StandardCharsets.UTF_8)).readText()
            }
            val releases = gson.fromJson(json, JsonArray::class.java)
            val tools = releases
                    .filter { it.isJsonObject }
                    .map { it.asJsonObject["tag_name"] }
                    .filter { it != null }
                    .map { it.asString }
                    .filter { RELEASE_VERSION_PATTERN.matcher(it).matches() }
                    .map { it.substring(1) }  // v1.4.31 => 1.4.31
                    .filter { VersionComparatorUtil.compare(it, "1.3.70") >= 0 }
                    .map { KotlinDowloadableToolVersion(it) }
            return FetchAvailableToolsResult.createSuccessful(tools)
        } catch (ex: Exception) {
            val msg = "Failed to fetch available Kotlin compiler versions from ${url.toString()}"
            SERVER_LOG.warnAndDebugDetails(msg, ex)
            return FetchAvailableToolsResult.createError(msg, ex)
        }
    }