diff --git a/libraries/tools/gradle/regression-benchmarks/benchmarkScripts/files/graphql-kotlin-1.6.10.patch b/libraries/tools/gradle/regression-benchmarks/benchmarkScripts/files/graphql-kotlin-1.6.10.patch new file mode 100644 index 00000000000..da7b3b21dae --- /dev/null +++ b/libraries/tools/gradle/regression-benchmarks/benchmarkScripts/files/graphql-kotlin-1.6.10.patch @@ -0,0 +1,38 @@ +diff --git a/gradle.properties b/gradle.properties +index c230ac55..0709e478 100644 +--- a/gradle.properties ++++ b/gradle.properties +@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError + + # dependencies + kotlinJvmVersion = 1.8 +-kotlinVersion = 1.5.31 ++kotlinVersion = 1.6.10 + kotlinCoroutinesVersion = 1.5.2 + kotlinxSerializationVersion = 1.3.0 + +diff --git a/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/execution/SpringDataFetcher.kt b/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/execution/SpringDataFetcher.kt +index 871ffd39..c886f705 100644 +--- a/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/execution/SpringDataFetcher.kt ++++ b/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/execution/SpringDataFetcher.kt +@@ -38,7 +38,6 @@ open class SpringDataFetcher( + private val applicationContext: ApplicationContext + ) : FunctionDataFetcher(target, fn, objectMapper) { + +- @ExperimentalStdlibApi + override fun mapParameterToValue(param: KParameter, environment: DataFetchingEnvironment): Pair? = + if (param.hasAnnotation()) { + val qualifier = param.findAnnotation()?.value +diff --git a/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/subscriptions/SubscriptionWebSocketHandler.kt b/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/subscriptions/SubscriptionWebSocketHandler.kt +index e8939483..5edb33f5 100644 +--- a/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/subscriptions/SubscriptionWebSocketHandler.kt ++++ b/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/subscriptions/SubscriptionWebSocketHandler.kt +@@ -30,7 +30,7 @@ class SubscriptionWebSocketHandler( + private val objectMapper: ObjectMapper + ) : WebSocketHandler { + +- @ExperimentalCoroutinesApi ++ @OptIn(ExperimentalCoroutinesApi::class) + @Suppress("ForbiddenVoid") + override fun handle(session: WebSocketSession): Mono { + val response = session.receive() diff --git a/libraries/tools/gradle/regression-benchmarks/benchmarkScripts/files/graphql-kotlin-current.patch b/libraries/tools/gradle/regression-benchmarks/benchmarkScripts/files/graphql-kotlin-current.patch new file mode 100644 index 00000000000..fd663a6c59a --- /dev/null +++ b/libraries/tools/gradle/regression-benchmarks/benchmarkScripts/files/graphql-kotlin-current.patch @@ -0,0 +1,80 @@ +diff --git a/build.gradle.kts b/build.gradle.kts +index ddc94d0f..d2f5b2f8 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -21,19 +21,15 @@ plugins { + allprojects { + buildscript { + repositories { +- mavenCentral() + mavenLocal() ++ mavenCentral() + } + } + + repositories { ++ mavenLocal() + mavenCentral() + google() +- mavenLocal { +- content { +- includeGroup("com.expediagroup") +- } +- } + } + } + +diff --git a/gradle.properties b/gradle.properties +index c230ac55..cf0412e9 100644 +--- a/gradle.properties ++++ b/gradle.properties +@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError + + # dependencies + kotlinJvmVersion = 1.8 +-kotlinVersion = 1.5.31 ++kotlinVersion = + kotlinCoroutinesVersion = 1.5.2 + kotlinxSerializationVersion = 1.3.0 + +diff --git a/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/execution/SpringDataFetcher.kt b/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/execution/SpringDataFetcher.kt +index 871ffd39..c886f705 100644 +--- a/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/execution/SpringDataFetcher.kt ++++ b/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/execution/SpringDataFetcher.kt +@@ -38,7 +38,6 @@ open class SpringDataFetcher( + private val applicationContext: ApplicationContext + ) : FunctionDataFetcher(target, fn, objectMapper) { + +- @ExperimentalStdlibApi + override fun mapParameterToValue(param: KParameter, environment: DataFetchingEnvironment): Pair? = + if (param.hasAnnotation()) { + val qualifier = param.findAnnotation()?.value +diff --git a/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/subscriptions/SubscriptionWebSocketHandler.kt b/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/subscriptions/SubscriptionWebSocketHandler.kt +index e8939483..5edb33f5 100644 +--- a/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/subscriptions/SubscriptionWebSocketHandler.kt ++++ b/servers/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/server/spring/subscriptions/SubscriptionWebSocketHandler.kt +@@ -30,7 +30,7 @@ class SubscriptionWebSocketHandler( + private val objectMapper: ObjectMapper + ) : WebSocketHandler { + +- @ExperimentalCoroutinesApi ++ @OptIn(ExperimentalCoroutinesApi::class) + @Suppress("ForbiddenVoid") + override fun handle(session: WebSocketSession): Mono { + val response = session.receive() +diff --git a/settings.gradle.kts b/settings.gradle.kts +index 1a1329f8..c8aba3da 100644 +--- a/settings.gradle.kts ++++ b/settings.gradle.kts +@@ -8,6 +8,11 @@ pluginManagement { + val pluginPublishPluginVersion: String by settings + val springBootVersion: String by settings + ++ repositories { ++ mavenLocal() ++ gradlePluginPortal() ++ } ++ + plugins { + kotlin("jvm") version kotlinVersion + kotlin("kapt") version kotlinVersion diff --git a/libraries/tools/gradle/regression-benchmarks/benchmarkScripts/graphql-kotlin.benchmark.kts b/libraries/tools/gradle/regression-benchmarks/benchmarkScripts/graphql-kotlin.benchmark.kts new file mode 100644 index 00000000000..5066b6becc8 --- /dev/null +++ b/libraries/tools/gradle/regression-benchmarks/benchmarkScripts/graphql-kotlin.benchmark.kts @@ -0,0 +1,74 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +// Quite big library written in Kotlin: +// - uses Spring boot +// - uses Kotlin kapt +@file:BenchmarkProject( + name = "graphql-kotlin", + gitUrl = "https://github.com/ExpediaGroup/graphql-kotlin.git", + gitCommitSha = "fac1e41914f6a8a0a494082752a4e3674b812a3f" +) + +import java.io.File + +val stableReleasePatch = { + "graphql-kotlin-1.6.10.patch" to File("benchmarkScripts/files/graphql-kotlin-1.6.10.patch").inputStream() +} + +val currentReleasePatch = { + "graphql-kotlin-current.patch" to File("benchmarkScripts/files/graphql-kotlin-current.patch") + .readText() + .run { replace("", currentKotlinVersion) } + .byteInputStream() +} + +runAllBenchmarks( + suite { + scenario { + title = "Spring server clean build" + useGradleArgs("--no-build-cache") + + runTasks(":graphql-kotlin-spring-server:assemble") + runCleanupTasks("clean") + } + + scenario { + title = "Spring client clean build" + useGradleArgs("--no-build-cache") + + runTasks(":graphql-kotlin-spring-client:assemble") + runCleanupTasks("clean") + } + + scenario { + title = "Ktor client clean build" + useGradleArgs("--no-build-cache") + + runTasks(":graphql-kotlin-ktor-client:assemble") + runCleanupTasks("clean") + } + + scenario { + title = "Incremental Spring server build with ABI change in FederatedSchemaGenerator" + useGradleArgs("--no-build-cache") + + runTasks(":graphql-kotlin-spring-server:assemble") + applyAbiChangeTo("generator/graphql-kotlin-federation/src/main/kotlin/com/expediagroup/graphql/generator/federation/FederatedSchemaGenerator.kt") + } + + scenario { + title = "Incremental Spring client build with ABI change in GraphQLClient" + useGradleArgs("--no-build-cache") + + runTasks(":graphql-kotlin-spring-server:assemble") + applyAbiChangeTo("clients/graphql-kotlin-client/src/main/kotlin/com/expediagroup/graphql/client/GraphQLClient.kt") + } + }, + mapOf( + "1.6.10" to stableReleasePatch, + "1.6.20" to currentReleasePatch + ) +) diff --git a/libraries/tools/gradle/regression-benchmarks/build.gradle.kts b/libraries/tools/gradle/regression-benchmarks/build.gradle.kts index caf11785e3c..e1ce711a541 100644 --- a/libraries/tools/gradle/regression-benchmarks/build.gradle.kts +++ b/libraries/tools/gradle/regression-benchmarks/build.gradle.kts @@ -59,6 +59,7 @@ fun addBenchmarkTask( dependsOn(":kotlin-gradle-plugin:install") + outputs.upToDateWhen { false } javaLauncher.set(service.launcherFor { languageVersion.set(jdkVersion) }) @@ -130,3 +131,8 @@ addBenchmarkTask( ) { usesAndroidSdk() } + +addBenchmarkTask( + taskName = "benchmarkRegressionGraphql", + script = "graphql-kotlin.benchmark.kts" +)