From c5cc5c3d2f094d4a19372fe81f6a02929ed91028 Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Fri, 7 Jun 2019 17:06:44 +0300 Subject: [PATCH] [build] teamcity pusher to initiate Kotlin + Kotln/Native master snapshot --- build.gradle | 9 +- buildSrc/plugins/build.gradle | 3 + .../org/jetbrains/kotlin/KotlinBuildPusher.kt | 91 +++++++++++++++++++ 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/KotlinBuildPusher.kt diff --git a/build.gradle b/build.gradle index 64a6cccf30b..ab136eea798 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.konan.util.* import org.jetbrains.kotlin.CopySamples import org.jetbrains.kotlin.CopyCommonSources import org.jetbrains.kotlin.PlatformInfo -import org.jetbrains.kotlin.konan.* +import org.jetbrains.kotlin.KotlinBuildPusher buildscript { apply from: "gradle/kotlinGradlePlugin.gradle" @@ -549,4 +549,11 @@ task clean { delete distDir delete bundle.outputs.files } +} + +task pusher(type: KotlinBuildPusher){ + kotlinVersion = project.kotlinVersion + konanVersion = KonanVersionGeneratedKt.getCurrentKonanVersion() + buildServer = "teamcity.jetbrains.com" + token = project.findProperty("teamcityBearToken") ?: System.getenv("TEAMCITY_BEAR_TOKEN") } \ No newline at end of file diff --git a/buildSrc/plugins/build.gradle b/buildSrc/plugins/build.gradle index aa19e2a6c79..05122d2ec8f 100644 --- a/buildSrc/plugins/build.gradle +++ b/buildSrc/plugins/build.gradle @@ -43,6 +43,9 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-gradle-plugin" compile project(':shared') compile "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.10.0" + implementation 'io.ktor:ktor-client-auth:1.2.1' + implementation 'io.ktor:ktor-client-core:1.2.1' + implementation 'io.ktor:ktor-client-cio:1.2.1' } sourceSets.main.kotlin.srcDirs = ["src", "$projectDir/../../tools/benchmarks/shared/src"] diff --git a/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/KotlinBuildPusher.kt b/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/KotlinBuildPusher.kt new file mode 100644 index 00000000000..b175547dcab --- /dev/null +++ b/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/KotlinBuildPusher.kt @@ -0,0 +1,91 @@ +package org.jetbrains.kotlin + +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.TaskAction +import io.ktor.client.HttpClient +import io.ktor.client.call.HttpClientCall +import io.ktor.client.request.get +import io.ktor.client.request.header +import io.ktor.client.request.post +import io.ktor.content.TextContent +import io.ktor.http.ContentType +import io.ktor.http.contentType +import kotlinx.coroutines.runBlocking +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.options.Option + + +open class KotlinBuildPusher: DefaultTask() { + + @Input + @Option(option = "token", description = "Teamcity Bear token") + var token:String? = "" + + @Input + @Option(option = "buildServer", description = "Teamcity server") + var buildServer:String = "" + + @Input + @Option(option = "kotlinVersion", description = "Kotlin Compiler Version") + var kotlinVersion:String = "" + + @Input + @Option(option = "konanVersion", description = "Kotlin Native Compiler Version") + var konanVersion:String = "" + + @TaskAction + fun run() { + requireNotNull(token, {"Teamcity Bear token required"}) + val client = HttpClient() + runBlocking { + val buildId = client.get(scheme = "https", host = buildServer, path = "/app/rest/builds/buildType:(id:Kotlin_dev_Compiler),number:$kotlinVersion/id" ) { + header("Authorization", "Bearer $token") + } + project.logger.info("pusher: buildId: $buildId") + /** + * + * + * + * + * + * + * + * + * + */ + val content = buildString{ + build{ + buildType("Kotlin_dev_DeployMavenArtifacts_OverrideNative") + lastChanges { + change(buildId) + } + properties { + property("system.versions.kotlin-native", konanVersion) + } + } + } + project.logger.info("pusher: content: \"$content\"") + val res = client.post(scheme = "https", host = buildServer, path = "/app/rest/buildQueue") { + header("Authorization", "Bearer $token") + header("Origin", "https://$buildServer") + body = TextContent(content, ContentType.Application.Xml) + } + project.logger.info("pusher: result: \"$res\"") + } + client.close() + } +} + +internal fun StringBuilder.paired(tag:String, body:StringBuilder.()->Unit) { + appendln("<$tag>") + body() + appendln("") +} + +internal fun StringBuilder.build(body:StringBuilder.()->Unit) = paired("build", body) +internal fun StringBuilder.buildType(id:String) = appendln("") +internal fun StringBuilder.lastChanges(body:StringBuilder.()->Unit) = paired("lastChanges", body) +internal fun StringBuilder.change(build:String) = appendln("") +internal fun StringBuilder.properties(body:StringBuilder.()->Unit) = paired("properties", body) +internal fun StringBuilder.property(key:String, value:String) = appendln("") +