From 98a9504cbdd0f7241ab526f1a72e6203de6d0a5f Mon Sep 17 00:00:00 2001 From: Stefan Mogeritsch Date: Mon, 22 Dec 2025 14:12:51 +0100 Subject: [PATCH] upgrade Java-25 Kotlin-2.3.0 usw. --- .env | 8 +- .env.example | 4 +- .gitignore | 2 +- ...er-guideline-v3.0.1-archived-2025-09-15.md | 30 +++-- .../docker/docker-architecture.md | 8 +- .../gateway/GatewayApplicationTests.kt | 2 +- build.gradle.kts | 111 ++++++------------ docker-compose.yaml | 14 +-- gradle.properties | 2 +- gradle/libs.versions.toml | 86 +++++++------- gradle/wrapper/gradle-wrapper.properties | 2 +- kotlin-js-store/yarn.lock | 47 ++++---- 12 files changed, 137 insertions(+), 179 deletions(-) diff --git a/.env b/.env index ecdb5c19..79f2e949 100644 --- a/.env +++ b/.env @@ -9,10 +9,10 @@ RESTART_POLICY=no # Docker build versions (optional overrides) DOCKER_VERSION=1.0.0-SNAPSHOT -DOCKER_BUILD_DATE=2025-12-04T15:00:00Z -DOCKER_GRADLE_VERSION=9.1.0 -DOCKER_JAVA_VERSION=21 -DOCKER_NODE_VERSION=22.21.0 +DOCKER_BUILD_DATE=2025-12-22T15:00:00Z +DOCKER_GRADLE_VERSION=9.2.1 +DOCKER_JAVA_VERSION=25 +DOCKER_NODE_VERSION=24.12.0 DOCKER_NGINX_VERSION=1.28.0-alpine # Postgres diff --git a/.env.example b/.env.example index c9699719..68f9cb37 100644 --- a/.env.example +++ b/.env.example @@ -47,7 +47,7 @@ GF_ADMIN_PASSWORD=admin # Docker build versions (optional overrides) DOCKER_GRADLE_VERSION=9.1.0 -DOCKER_JAVA_VERSION=21 -DOCKER_NODE_VERSION=22.21.0 +DOCKER_JAVA_VERSION=25 +DOCKER_NODE_VERSION=24.12.0 DOCKER_NGINX_VERSION=1.28.0-alpine WEB_BUILD_PROFILE=dev diff --git a/.gitignore b/.gitignore index adbd975c..c1473f79 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,7 @@ node_modules/ Thumbs.db # Logs -logs/ +_backup/logs/ **/*.log # Kotlin/Java diff --git a/.junie/guidelines/_archived/docker-guideline-v3.0.1-archived-2025-09-15.md b/.junie/guidelines/_archived/docker-guideline-v3.0.1-archived-2025-09-15.md index 1767372b..0f914ce8 100644 --- a/.junie/guidelines/_archived/docker-guideline-v3.0.1-archived-2025-09-15.md +++ b/.junie/guidelines/_archived/docker-guideline-v3.0.1-archived-2025-09-15.md @@ -475,9 +475,7 @@ Das System integriert sich nahtlos in die bestehende Docker-Versionsverwaltung u ```dockerfile # BEFORE: Redundante Hardcodierung in 12+ Dockerfiles -ARG GRADLE_VERSION=9.0.0 -ARG GRADLE_VERSION=9.0.0 -ARG GRADLE_VERSION=9.0.0 +ARG GRADLE_VERSION=9.2.1 # ... 9 weitere Male identisch wiederholt! ``` @@ -486,9 +484,9 @@ ARG GRADLE_VERSION=9.0.0 ```toml # docker/versions.toml - SINGLE SOURCE OF TRUTH [versions] -gradle = "9.0.0" -java = "21" -node = "20.12.0" +gradle = "9.2.1" +java = "25" +node = "24.12.0" nginx = "1.25-alpine" prometheus = "v2.54.1" grafana = "11.3.0" @@ -515,8 +513,8 @@ docker/ Verwendet von **allen** Dockerfiles: ```bash # --- Build Tools --- -GRADLE_VERSION=9.0.0 -JAVA_VERSION=21 +GRADLE_VERSION=9.2.1 +JAVA_VERSION=25 # --- Build Metadata --- BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') @@ -545,7 +543,7 @@ MEMBERS_SERVICE_PORT=8083 **Clients** (`docker/build-args/clients.env`): ```bash -NODE_VERSION=20.11.0 +NODE_VERSION=24.12.0 NGINX_VERSION=1.25-alpine WEB_APP_PORT=4000 DESKTOP_APP_VNC_PORT=5901 @@ -583,10 +581,10 @@ AUTH_SERVER_PORT=8087 ./scripts/docker-versions-update.sh show # Java auf Version 22 upgraden -./scripts/docker-versions-update.sh update java 22 +./scripts/docker-versions-update.sh update java 25 # Gradle auf 9.1.0 upgraden -./scripts/docker-versions-update.sh update gradle 9.1.0 +./scripts/docker-versions-update.sh update gradle 9.2.1 # Prometheus auf neueste Version upgraden ./scripts/docker-versions-update.sh update prometheus v2.54.1 @@ -630,8 +628,8 @@ api-gateway: dockerfile: dockerfiles/infrastructure/gateway/Dockerfile args: # Zentrale Versionen via Environment-Variablen - GRADLE_VERSION: ${DOCKER_GRADLE_VERSION:-9.0.0} - JAVA_VERSION: ${DOCKER_JAVA_VERSION:-21} + GRADLE_VERSION: ${DOCKER_GRADLE_VERSION:-9.2.1} + JAVA_VERSION: ${DOCKER_JAVA_VERSION:-25} BUILD_DATE: ${BUILD_DATE} VERSION: ${DOCKER_APP_VERSION:-1.0.0} SPRING_PROFILES_ACTIVE: ${DOCKER_SPRING_PROFILES_DEFAULT:-default} @@ -641,15 +639,15 @@ api-gateway: #### **DRY-Prinzip Durchsetzung** ✅ -- **Vor Version 3.0.0**: `GRADLE_VERSION=9.0.0` in 12 Dockerfiles -- **Ab Version 3.0.0**: `gradle = "9.0.0"` **einmalig** in `docker/versions.toml` +- **Vor Version 3.0.0**: `GRADLE_VERSION=9.2.1` in 12 Dockerfiles +- **Ab Version 3.0.0**: `gradle = "9.2.1"` **einmalig** in `docker/versions.toml` #### **Wartungsaufwand drastisch reduziert** ✅ ```bash # BEFORE: 12 Dateien manuell editieren für Gradle-Update # AFTER: Ein Befehl für alle Services -./scripts/docker-versions-update.sh update gradle 9.1.0 +./scripts/docker-versions-update.sh update gradle 9.2.1 ``` #### **Konsistenz garantiert** ✅ diff --git a/.junie/guidelines/technology-guides/docker/docker-architecture.md b/.junie/guidelines/technology-guides/docker/docker-architecture.md index bbdc8ce1..92b3de0c 100644 --- a/.junie/guidelines/technology-guides/docker/docker-architecture.md +++ b/.junie/guidelines/technology-guides/docker/docker-architecture.md @@ -126,8 +126,8 @@ docker/ Verwendet von **allen** Dockerfiles: ```bash # --- Build Tools --- -GRADLE_VERSION=9.1.0 -JAVA_VERSION=21 +GRADLE_VERSION=9.2.1 +JAVA_VERSION=25 # --- Build Metadata --- BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') @@ -135,8 +135,8 @@ VERSION=1.0.0 # --- Common Base Images --- ALPINE_VERSION=3.19 -ECLIPSE_TEMURIN_JDK_VERSION=21-jdk-alpine -ECLIPSE_TEMURIN_JRE_VERSION=21-jre-alpine +ECLIPSE_TEMURIN_JDK_VERSION=25-jdk-alpine +ECLIPSE_TEMURIN_JRE_VERSION=25-jre-alpine # --- Monitoring & Infrastructure Services --- DOCKER_PROMETHEUS_VERSION=v2.54.1 diff --git a/backend/infrastructure/gateway/src/test/kotlin/at/mocode/infrastructure/gateway/GatewayApplicationTests.kt b/backend/infrastructure/gateway/src/test/kotlin/at/mocode/infrastructure/gateway/GatewayApplicationTests.kt index 193ee887..d6fce97d 100644 --- a/backend/infrastructure/gateway/src/test/kotlin/at/mocode/infrastructure/gateway/GatewayApplicationTests.kt +++ b/backend/infrastructure/gateway/src/test/kotlin/at/mocode/infrastructure/gateway/GatewayApplicationTests.kt @@ -8,7 +8,7 @@ import org.springframework.test.context.ActiveProfiles /** * Basis-Test zur Überprüfung, dass der Gateway-Anwendungskontext erfolgreich lädt. - * Verwendet Test-Profil um Produktions-Filter und externe Abhängigkeiten zu deaktivieren. + * Verwendet ein Test-Profil, um Produktions-Filter und externe Abhängigkeiten zu deaktivieren. */ @SpringBootTest( classes = [GatewayApplication::class], diff --git a/build.gradle.kts b/build.gradle.kts index 29a6229a..ece31dee 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,12 @@ +import groovy.json.JsonSlurper +import io.gitlab.arturbosch.detekt.Detekt +import io.gitlab.arturbosch.detekt.extensions.DetektExtension +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jlleitschuh.gradle.ktlint.KtlintExtension +import org.jlleitschuh.gradle.ktlint.reporter.ReporterType +import java.io.ByteArrayOutputStream +import java.util.zip.GZIPOutputStream + plugins { // Version management plugin for dependency updates id("com.github.ben-manes.versions") version "0.51.0" @@ -101,13 +110,13 @@ subprojects { environment("NODE_OPTIONS", merged) // Also set the legacy switch to silence warnings entirely environment("NODE_NO_WARNINGS", "1") - // Set Chrome binary path to avoid snap permission issues + // Set a Chrome binary path to avoid snap permission issues environment("CHROME_BIN", "/usr/bin/google-chrome-stable") environment("CHROMIUM_BIN", "/usr/bin/chromium") environment("PUPPETEER_EXECUTABLE_PATH", "/usr/bin/chromium") } - tasks.withType { + tasks.withType { compilerOptions { freeCompilerArgs.add("-Xannotation-default-target=param-property") } @@ -117,14 +126,14 @@ subprojects { // Detekt & Ktlint default setup // ------------------------------ plugins.withId("io.gitlab.arturbosch.detekt") { - extensions.configure(io.gitlab.arturbosch.detekt.extensions.DetektExtension::class.java) { + extensions.configure(DetektExtension::class.java) { buildUponDefaultConfig = true allRules = false autoCorrect = false config.setFrom(files(rootProject.file("config/detekt/detekt.yml"))) basePath = rootDir.absolutePath } - tasks.withType().configureEach { + tasks.withType().configureEach { jvmTarget = "21" reports { xml.required.set(false) @@ -136,13 +145,13 @@ subprojects { } plugins.withId("org.jlleitschuh.gradle.ktlint") { - extensions.configure(org.jlleitschuh.gradle.ktlint.KtlintExtension::class.java) { + extensions.configure(KtlintExtension::class.java) { android.set(false) outputToConsole.set(true) ignoreFailures.set(false) reporters { - reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.CHECKSTYLE) - reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.PLAIN) + reporter(ReporterType.CHECKSTYLE) + reporter(ReporterType.PLAIN) } } } @@ -220,11 +229,11 @@ tasks.register("archGuardNoFeatureToFeatureDeps") { !n.contains("test") && !n.contains("debug") // ignore test/debug configs } .forEach { cfg -> - cfg.dependencies.withType(org.gradle.api.artifacts.ProjectDependency::class.java).forEach { dep -> + cfg.dependencies.withType(ProjectDependency::class.java).forEach { dep -> // Use reflection to avoid compile-time issues with dependencyProject property val proj = try { - dep.javaClass.getMethod("getDependencyProject").invoke(dep) as org.gradle.api.Project + dep.javaClass.getMethod("getDependencyProject").invoke(dep) as Project } catch (e: Throwable) { null } @@ -270,7 +279,7 @@ tasks.register("checkBundleBudget") { @Suppress("UNCHECKED_CAST") val parsed = - groovy.json.JsonSlurper().parseText(text) as Map> + JsonSlurper().parseText(text) as Map> val budgets = parsed.mapValues { (_, v) -> val raw = (v["rawBytes"] as Number).toLong() @@ -279,8 +288,8 @@ tasks.register("checkBundleBudget") { } fun gzipSize(bytes: ByteArray): Long { - val baos = java.io.ByteArrayOutputStream() - java.util.zip.GZIPOutputStream(baos).use { it.write(bytes) } + val baos = ByteArrayOutputStream() + GZIPOutputStream(baos).use { it.write(bytes) } return baos.toByteArray().size.toLong() } @@ -296,7 +305,7 @@ tasks.register("checkBundleBudget") { } shells.forEach { shell -> - val key = shell.path.trimStart(':').replace(':', '/') // or use colon form for budgets keys below + val key = shell.path.trimStart(':').replace(':', '/') // or use a colon form for budgets keys below val colonKey = shell.path.trimStart(':').replace('/', ':').trim() // ensure ":a:b:c" // Budgets are keyed by a Gradle path with colons but without leading colon in config for readability val budgetKeyCandidates = @@ -307,7 +316,7 @@ tasks.register("checkBundleBudget") { shell.name, ) - val budgetEntry = budgetKeyCandidates.asSequence().mapNotNull { budgets[it] }.firstOrNull() + val budgetEntry = budgetKeyCandidates.firstNotNullOfOrNull { budgets[it] } if (budgetEntry == null) { report.appendLine("- ${shell.path}: No budget configured (skipping)") return@forEach @@ -383,7 +392,7 @@ tasks.register("archGuards") { tasks.register("staticAnalysis") { group = "verification" description = "Run static analysis (detekt, ktlint) and architecture guards" - // These tasks are provided by plugins; only depend if tasks exist + // Plugins provide these tasks; only 'depend on' if tasks exist dependsOn( tasks.matching { it.name == "detekt" }, tasks.matching { it.name == "ktlintCheck" }, @@ -395,80 +404,36 @@ tasks.register("staticAnalysis") { // ### DOKKA (Multi-Module) ### // ################################################################## -// Apply Dokka automatically to Kotlin subprojects to enable per-module docs +// Apply Dokka (V2) automatically to Kotlin subprojects subprojects { - plugins.withId("org.jetbrains.kotlin.jvm") { - apply(plugin = "org.jetbrains.dokka") - } - plugins.withId("org.jetbrains.kotlin.multiplatform") { - apply(plugin = "org.jetbrains.dokka") - } - - // Minimal sourceLink configuration when running in GitHub Actions - tasks.withType(org.jetbrains.dokka.gradle.DokkaTask::class.java).configureEach { - dokkaSourceSets.configureEach { - val repo = System.getenv("GITHUB_REPOSITORY") - if (!repo.isNullOrBlank()) { - sourceLink { - localDirectory.set(project.file("src")) - remoteUrl.set( - java.net.URI.create( - "https://github.com/$repo/blob/main/" + project.path.trimStart(':').replace(':', '/') + "/src", - ).toURL(), - ) - } - } - // Keep module names short and stable - moduleName.set(project.path.trimStart(':')) - } - } + plugins.withId("org.jetbrains.kotlin.jvm") { apply(plugin = "org.jetbrains.dokka") } + plugins.withId("org.jetbrains.kotlin.multiplatform") { apply(plugin = "org.jetbrains.dokka") } } // Aggregate tasks to build multi-module docs in Markdown (GFM) and HTML -val dokkaGfmAll = - tasks.register("dokkaGfmAll") { +// Unified V2 aggregator: builds docs via `dokkaGenerate` in subprojects and aggregates outputs +val dokkaAll = + tasks.register("dokkaAll") { group = "documentation" - description = "Builds Dokka GFM for all modules and aggregates outputs under build/dokka/gfm" - // Depend on all dokkaGfm tasks that exist in subprojects + description = "Builds Dokka (V2) for all modules and aggregates outputs under build/dokka/all" + // Trigger Dokka generation in all subprojects that have the Dokka plugin dependsOn( subprojects .filter { it.plugins.hasPlugin("org.jetbrains.dokka") } - .map { "${it.path}:dokkaGfm" }, + .map { "${it.path}:dokkaGenerate" }, ) doLast { - val dest = layout.buildDirectory.dir("dokka/gfm").get().asFile + val dest = layout.buildDirectory.dir("dokka/all").get().asFile if (dest.exists()) dest.deleteRecursively() dest.mkdirs() subprojects.filter { it.plugins.hasPlugin("org.jetbrains.dokka") }.forEach { p -> - val out = p.layout.buildDirectory.dir("dokka/gfm").get().asFile + // Dokka V2 writes into build/dokka; copy everything to keep format/plugins agnostic + val out = p.layout.buildDirectory.dir("dokka").get().asFile if (out.exists()) { out.copyRecursively(File(dest, p.path.trimStart(':').replace(':', '/')), overwrite = true) } } - println("[DOKKA] Aggregated GFM into ${dest.absolutePath}") - } - } - -val dokkaHtmlAll = - tasks.register("dokkaHtmlAll") { - group = "documentation" - description = "Builds Dokka HTML for all modules and aggregates outputs under build/dokka/html" - dependsOn( - subprojects - .filter { it.plugins.hasPlugin("org.jetbrains.dokka") } - .map { "${it.path}:dokkaHtml" }, - ) - doLast { - val dest = layout.buildDirectory.dir("dokka/html").get().asFile - if (dest.exists()) dest.deleteRecursively() - dest.mkdirs() - subprojects.filter { it.plugins.hasPlugin("org.jetbrains.dokka") }.forEach { p -> - val out = p.layout.buildDirectory.dir("dokka/html").get().asFile - if (out.exists()) { - out.copyRecursively(File(dest, p.path.trimStart(':').replace(':', '/')), overwrite = true) - } - } - println("[DOKKA] Aggregated HTML into ${dest.absolutePath}") + println("[DOKKA] Aggregated Dokka V2 outputs into ${dest.absolutePath}") } } @@ -491,7 +456,7 @@ tasks.withType().configureEach { val merged = if (current.isNullOrBlank()) "--no-deprecation" else "$current --no-deprecation" environment("NODE_OPTIONS", merged) environment("NODE_NO_WARNINGS", "1") - // Set Chrome binary path to avoid snap permission issues + // Set a Chrome binary path to avoid snap permission issues environment("CHROME_BIN", "/usr/bin/google-chrome-stable") environment("CHROMIUM_BIN", "/usr/bin/chromium") environment("PUPPETEER_EXECUTABLE_PATH", "/usr/bin/chromium") diff --git a/docker-compose.yaml b/docker-compose.yaml index 589fd520..d932dc18 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -243,7 +243,7 @@ services: args: # Build-Args aus deinen .env Dateien (werden hier statisch benötigt für den Build) GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.1.0}" - JAVA_VERSION: "${DOCKER_JAVA_VERSION:-21}" + JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}" VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}" BUILD_DATE: "${DOCKER_BUILD_DATE}" labels: @@ -317,7 +317,7 @@ services: args: # Build-Args aus deinen .env Dateien (werden hier statisch benötigt für den Build) GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.1.0}" - JAVA_VERSION: "${DOCKER_JAVA_VERSION:-21}" + JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}" VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}" BUILD_DATE: "${DOCKER_BUILD_DATE}" labels: @@ -373,7 +373,7 @@ services: dockerfile: backend/services/entries/Dockerfile args: GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.1.0}" - JAVA_VERSION: "${DOCKER_JAVA_VERSION:-21}" + JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}" VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}" BUILD_DATE: "${DOCKER_BUILD_DATE}" labels: @@ -411,7 +411,7 @@ services: dockerfile: backend/services/results/results-service/Dockerfile args: GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.1.0}" - JAVA_VERSION: "${DOCKER_JAVA_VERSION:-21}" + JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}" VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}" BUILD_DATE: "${DOCKER_BUILD_DATE}" labels: @@ -449,7 +449,7 @@ services: dockerfile: backend/services/scheduling/scheduling-service/Dockerfile args: GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.1.0}" - JAVA_VERSION: "${DOCKER_JAVA_VERSION:-21}" + JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}" VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}" BUILD_DATE: "${DOCKER_BUILD_DATE}" labels: @@ -492,9 +492,9 @@ services: dockerfile: config/docker/nginx/web-app/Dockerfile args: GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.1.0}" - JAVA_VERSION: "${DOCKER_JAVA_VERSION:-21}" + JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}" # Frontend spezifisch: - NODE_VERSION: "${DOCKER_NODE_VERSION:-22.21.0}" + NODE_VERSION: "${DOCKER_NODE_VERSION:-24.12.0}" NGINX_IMAGE_TAG: "${DOCKER_NGINX_VERSION:-1.28.0-alpine}" WEB_BUILD_PROFILE: "${WEB_BUILD_PROFILE:-dev}" # dev oder prod # Metadaten: diff --git a/gradle.properties b/gradle.properties index 84e06a23..1b6a94f9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ kotlin.incremental.multiplatform=true kotlin.incremental.js=true kotlin.caching.enabled=true kotlin.compiler.execution.strategy=in-process -kotlin.compiler.preciseCompilationResultsBackup=true +# kotlin.compiler.preciseCompilationResultsBackup=true kotlin.stdlib.default.dependency=true # Gradle Configuration diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a0dbf5cc..f9086fad 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,11 +4,11 @@ [versions] # --- Android Ecosystem --- -agp = "8.1.4" +# agp = "8.1.4" # --- Kotlin Ecosystem --- -kotlin = "2.2.20" -kotlin-logging = "7.0.3" +kotlin = "2.3.0" +kotlin-logging = "7.0.13" kotlinx = "1.10.2" kotlinx-serialization-json = "1.9.0" kotlinx-datetime = "0.7.1" @@ -16,44 +16,37 @@ kotlinx-coroutines = "1.10.2" # --- Spring Ecosystem --- -springBoot = "3.5.6" -springCloud = "2025.0.0" -springCloudGateway = "4.3.0" +springBoot = "3.5.9" +springCloud = "2025.1.0" +# springCloudGateway = "4.3.0" springDependencyManagement = "1.1.7" -springdoc = "2.8.13" +springdoc = "3.0.0" # --- Ktor (API Layer & Client) --- ktor = "3.3.3" # --- DI --- -koin = "4.1.0" -koinCompose = "4.0.0" +koin = "4.1.1" +koinCompose = "4.1.1" # --- Compose UI --- -androidx-lifecycle = "2.9.4" -composeHotReload = "1.0.0-rc02" -composeMultiplatform = "1.9.0" - -# coroutinesVersion = "1.10.2" -# dateTimeVersion = "0.7.1" -# koin = "4.1.0" -# ktor = "3.3.3" -# sqlDelight = "2.1.0" -# material3 = "1.3.2" +androidx-lifecycle = "2.9.6" +composeHotReload = "1.0.0" +composeMultiplatform = "1.9.3" # --- Database & Persistence --- exposed = "0.61.0" postgresql = "42.7.8" hikari = "7.0.2" -h2 = "2.3.232" -flyway = "11.7.2" -redisson = "3.52.0" -lettuce = "6.6.0.RELEASE" -sqldelight = "2.1.0" +h2 = "2.4.240" +flyway = "11.19.1" +redisson = "4.0.0" +lettuce = "7.2.1.RELEASE" +sqldelight = "2.2.1" # --- Service Discovery & Monitoring --- -micrometer = "1.15.4" -micrometerTracing = "1.5.4" +micrometer = "1.16.1" +micrometerTracing = "1.6.1" zipkin = "3.5.1" zipkinReporter = "3.5.1" @@ -62,26 +55,29 @@ auth0Jwt = "4.5.0" keycloakAdminClient = "26.0.7" # --- Testing --- -junitJupiter = "5.12.2" -junitPlatform = "1.12.2" -mockk = "1.14.6" -assertj = "3.27.4" -testcontainers = "1.21.3" -testcontainersKeycloak = "3.9.0" +junitJupiter = "6.0.1" +junitPlatform = "6.0.1" +mockk = "1.14.7" +assertj = "3.27.6" +testcontainers = "2.0.3" +testcontainersKeycloak = "4.0.1" +testcontainersJunitJupiter = "1.21.4" +testcontainersPostgresql = "1.21.4" +testcontainersKafka = "1.21.4" # --- Resilience4j --- resilience4j = "2.3.0" # --- Utilities --- -#uuid = "0.9.0" +# uuid = "0.9.0" bignum = "0.3.10" -logback = "1.5.19" -caffeine = "3.2.2" -reactorKafka = "1.3.23" -jackson = "2.19.2" +logback = "1.5.22" +caffeine = "3.2.3" +# reactorKafka = "1.3.23" +jackson = "3.0.3" jakartaAnnotation = "3.0.0" -roomCommonJvm = "2.8.2" -uiDesktop = "1.9.3" +roomCommonJvm = "2.8.4" +uiDesktop = "1.7.0" # --- Logging --- slf4j = "2.0.17" @@ -235,9 +231,9 @@ reactor-test = { module = "io.projectreactor:reactor-test" } # Version wird von mockk = { module = "io.mockk:mockk", version.ref = "mockk" } assertj-core = { module = "org.assertj:assertj-core", version.ref = "assertj" } testcontainers-core = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" } -testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers" } -testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "testcontainers" } -testcontainers-kafka = { module = "org.testcontainers:kafka", version.ref = "testcontainers" } +testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainersJunitJupiter" } +testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "testcontainersPostgresql" } +testcontainers-kafka = { module = "org.testcontainers:kafka", version.ref = "testcontainersKafka" } testcontainers-keycloak = { module = "com.github.dasniko:testcontainers-keycloak", version.ref = "testcontainersKeycloak" } room-common-jvm = { module = "androidx.room:room-common-jvm", version.ref = "roomCommonJvm" } ui-desktop = { module = "androidx.compose.ui:ui-desktop", version.ref = "uiDesktop" } @@ -500,8 +496,8 @@ monitoring-complete = [ [plugins] -androidApplication = { id = "com.android.application", version.ref = "agp" } -androidLibrary = { id = "com.android.library", version.ref = "agp" } +# androidApplication = { id = "com.android.application", version.ref = "agp" } +# androidLibrary = { id = "com.android.library", version.ref = "agp" } kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } @@ -524,4 +520,4 @@ foojayResolver = { id = "org.gradle.toolchains.foojay-resolver-convention", vers # See: https://github.com/Kotlin/dokka # Note: dokka 2.0.0+ matches Kotlin 2.0+; verify compatibility if bumping Kotlin # Using latest stable known compatible as of 2025-10 -dokka = { id = "org.jetbrains.dokka", version = "2.0.0" } +dokka = { id = "org.jetbrains.dokka", version = "2.1.0" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e111328..23449a2b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 5fc796ba..39b91223 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"@cashapp/sqldelight-sqljs-worker@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@cashapp/sqldelight-sqljs-worker/-/sqldelight-sqljs-worker-2.1.0.tgz#4ab898698aca9487f47fc9a42107c606c3ce81c5" - integrity sha512-odvBljb1rUOCk3UUZgjdiAChEohYI4Fy6Tj3NUy3l6u3WV/we+tjDTJ/kC25CJKD4pv0ZlH5AL1sKsZ5clKCew== +"@cashapp/sqldelight-sqljs-worker@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@cashapp/sqldelight-sqljs-worker/-/sqldelight-sqljs-worker-2.2.1.tgz#c71776a9dddfc435d4f1e64317a7039d447ea024" + integrity sha512-cj/llgS1T94t7rz63fI7pbi+jJx+vQofCT58KyMZb9XVRuoxb4taB5wbbBa4e/iljiuN5XIGGPFx+5PvtVh3LQ== "@colors/colors@1.5.0": version "1.5.0" @@ -1041,10 +1041,10 @@ engine.io@~6.6.0: engine.io-parser "~5.2.1" ws "~8.17.1" -enhanced-resolve@^5.17.2: - version "5.18.3" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44" - integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== +enhanced-resolve@^5.17.3: + version "5.18.4" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828" + integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -1740,10 +1740,9 @@ karma-webpack@5.0.1: minimatch "^9.0.3" webpack-merge "^4.1.5" -karma@6.4.4: +"karma@github:Kotlin/karma#6.4.5": version "6.4.4" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.4.tgz#dfa5a426cf5a8b53b43cd54ef0d0d09742351492" - integrity sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w== + resolved "https://codeload.github.com/Kotlin/karma/tar.gz/239a8fc984584f0d96b1dd750e7a5e2c79da93a6" dependencies: "@colors/colors" "1.5.0" body-parser "^1.19.0" @@ -1775,10 +1774,10 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -kotlin-web-helpers@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-2.1.0.tgz#6cd4b0f0dc3baea163929c8638155b8d19c55a74" - integrity sha512-NAJhiNB84tnvJ5EQx7iER3GWw7rsTZkX9HVHZpe7E3dDBD/dhTzqgSwNU3MfQjniy2rB04bP24WM9Z32ntUWRg== +kotlin-web-helpers@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-3.0.0.tgz#3ed6b48f694f74bb60a737a9d7e2c0e3b29abdb9" + integrity sha512-kdQO4AJQkUPvpLh9aglkXDRyN+CfXO7pKq+GESEnxooBFkQpytLrqZis3ABvmFN1cGw/ZQ/K38u5sRGW+NfBnw== dependencies: format-util "^1.0.5" @@ -1953,10 +1952,10 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mocha@11.7.1: - version "11.7.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-11.7.1.tgz#91948fecd624fb4bd154ed260b7e1ad3910d7c7a" - integrity sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A== +mocha@11.7.2: + version "11.7.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-11.7.2.tgz#3c0079fe5cc2f8ea86d99124debcc42bb1ab22b5" + integrity sha512-lkqVJPmqqG/w5jmmFtiRvtA2jkDyNVUcefFJKb2uyX4dekk8Okgqop3cgbFiaIvj8uCRJVTP5x9dfxGyXm2jvQ== dependencies: browser-stdout "^1.3.1" chokidar "^4.0.1" @@ -2977,10 +2976,10 @@ webpack-sources@^3.3.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== -webpack@5.100.2: - version "5.100.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.100.2.tgz#e2341facf9f7de1d702147c91bcb65b693adf9e8" - integrity sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw== +webpack@5.101.3: + version "5.101.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.101.3.tgz#3633b2375bb29ea4b06ffb1902734d977bc44346" + integrity sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -2992,7 +2991,7 @@ webpack@5.100.2: acorn-import-phases "^1.0.3" browserslist "^4.24.0" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.2" + enhanced-resolve "^5.17.3" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0"