You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.2 KiB

plugins {
id("org.jetbrains.kotlin.multiplatform")
id("org.jetbrains.compose")
}
kotlin {
js(IR) {
browser() {
testTask {
testLogging.showStandardStreams = true
useKarma {
useChromeHeadless()
//useFirefox()
}
}
}
binaries.executable()
}
sourceSets {
val commonMain by getting {
dependencies {
implementation(compose.runtime)
implementation(project(":web-core"))
implementation(kotlin("stdlib-common"))
}
}
val jsMain by getting {
dependencies {
implementation(kotlin("stdlib-js"))
}
}
val jsTest by getting {
dependencies {
implementation(kotlin("test-js"))
}
}
}
}
val printBundleSize by tasks.registering {
dependsOn(tasks.named("jsBrowserDistribution"))
doLast {
val jsFile = buildDir.resolve("distributions/web-benchmark-core.js")
val size = jsFile.length()
println("##teamcity[buildStatisticValue key='landingPageBundleSize' value='$size']")
}
}
val printBenchmarkResults by tasks.registering {
doLast {
val report = buildDir.resolve("reports/tests/jsTest/classes/BenchmarkTests.html").readText()
val stdout = "#.*;".toRegex().findAll(report).map { it.value }.firstOrNull()
val benchmarks = stdout?.split(";")?.mapNotNull {
if (it.isEmpty()) {
null
} else {
val b = it.split(":")
val testName = b[0].replace("#", "")
val benchmarkMs = b[1].toInt()
testName to benchmarkMs
}
}?.toMap()
benchmarks?.forEach {
// TeamCity messages need to escape '[' and ']' using '|'
val testName = it.key
.replace("[", "|[")
.replace("]", "|]")
println("##teamcity[buildStatisticValue key='benchmark_$testName' value='${it.value}']")
}
}
}
tasks.named("jsTest") { finalizedBy(printBenchmarkResults) }
tasks.named("build") { finalizedBy(printBundleSize) }