diff --git a/cosv-frontend/build.gradle.kts b/cosv-frontend/build.gradle.kts index b1315c2a23..e9f0672eaf 100644 --- a/cosv-frontend/build.gradle.kts +++ b/cosv-frontend/build.gradle.kts @@ -28,7 +28,7 @@ dependencies { implementation("org.jetbrains.kotlin-wrappers:kotlin-tanstack-react-table") implementation("org.jetbrains.kotlin-wrappers:kotlin-mui-icons") implementation("org.jetbrains.kotlin-wrappers:kotlin-mui") - implementation("io.github.petertrr:kotlin-multiplatform-diff-js:0.4.0") + implementation("io.github.petertrr:kotlin-multiplatform-diff-js:0.5.0") implementation(libs.save.common) implementation(libs.kotlinx.coroutines.core) diff --git a/frontend-common/build.gradle.kts b/frontend-common/build.gradle.kts index 58353bf8b3..f47a12107a 100644 --- a/frontend-common/build.gradle.kts +++ b/frontend-common/build.gradle.kts @@ -27,7 +27,7 @@ dependencies { implementation("org.jetbrains.kotlin-wrappers:kotlin-tanstack-react-table") implementation("org.jetbrains.kotlin-wrappers:kotlin-mui-icons") implementation("org.jetbrains.kotlin-wrappers:kotlin-mui") - implementation("io.github.petertrr:kotlin-multiplatform-diff-js:0.4.0") + implementation("io.github.petertrr:kotlin-multiplatform-diff-js:0.5.0") implementation(libs.save.common) implementation(libs.kotlinx.coroutines.core) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8c3b1d6d20..99b2db9b5f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,47 +1,47 @@ [versions] kotlin = "1.9.10" -jetbrains-annotations = "24.0.1" +jetbrains-annotations = "24.1.0" save-cli = "0.3.10" -ktor = "2.3.6" -okio = "3.3.0" +ktor = "2.3.8" +okio = "3.8.0" serialization = "1.6.0" kotlinx-datetime = "0.4.1" kotlinx-coroutines = "1.7.3" kotlin-wrappers = "1.0.0-pre.634" -spring-boot = "2.7.17" +spring-boot = "2.7.18" spring-cloud = "3.1.9" -spring-cloud-kubernetes = "2.1.8" -kafka-client = "3.6.0" -junit = "5.10.1" -assertj = "3.24.2" +spring-cloud-kubernetes = "2.1.9" +kafka-client = "3.7.0" +junit = "5.10.2" +assertj = "3.25.3" diktat = "2.0.0" -detekt = "1.23.3" -liquibase-core = "4.24.0" -docker-java = "3.3.4" -jgit = "6.7.0.202309050840-r" -mockito = "5.3.1" -mockito-kotlin = "5.0.0" +detekt = "1.23.5" +liquibase-core = "4.26.0" +docker-java = "3.3.5" +jgit = "6.8.0.202311291450-r" +mockito = "5.10.0" +mockito-kotlin = "5.2.1" # only in save-cli -log4j = "2.21.1" +log4j = "2.23.0" jpa = "1.0.2" mySql = "8.0.33" -testcontainers = "1.19.1" -okhttp3 = "4.11.0" -reckon = "0.18.1" -commons-compress = "1.24.0" +testcontainers = "1.19.6" +okhttp3 = "4.12.0" +reckon = "0.18.3" +commons-compress = "1.26.0" zip4j = "2.11.5" -ktoml = "0.5.0" +ktoml = "0.5.1" springdoc = "1.7.0" kotlinx-cli = "0.3.6" -spotless = "6.22.0" -fabric8 = "6.9.2" -arrow-kt = "1.2.1" +spotless = "6.25.0" +fabric8 = "6.10.0" +arrow-kt = "1.2.3" publish = "1.3.0" cpg = "7.1.2" # should be taken from cpg cpg-neo4j-ogm = { strictly = "4.0.6" } cpg-neo4j-java-driver = { strictly = "5.7.0" } -aws-sdk = "2.21.16" +aws-sdk = "2.24.13" cosv4k = "0.0.14" [plugins] @@ -118,7 +118,7 @@ springdoc-openapi-ui = { module = "org.springdoc:springdoc-openapi-ui", version. springdoc-openapi-webflux-ui = { module = "org.springdoc:springdoc-openapi-webflux-ui", version.ref = "springdoc" } springdoc-openapi-security = { module = "org.springdoc:springdoc-openapi-security", version.ref = "springdoc" } springdoc-openapi-kotlin = { module = "org.springdoc:springdoc-openapi-kotlin", version.ref = "springdoc" } -swagger-annotations = { module = "io.swagger.core.v3:swagger-annotations", version = "2.2.18" } +swagger-annotations = { module = "io.swagger.core.v3:swagger-annotations", version = "2.2.20" } ktor-client-apache = { module = "io.ktor:ktor-client-apache", version.ref = "ktor" } ktor-client-auth = { module = "io.ktor:ktor-client-auth", version.ref = "ktor" } @@ -167,7 +167,7 @@ okhttp-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version. mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockito-kotlin" } mockito-junit-jupiter = { module = "org.mockito:mockito-junit-jupiter", version.ref = "mockito" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotest-assertions-core = { module = "io.kotest:kotest-assertions-core", version = "5.6.2" } +kotest-assertions-core = { module = "io.kotest:kotest-assertions-core", version = "5.8.0" } okio = { module = "com.squareup.okio:okio", version.ref = "okio" } slf4j-api = { module = "org.slf4j:slf4j-api" } diff --git a/save-backend/src/test/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetricsJvmTest.kt b/save-backend/src/test/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetricsJvmTest.kt index 73f81d5264..adb623c5a8 100644 --- a/save-backend/src/test/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetricsJvmTest.kt +++ b/save-backend/src/test/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetricsJvmTest.kt @@ -25,7 +25,7 @@ class TestMetricsJvmTest { @Test fun `encode single`() { - assertThat(objectMapper.writeValueAsString(NoDataAvailable.instance)) + assertThat(objectMapper.writeValueAsString(NoDataAvailable)) .isNotBlank assertThat( @@ -59,7 +59,7 @@ class TestMetricsJvmTest { @Test fun `encode multiple`() { val results: List = listOf( - NoDataAvailable.instance, + NoDataAvailable, RegularTestMetrics(1, 2, 3, 4, null, null), ) @@ -80,7 +80,7 @@ class TestMetricsJvmTest { @Test fun `decode single`() { sequenceOf( - NoDataAvailable.instance, + NoDataAvailable, RegularTestMetrics(1, 2, 3, 4, null, null), RegularTestMetrics(1, 2, 3, 4, 5.toDuration(MINUTES), 6.toDuration(SECONDS)), ).forEach { result -> @@ -97,7 +97,7 @@ class TestMetricsJvmTest { @Test fun `decode multiple`() { val results: List = listOf( - NoDataAvailable.instance, + NoDataAvailable, RegularTestMetrics(1, 2, 3, 4, null, null), RegularTestMetrics(1, 2, 3, 4, 5.toDuration(MINUTES), 6.toDuration(SECONDS)), ) diff --git a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/agent/TestExecutionDto.kt b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/agent/TestExecutionDto.kt index 577c38266b..c91083e540 100644 --- a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/agent/TestExecutionDto.kt +++ b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/agent/TestExecutionDto.kt @@ -51,7 +51,7 @@ data class TestExecutionDto( */ fun toExtended( hasDebugInfo: Boolean? = null, - testMetrics: TestMetrics = NoDataAvailable.instance, + testMetrics: TestMetrics = NoDataAvailable, analysisResults: List = emptyList(), ): TestExecutionExtDto = TestExecutionExtDto( diff --git a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/agent/TestExecutionExtDto.kt b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/agent/TestExecutionExtDto.kt index e8c06909ee..2fdf43ed9a 100644 --- a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/agent/TestExecutionExtDto.kt +++ b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/agent/TestExecutionExtDto.kt @@ -21,6 +21,6 @@ import kotlinx.serialization.Serializable data class TestExecutionExtDto( val testExecution: TestExecutionDto, val hasDebugInfo: Boolean? = null, - val testMetrics: TestMetrics = NoDataAvailable.instance, + val testMetrics: TestMetrics = NoDataAvailable, val analysisResults: List = emptyList(), ) diff --git a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/NoDataAvailable.kt b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/NoDataAvailable.kt index 3da966f9d2..6f212bb0ec 100644 --- a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/NoDataAvailable.kt +++ b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/NoDataAvailable.kt @@ -1,13 +1,12 @@ package com.saveourtool.save.test.analysis.metrics -import kotlin.jvm.JvmStatic import kotlinx.serialization.Serializable /** * This is a `class` (and not an `object`) due to limitations of _JS Legacy_. */ @Serializable -class NoDataAvailable private constructor() : TestMetrics() { +object NoDataAvailable : TestMetrics { override fun equals(other: Any?): Boolean = other is NoDataAvailable @@ -16,9 +15,4 @@ class NoDataAvailable private constructor() : TestMetrics() { override fun toString(): String = this::class.simpleName ?: super.toString() - - companion object { - @JvmStatic - val instance = NoDataAvailable() - } } diff --git a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/RegularTestMetrics.kt b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/RegularTestMetrics.kt index 9548a8a536..554cef9e76 100644 --- a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/RegularTestMetrics.kt +++ b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/RegularTestMetrics.kt @@ -27,7 +27,7 @@ data class RegularTestMetrics( val ignoredCount: Int, val averageDurationOrNull: Duration?, val medianDurationOrNull: Duration? -) : TestMetrics() { +) : TestMetrics { /** * The run count of this test within the _sliding window_. */ diff --git a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetrics.kt b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetrics.kt index bee7bac2b2..73b6e64807 100644 --- a/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetrics.kt +++ b/save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetrics.kt @@ -4,13 +4,6 @@ import kotlinx.serialization.Serializable /** * Scalar test metrics returned by `TestStatisticsStorage.getTestMetrics`. - * - * Because [Kotlin/kotlinx.serialization#1576](https://github.com/Kotlin/kotlinx.serialization/issues/1576) - * is only fixed in 1.8.0, this is a `sealed class` (should be a `sealed interface` instead). - * - * See also: - * - [Kotlin/kotlinx.serialization#1576](https://github.com/Kotlin/kotlinx.serialization/issues/1576) - * - [Kotlin/kotlinx.serialization#1869](https://github.com/Kotlin/kotlinx.serialization/issues/1869) */ @Serializable -sealed class TestMetrics +sealed interface TestMetrics diff --git a/save-cloud-common/src/commonTest/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetricsTest.kt b/save-cloud-common/src/commonTest/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetricsTest.kt index 6fbc86c4f9..d10e8034e0 100644 --- a/save-cloud-common/src/commonTest/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetricsTest.kt +++ b/save-cloud-common/src/commonTest/kotlin/com/saveourtool/save/test/analysis/metrics/TestMetricsTest.kt @@ -21,7 +21,7 @@ class TestMetricsTest { @JsName("encodeSingle") fun `encode single`() { @Suppress("ComplexRedundantLet") - Json.encodeToString(NoDataAvailable.instance).let { encoded -> + Json.encodeToString(NoDataAvailable).let { encoded -> assertNotEquals(illegal = "", actual = encoded) } @@ -58,7 +58,7 @@ class TestMetricsTest { @JsName("encodeMultiple") fun `encode multiple`() { val results: List = listOf( - NoDataAvailable.instance, + NoDataAvailable, RegularTestMetrics(1, 2, 3, 4, null, null), ) @@ -71,7 +71,7 @@ class TestMetricsTest { @JsName("decodeSingle") fun `decode single`() { sequenceOf( - NoDataAvailable.instance, + NoDataAvailable, RegularTestMetrics(1, 2, 3, 4, null, null), RegularTestMetrics(1, 2, 3, 4, 5.toDuration(MINUTES), 6.toDuration(SECONDS)), ).forEach { result -> @@ -85,7 +85,7 @@ class TestMetricsTest { @JsName("decodeMultiple") fun `decode multiple`() { val results: List = listOf( - NoDataAvailable.instance, + NoDataAvailable, RegularTestMetrics(1, 2, 3, 4, null, null), RegularTestMetrics(1, 2, 3, 4, 5.toDuration(MINUTES), 6.toDuration(SECONDS)), ) diff --git a/save-frontend/build.gradle.kts b/save-frontend/build.gradle.kts index 02fd94dc33..5f01929add 100644 --- a/save-frontend/build.gradle.kts +++ b/save-frontend/build.gradle.kts @@ -28,7 +28,7 @@ dependencies { implementation("org.jetbrains.kotlin-wrappers:kotlin-tanstack-react-table") implementation("org.jetbrains.kotlin-wrappers:kotlin-mui-icons") implementation("org.jetbrains.kotlin-wrappers:kotlin-mui") - implementation("io.github.petertrr:kotlin-multiplatform-diff-js:0.4.0") + implementation("io.github.petertrr:kotlin-multiplatform-diff-js:0.5.0") implementation(libs.save.common) implementation(libs.kotlinx.coroutines.core) diff --git a/settings.gradle.kts b/settings.gradle.kts index 7908a2ee2e..351d09b7d5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -31,7 +31,7 @@ pluginManagement { } plugins { - id("com.gradle.enterprise") version "3.15.1" + id("com.gradle.enterprise") version "3.16.2" } includeBuild("gradle/plugins") diff --git a/test-analysis-core/src/main/kotlin/com/saveourtool/save/test/analysis/api/TestStatisticsStorage.kt b/test-analysis-core/src/main/kotlin/com/saveourtool/save/test/analysis/api/TestStatisticsStorage.kt index b9a90830e5..38d4c89f49 100644 --- a/test-analysis-core/src/main/kotlin/com/saveourtool/save/test/analysis/api/TestStatisticsStorage.kt +++ b/test-analysis-core/src/main/kotlin/com/saveourtool/save/test/analysis/api/TestStatisticsStorage.kt @@ -37,7 +37,7 @@ interface TestStatisticsStorage : TestStatusProviderScope { val testRuns = getExecutionStatistics(id) when { - testRuns.isEmpty() -> NoDataAvailable.instance + testRuns.isEmpty() -> NoDataAvailable else -> RegularTestMetrics( successCount = testRuns.count { it.isSuccess() }, failureCount = testRuns.count { it.isFailure() }, diff --git a/test-analysis-core/src/test/kotlin/com/saveourtool/save/test/analysis/api/TestStatisticsStorageTest.kt b/test-analysis-core/src/test/kotlin/com/saveourtool/save/test/analysis/api/TestStatisticsStorageTest.kt index ad6330a91b..8300e0f45b 100644 --- a/test-analysis-core/src/test/kotlin/com/saveourtool/save/test/analysis/api/TestStatisticsStorageTest.kt +++ b/test-analysis-core/src/test/kotlin/com/saveourtool/save/test/analysis/api/TestStatisticsStorageTest.kt @@ -48,7 +48,7 @@ class TestStatisticsStorageTest { @Test fun `test metrics should get updated`() { - assertThat(storage.getTestMetrics(testId)).isEqualTo(NoDataAvailable.instance) + assertThat(storage.getTestMetrics(testId)).isEqualTo(NoDataAvailable) storage[testId] += TestRun(PASSED, null) assertThat(storage.getTestMetrics(testId)).isInstanceOfSatisfying(RegularTestMetrics::class.java) { metrics ->