diff --git a/.claude/settings.json b/.claude/settings.json index 357650cf71..3c7da68c35 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -1,5 +1,6 @@ { "$schema": "https://json.schemastore.org/claude-code-settings.json", + "plansDirectory": ".claude/plans", "permissions": { "allow": [ "Edit(version.gradle.kts)", @@ -32,8 +33,11 @@ "Bash(mkdir:*)", "Bash(touch:*)", "Bash(python3 .agents/skills/update-copyright/scripts/update_copyright.py:*)", + "Bash(.agents/skills/version-bumped/scripts/version-bumped.sh)", "Bash(./config/pull)", - "Bash(./config/migrate)" + "Bash(./config/migrate)", + "Skill(pre-pr)", + "Skill(pre-pr:*)" ], "deny": [ "Bash(git reset --hard:*)", diff --git a/.gitignore b/.gitignore index dfb4774d4e..ed1b0baa78 100644 --- a/.gitignore +++ b/.gitignore @@ -54,8 +54,12 @@ .idea/modules .idea/shelf +# `.idea/misc.xml` is intentionally NOT re-included below. It is project-local — +# it holds the per-project JDK name and IDEA's own churn (entry-point list +# indices, external-storage toggles) — so `.idea/*.xml` above keeps it ignored. +# `./config/pull` (via `migrate`) untracks any copy an earlier pull committed. + # Do not ignore the following IDEA settings -!.idea/misc.xml !.idea/codeStyleSettings.xml !.idea/codeStyles/ !.idea/copyright/ @@ -173,6 +177,12 @@ __pycache__/ # Claude working files /.claude/worktrees/ +# Ephemeral plan-mode scratch (durable task docs live in `.agents/tasks/`). +/.claude/plans/ + +# Personal, per-developer Claude Code settings overrides (never committed; +# the distributed `.claude/settings.json` is the shared, committed layer). +/.claude/settings.local.json # Auto-downloaded Lychee binary used by the `check-links` skill. /.agents/skills/check-links/.cache/ @@ -190,7 +200,6 @@ docs/_preview/resources/ # <<< shared config <<< # >>> repo-local entries (preserved across ./config/pull) >>> -!.idea/misc.xml !.idea/codeStyleSettings.xml !.idea/codeStyles/ !.idea/copyright/ diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 264f823015..0000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/base/src/main/kotlin/io/spine/compare/ComparatorRegistry.kt b/base/src/main/kotlin/io/spine/compare/ComparatorRegistry.kt index 7803370ce2..dd231e64c8 100644 --- a/base/src/main/kotlin/io/spine/compare/ComparatorRegistry.kt +++ b/base/src/main/kotlin/io/spine/compare/ComparatorRegistry.kt @@ -53,10 +53,18 @@ public object ComparatorRegistry { map[clazz] = comparator } + /** + * Registers a [comparator] for the specified type [T]. + * + * The method overrides the previously set comparator, if any. + */ + public inline fun register(comparator: Comparator): Unit = + register(T::class.java, comparator) + /** * Returns a comparator for the given [clazz]. * - * @throws IllegalStateException if there is no a comparator for the given [clazz]. + * @throws IllegalStateException if there is no comparator for the given [clazz]. */ @JvmStatic @Suppress("UNCHECKED_CAST") // Type safety is enforced by `register()` method signature. @@ -65,6 +73,13 @@ public object ComparatorRegistry { return map[clazz]!! as Comparator } + /** + * Returns a comparator for the specified type [T]. + * + * @throws IllegalStateException if there is no comparator for the type [T]. + */ + public inline fun get(): Comparator = get(T::class.java) + /** * Returns a comparator for the given [clazz], if any. */ @@ -72,12 +87,22 @@ public object ComparatorRegistry { @Suppress("UNCHECKED_CAST") // Type safety is enforced by `register()` method signature. public fun find(clazz: Class): Comparator? = map[clazz] as Comparator? + /** + * Returns a comparator for the specified type [T], if any. + */ + public inline fun find(): Comparator? = find(T::class.java) + /** * Tells whether the registry has a comparator for the given [clazz]. */ @JvmStatic public fun contains(clazz: Class<*>): Boolean = map.containsKey(clazz) + /** + * Tells whether the registry has a comparator for the specified type [T]. + */ + public inline fun contains(): Boolean = contains(T::class.java) + /** * Returns the types for which comparators are currently registered. * @@ -92,28 +117,3 @@ public object ComparatorRegistry { .forEach { it.registerIn(this) } } } - -/** - * Tells whether the registry has a comparator for the specified type [T]. - */ -public inline fun ComparatorRegistry.contains(): Boolean = contains(T::class.java) - -/** - * Returns a comparator for the specified type [T], if any. - */ -public inline fun ComparatorRegistry.find(): Comparator? = find(T::class.java) - -/** - * Returns a comparator for the specified type [T]. - * - * @throws IllegalStateException if there is no a comparator for the type [T]. - */ -public inline fun ComparatorRegistry.get(): Comparator = get(T::class.java) - -/** - * Registers a [comparator] for the specified type [T]. - * - * The method overrides the previously set comparator, if any. - */ -public inline fun ComparatorRegistry.register(comparator: Comparator): Unit = - register(T::class.java, comparator) diff --git a/base/src/main/kotlin/io/spine/string/Indent.kt b/base/src/main/kotlin/io/spine/string/Indent.kt index b1368c912b..fdda6a04a2 100644 --- a/base/src/main/kotlin/io/spine/string/Indent.kt +++ b/base/src/main/kotlin/io/spine/string/Indent.kt @@ -51,6 +51,21 @@ public data class Indent( */ override fun toString(): String = value + /** + * Repeats this indentation [n] times. + * + * @throws [IllegalArgumentException] when [n] < 0. + */ + public fun repeat(n: Int): String { + require(n >= 0) { "Count `n` must be non-negative, but was $n."} + return value.repeat(n) + } + + /** + * Same as [repeat]. + */ + public fun atLevel(n: Int): String = repeat(n) + public companion object { /** @@ -88,18 +103,3 @@ public data class Indent( } } } - -/** - * Repeats this indentation [n] times. - * - * @throws [IllegalArgumentException] when [n] < 0. - */ -public fun Indent.repeat(n: Int): String { - require(size >= 0) { "Count `n` must be non-negative, but was $size."} - return value.repeat(n) -} - -/** - * Same as [repeat]. - */ -public fun Indent.atLevel(l: Int): String = repeat(l) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/build/ErrorProne.kt b/buildSrc/src/main/kotlin/io/spine/dependency/build/ErrorProne.kt index b1e3e474cf..a0226ca4a4 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/build/ErrorProne.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/build/ErrorProne.kt @@ -29,8 +29,13 @@ package io.spine.dependency.build // https://errorprone.info/ @Suppress("unused", "ConstPropertyName") object ErrorProne { - // https://github.com/google/error-prone - private const val version = "2.36.0" + /** + * This is the last version which is compatible with Java 17. + * + * The version 2.43.0 requires JDK 21. + * https://github.com/google/error-prone/releases/tag/v2.43.0 + */ + private const val version = "2.42.0" const val group = "com.google.errorprone" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt b/buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt index a2a64c0efa..33b3b089cc 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt @@ -33,7 +33,7 @@ import io.spine.dependency.DependencyWithBom @Suppress("unused") object Jackson : DependencyWithBom() { override val group = "com.fasterxml.jackson" - override val version = "2.22.0" + override val version = "2.22.1" // https://github.com/FasterXML/jackson-annotations?tab=readme-ov-file#release-notes const val annotationsVersion = "2.22" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt index 433c1bd959..4c0bcf02ef 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt @@ -33,8 +33,8 @@ package io.spine.dependency.local */ @Suppress("ConstPropertyName", "unused") object Base { - const val version = "2.0.0-SNAPSHOT.421" - const val versionForBuildScript = "2.0.0-SNAPSHOT.421" + const val version = "2.0.0-SNAPSHOT.423" + const val versionForBuildScript = "2.0.0-SNAPSHOT.423" const val group = Spine.group private const val prefix = "spine" const val libModule = "$prefix-base" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt index 8dbffcdc46..ba16d2f8bd 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt @@ -72,7 +72,7 @@ object Compiler : Dependency() { * The version of the Compiler dependencies. */ override val version: String - private const val fallbackVersion = "2.0.0-SNAPSHOT.059" + private const val fallbackVersion = "2.0.0-SNAPSHOT.061" /** * The distinct version of the Compiler used by other build tools. @@ -81,7 +81,7 @@ object Compiler : Dependency() { * transitive dependencies, this is the version used to build the project itself. */ val dogfoodingVersion: String - private const val fallbackDfVersion = "2.0.0-SNAPSHOT.059" + private const val fallbackDfVersion = "2.0.0-SNAPSHOT.061" /** * The artifact for the Compiler Gradle plugin. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt index d4b8a18ccc..2f7e68e775 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt @@ -39,7 +39,7 @@ typealias CoreJava = CoreJvm @Suppress("ConstPropertyName", "unused") object CoreJvm { const val group = Spine.group - const val version = "2.0.0-SNAPSHOT.381" + const val version = "2.0.0-SNAPSHOT.420" const val coreArtifact = "spine-core" const val clientArtifact = "spine-client" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt index e9f477ac3c..c79171f064 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt @@ -33,7 +33,7 @@ package io.spine.dependency.local */ @Suppress("ConstPropertyName", "unused") object Logging { - const val version = "2.0.0-SNAPSHOT.419" + const val version = "2.0.0-SNAPSHOT.422" const val group = Spine.group const val loggingArtifact = "spine-logging" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt index 3ff845647a..271fe49e33 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt @@ -40,7 +40,7 @@ import io.spine.dependency.Dependency ) object Time : Dependency() { override val group = Spine.group - override val version = "2.0.0-SNAPSHOT.242" + override val version = "2.0.0-SNAPSHOT.244" private const val infix = "spine-time" fun lib(version: String): String = "$group:$infix:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt index cd11577fbe..c0cbea3869 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt @@ -34,8 +34,8 @@ package io.spine.dependency.local @Suppress("ConstPropertyName", "unused") object ToolBase { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.402" - const val dogfoodingVersion = "2.0.0-SNAPSHOT.402" + const val version = "2.0.0-SNAPSHOT.403" + const val dogfoodingVersion = "2.0.0-SNAPSHOT.403" const val lib = "$group:tool-base:$version" const val classicCodegen = "$group:classic-codegen:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt index 10f9f0dba1..9a92fe8b0f 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt @@ -36,7 +36,7 @@ object Validation { /** * The version of the Validation library artifacts. */ - const val version = "2.0.0-SNAPSHOT.446" + const val version = "2.0.0-SNAPSHOT.450" const val group = Spine.toolsGroup private const val prefix = "validation" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/test/Jacoco.kt b/buildSrc/src/main/kotlin/io/spine/dependency/test/Jacoco.kt index 478ae1b96a..04a8888897 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/test/Jacoco.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/test/Jacoco.kt @@ -34,4 +34,12 @@ package io.spine.dependency.test @Suppress("ConstPropertyName") object Jacoco { const val version = "0.8.15" + + /** + * The Maven coordinates of the standalone JaCoCo agent JAR (the `runtime` + * classifier), attached via `-javaagent:` to forked JVMs — Gradle TestKit + * workers and the Spine Compiler process — so their execution is credited + * to coverage. + */ + const val agent = "org.jacoco:org.jacoco.agent:$version:runtime" } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/KoverConfig.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/KoverConfig.kt index e3bd5b98dd..9836fae1a6 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/KoverConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/KoverConfig.kt @@ -29,13 +29,16 @@ package io.spine.gradle.report.coverage import io.spine.dependency.test.Jacoco import io.spine.dependency.test.Kover import io.spine.gradle.testing.TESTKIT_COVERAGE_DIR +import io.spine.gradle.testing.isSpineCompilerLaunchTask import java.io.File import kotlinx.kover.gradle.plugin.dsl.KoverProjectExtension import org.gradle.api.Project import org.gradle.api.file.SourceDirectorySet import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.provider.Provider +import org.gradle.api.tasks.JavaExec import org.gradle.api.tasks.SourceSet +import org.gradle.kotlin.dsl.project import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet @@ -104,6 +107,13 @@ private const val KOTLIN_FILE_CLASS_SUFFIX: String = "Kt" * the probe level against each module's actual bytecode: a line hit both * in-process and out-of-process is counted once. Summing pre-aggregated XML * reports instead would double-count such lines. + * - Feeds the JaCoCo execution data produced by the forked Spine Compiler JVMs + * (see [io.spine.gradle.testing.enableSpineCompilerCoverage]) into the **root** + * `total` report as `additionalBinaryReports`. This credits code-generation + * plugins — renderers and generators that run out-of-process in the compiler + * fork and are otherwise reported at ~0%. Fed only at the root: Codecov ingests + * the root report, whose aggregation owns those classes, so a per-module feed + * would be redundant. * * This is the Kover-based successor to the deprecated JaCoCo-based * coverage aggregation pipeline. The behaviour mirrors what @@ -160,7 +170,10 @@ class KoverConfig private constructor( } private fun addAggregationDependency(sub: Project) { - rootProject.dependencies.add("kover", rootProject.project(sub.path)) + // Pass the project path, not the `Project` instance: using a `Project` + // object as a dependency notation is deprecated since Gradle 9. + val dependencies = rootProject.dependencies + dependencies.add("kover", dependencies.project(sub.path)) } /** @@ -198,6 +211,7 @@ class KoverConfig private constructor( onCheck.set(true) } additionalBinaryReports.addAll(rootTestKitExecFilesProvider()) + additionalBinaryReports.addAll(rootCompilerExecFilesProvider()) } filters { excludes { @@ -239,7 +253,43 @@ class KoverConfig private constructor( rootProject.provider { rootProject.subprojects.asSequence() .filter { it.pluginManager.hasPlugin(Kover.id) } - .flatMap { testKitExecFiles(it).asSequence() } + .flatMap { execFiles(it, TESTKIT_COVERAGE_DIR).asSequence() } + .toList() + } + + /** + * Lazy `Provider` of the JaCoCo execution-data files produced by the forked + * Spine Compiler JVMs across every subproject. + * + * These files credit the out-of-process execution of compiler plugins — + * renderers and generators that run inside the compiler fork — to the root + * coverage rollup. Unlike the TestKit files, they are collected from **all** + * subprojects regardless of whether the producing module applies Kover: the + * exec may be produced by a module that does not itself apply Kover + * (typically a test-only module), while the classes it credits belong to the + * aggregated production modules. Resolved at task-graph time, after the + * launch tasks have written them. + * + * The files are the `.exec` outputs that each subproject's **currently + * configured** `launch*SpineCompiler` tasks still declare — read from the task + * outputs, not by scanning the coverage directory. A stale exec left in an + * un-`clean`ed workspace is therefore never credited, whether its launch task + * was removed or the module simply stopped enabling the helper (in which case + * the task no longer declares the exec as an output). Filtering by the `exec` + * extension drops any non-coverage outputs the compiler task may also declare. + * + * @see io.spine.gradle.testing.enableSpineCompilerCoverage + */ + private fun rootCompilerExecFilesProvider(): Provider> = + rootProject.provider { + rootProject.subprojects.asSequence() + .flatMap { sub -> + sub.tasks.withType(JavaExec::class.java) + .matching { it.isSpineCompilerLaunchTask() } + .asSequence() + .flatMap { it.outputs.files.asSequence() } + } + .filter { it.isFile && it.extension == "exec" } .toList() } @@ -248,7 +298,7 @@ class KoverConfig private constructor( * TestKit workers of [sub]. See [rootTestKitExecFilesProvider] for timing notes. */ private fun testKitExecFilesProvider(sub: Project): Provider> = - sub.provider { testKitExecFiles(sub) } + sub.provider { execFiles(sub, TESTKIT_COVERAGE_DIR) } /** * Lazy `Provider` of the generated-class FQN exclusion patterns @@ -284,15 +334,20 @@ class KoverConfig private constructor( } /** - * Returns the JaCoCo execution-data (`.exec`) files written by the Gradle TestKit - * workers of the [project], or an empty list if the module produced none. + * Returns the JaCoCo execution-data (`.exec`) files found in the [dirName] + * directory under the [project]'s `build` directory, or an empty list if the + * module produced none. * - * The files reside under `build/`[TESTKIT_COVERAGE_DIR] and are created by the - * `plugin-testlib` test harness when a module opts in via - * [io.spine.gradle.testing.enableTestKitCoverage]. + * Used for the Gradle TestKit workers, which write into [TESTKIT_COVERAGE_DIR] + * when a module opts in via [io.spine.gradle.testing.enableTestKitCoverage]. A + * directory scan is safe there because the exec directory is wiped once per build + * (see `enableTestKitCoverage`); the Spine Compiler collector instead gathers its + * files from the current launch tasks (see + * [io.spine.gradle.testing.enableSpineCompilerCoverage]), because its cacheable + * tasks cannot wipe the directory. */ -private fun testKitExecFiles(project: Project): List { - val dir = project.layout.buildDirectory.dir(TESTKIT_COVERAGE_DIR).get().asFile +private fun execFiles(project: Project, dirName: String): List { + val dir = project.layout.buildDirectory.dir(dirName).get().asFile if (!dir.isDirectory) { return emptyList() } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/SiblingCoverage.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/SiblingCoverage.kt index 1c9d1f54da..69a42c5a49 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/SiblingCoverage.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/SiblingCoverage.kt @@ -101,8 +101,10 @@ private fun Project.execFilesOf(testTasks: TaskCollection): Provider]SpineCompiler` + * [JavaExec][org.gradle.api.tasks.JavaExec] tasks. Kover (and JaCoCo) instrument + * only the `test` JVM, so this out-of-process execution is otherwise not credited + * to coverage, even though the module's `.proto` fixtures exercise it on every build. + * + * For every such launch task, this method: + * + * 1. Resolves the standalone JaCoCo agent JAR ([Jacoco.agent]) through a dedicated + * [AGENT_CONFIGURATION] configuration. + * 2. Attaches + * `-javaagent:=destfile=build/`[COMPILER_COVERAGE_DIR]`/.exec,append=false` + * to the forked JVM. Each launch variant (`main`, `test`, `testFixtures`) + * writes its own per-task file, and `append=false` makes every run overwrite + * it, so a re-run never accumulates a previous run's probes. + * 3. Declares that `.exec` file as a **task output**, which keeps the launch tasks + * cacheable. A `JavaExec` task blocks until the forked JVM exits, and the agent + * flushes the exec on that exit — so the file is already on disk when the task + * action returns and *can* be a declared output. Declaring it lets Gradle's + * build cache store and restore it, so the coverage survives both an + * `UP-TO-DATE` skip (the file stays on disk from the previous run) and a + * `FROM-CACHE` hit (the file is restored from the cache). This is the key + * difference from [enableTestKitCoverage], whose TestKit workers flush their + * exec only *after* the `Test` task completes, so the file cannot be declared + * as a task output — which is why that helper must instead disable caching. + * + * The agent is attached from a `doFirst` action rather than a `jvmArgumentProviders` + * entry so that its *absolute path* — machine-specific, under the Gradle user home — + * stays out of the task's input fingerprint, where it would break build-cache reuse + * across machines. The agent *coordinate* ([Jacoco.agent]) is instead declared as an + * `inputs.property`, so bumping the JaCoCo version invalidates the launch tasks and + * regenerates the exec — a stale exec from an incompatible agent can never survive an + * `UP-TO-DATE` skip or a `FROM-CACHE` hit. The exec content otherwise depends on the + * compiler's own inputs, which already key up-to-dateness. + * + * The produced `.exec` files are merged into the **root** Kover report by + * [io.spine.gradle.report.coverage.KoverConfig]. Only classes the root aggregation + * owns — the project's own renderers and generators — are credited from them; the + * compiler loads those classes as their original, un-relocated artifacts, so + * JaCoCo's class IDs match. The agent emits binary execution data because Kover + * merges binary data at the probe level — see `KoverConfig` for why binary, not XML. + * + * The method is idempotent — a repeated call on the same project returns early + * instead of attaching the agent twice — and may be called on every subproject; + * it is a no-op for modules that declare no `launch*SpineCompiler` task. + */ +fun Project.enableSpineCompilerCoverage() { + if (configurations.findByName(AGENT_CONFIGURATION) != null) { + return + } + val agent = configurations.maybeCreate(AGENT_CONFIGURATION).apply { + isCanBeConsumed = false + isCanBeResolved = true + } + dependencies.add(agent.name, Jacoco.agent) + + val agentPath = agent.elements.map { it.single().asFile.absolutePath } + val execDir = layout.buildDirectory.dir(COMPILER_COVERAGE_DIR) + + val launchTasks = tasks.withType().matching { it.isSpineCompilerLaunchTask() } + + launchTasks.configureEach { + val taskName = name + val execFile = execDir.map { it.file("$taskName.exec") } + // Track the agent *coordinate*, not the resolved absolute path, so a JaCoCo + // version bump invalidates the task and regenerates the exec while the cache + // key stays machine-independent — see the KDoc. + inputs.property(JACOCO_AGENT_INPUT, Jacoco.agent) + // Captured as a task output so the build cache stores and restores it — + // see the KDoc for why a synchronous `JavaExec` can declare its agent exec + // while a TestKit worker cannot. + outputs.file(execFile) + doFirst { + val file = execFile.get().asFile + file.parentFile.mkdirs() + jvmArgs( + "-javaagent:${agentPath.get()}=destfile=${file.absolutePath},append=false" + ) + } + } + + // The root Kover report/verification tasks read these exec files as + // `additionalBinaryReports`, but do not otherwise depend on the (non-Kover) + // test modules that produce them. Make them depend on the launch tasks — + // a hard `dependsOn`, not mere ordering, so that running a report task by + // itself still triggers the launch tasks that write the exec files. + rootProject.tasks + .matching { it.consumesCoverageBinaryReports() } + .configureEach { dependsOn(launchTasks) } +} + +/** + * Tells whether this is one of the `launch[]SpineCompiler` tasks that + * fork the Spine Compiler — matched by name to avoid a compile-time dependency on + * the compiler Gradle plugin's task types. + * + * `internal` so [io.spine.gradle.report.coverage.KoverConfig] can collect the exec + * files of the **current** launch tasks (rather than scanning the directory) and + * thereby ignore stale execs from removed tasks. + */ +internal fun Task.isSpineCompilerLaunchTask(): Boolean = + name.startsWith(LAUNCH_TASK_PREFIX) && name.endsWith(LAUNCH_TASK_SUFFIX) + +/** + * The name of the directory under a module's `build` directory where the coverage + * of forked Spine Compiler JVMs is collected. + * + * The directory holds JaCoCo execution-data (`.exec`) files — one per launch task — + * written by the JaCoCo agent attached to the compiler fork. `KoverConfig` picks + * these files up and feeds them into the root Kover report as additional binary + * reports. + * + * @see io.spine.gradle.report.coverage.KoverConfig + */ +internal const val COMPILER_COVERAGE_DIR: String = "jacoco-compiler" + +/** + * The name of the dedicated, resolvable configuration that holds the standalone + * JaCoCo agent JAR ([Jacoco.agent]) attached to the forked Spine Compiler JVMs. + * + * The configuration is hidden and non-consumable; it exists only to resolve the + * agent JAR. + */ +private const val AGENT_CONFIGURATION: String = "spineCompilerJacocoAgent" + +/** + * The name of the task input property that records the JaCoCo agent coordinate + * ([Jacoco.agent]), so a version bump invalidates the `launch*SpineCompiler` tasks + * and their cached `.exec` outputs. + */ +private const val JACOCO_AGENT_INPUT: String = "jacocoAgentCoordinate" + +private const val LAUNCH_TASK_PREFIX: String = "launch" +private const val LAUNCH_TASK_SUFFIX: String = "SpineCompiler" diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/testing/TestKitCoverage.kt b/buildSrc/src/main/kotlin/io/spine/gradle/testing/TestKitCoverage.kt index 9682596d83..6c21a6b0ed 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/testing/TestKitCoverage.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/testing/TestKitCoverage.kt @@ -43,8 +43,8 @@ import org.gradle.kotlin.dsl.withType * * This method: * - * 1. Resolves the standalone JaCoCo agent JAR pinned to [Jacoco.version] - * through a dedicated [AGENT_CONFIGURATION] configuration. + * 1. Resolves the standalone JaCoCo agent JAR ([Jacoco.agent]) through a + * dedicated [AGENT_CONFIGURATION] configuration. * 2. Passes the agent JAR path and a per-module exec directory * (`build/`[TESTKIT_COVERAGE_DIR]) to the test JVM as system properties. * The `plugin-testlib` harness reads these and writes a `gradle.properties` @@ -84,7 +84,7 @@ fun Project.enableTestKitCoverage() { isCanBeConsumed = false isCanBeResolved = true } - dependencies.add(agent.name, "org.jacoco:org.jacoco.agent:${Jacoco.version}:runtime") + dependencies.add(agent.name, Jacoco.agent) val agentPath = agent.elements.map { it.single().asFile.absolutePath } val execDir = layout.buildDirectory.dir(TESTKIT_COVERAGE_DIR) @@ -150,8 +150,7 @@ private const val EXEC_DIR_PROPERTY: String = /** * The name of the dedicated, resolvable configuration that holds the standalone - * JaCoCo agent JAR (`org.jacoco:org.jacoco.agent::runtime`) attached to - * TestKit worker JVMs. + * JaCoCo agent JAR ([Jacoco.agent]) attached to TestKit worker JVMs. * * The configuration is hidden and non-consumable; it exists only to resolve the * agent JAR and to register it as an input of the `test` tasks. diff --git a/config b/config index c2aae6e746..dc94820ec3 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit c2aae6e74662ddbe60e3e8695cc6a1b8b104f0a3 +Subproject commit dc94820ec307537314e7978731988dea34b18461 diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index 5fca22028a..4d2596ff4c 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine:spine-annotations:2.0.0-SNAPSHOT.423` +# Dependencies of `io.spine:spine-annotations:2.0.0-SNAPSHOT.424` ## Runtime 1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 26.1.0. @@ -94,11 +94,11 @@ * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -106,16 +106,15 @@ * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_check_api](https://errorprone.info/error_prone_check_api) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_core](https://errorprone.info/error_prone_core) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.36.0. - * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.42.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. @@ -126,7 +125,7 @@ * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.googlejavaformat. **Name** : google-java-format. **Version** : 1.19.1. +1. **Group** : com.google.googlejavaformat. **Name** : google-java-format. **Version** : 1.27.0. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.3. @@ -772,14 +771,14 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using +This report was generated on **Tue Jul 14 18:16:51 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine:spine-base:2.0.0-SNAPSHOT.423` +# Dependencies of `io.spine:spine-base:2.0.0-SNAPSHOT.424` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -790,7 +789,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -925,11 +924,11 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://goo.gle/ksp](https://goo.gle/ksp) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -937,16 +936,15 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_check_api](https://errorprone.info/error_prone_check_api) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_core](https://errorprone.info/error_prone_core) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.36.0. - * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.42.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. @@ -957,7 +955,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.googlejavaformat. **Name** : google-java-format. **Version** : 1.19.1. +1. **Group** : com.google.googlejavaformat. **Name** : google-java-format. **Version** : 1.27.0. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.3. @@ -1648,14 +1646,14 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using +This report was generated on **Tue Jul 14 18:16:51 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine:spine-environment:2.0.0-SNAPSHOT.423` +# Dependencies of `io.spine:spine-environment:2.0.0-SNAPSHOT.424` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -1666,7 +1664,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1808,11 +1806,11 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1820,16 +1818,15 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_check_api](https://errorprone.info/error_prone_check_api) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_core](https://errorprone.info/error_prone_core) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.36.0. - * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.42.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. @@ -1840,7 +1837,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.googlejavaformat. **Name** : google-java-format. **Version** : 1.19.1. +1. **Group** : com.google.googlejavaformat. **Name** : google-java-format. **Version** : 1.27.0. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.3. @@ -2486,17 +2483,17 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using +This report was generated on **Tue Jul 14 18:16:51 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine:spine-format:2.0.0-SNAPSHOT.423` +# Dependencies of `io.spine:spine-format:2.0.0-SNAPSHOT.424` ## Runtime -1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-bom](https://github.com/FasterXML/jackson-bom) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2505,37 +2502,37 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-yaml. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-yaml. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-dataformats-text](https://github.com/FasterXML/jackson-dataformats-text) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-guava. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-guava. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-datatypes-collections](https://github.com/FasterXML/jackson-datatypes-collections) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-jdk8. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-jdk8. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-jsr310. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-jsr310. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2548,7 +2545,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2613,7 +2610,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-bom](https://github.com/FasterXML/jackson-bom) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2631,7 +2628,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2641,7 +2638,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2651,22 +2648,22 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-yaml. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-yaml. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-dataformats-text](https://github.com/FasterXML/jackson-dataformats-text) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-guava. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-guava. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-datatypes-collections](https://github.com/FasterXML/jackson-datatypes-collections) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-jdk8. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-jdk8. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-jsr310. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.datatype. **Name** : jackson-datatype-jsr310. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2676,7 +2673,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.22.0. +1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.22.1. * **Project URL:** [https://github.com/FasterXML/jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2722,11 +2719,11 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2734,16 +2731,15 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_check_api](https://errorprone.info/error_prone_check_api) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.36.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.42.0. * **Project URL:** [https://errorprone.info/error_prone_core](https://errorprone.info/error_prone_core) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.36.0. - * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.42.0. * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. @@ -2754,7 +2750,7 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.googlejavaformat. **Name** : google-java-format. **Version** : 1.19.1. +1. **Group** : com.google.googlejavaformat. **Name** : google-java-format. **Version** : 1.27.0. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.3. @@ -3404,6 +3400,6 @@ This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jul 02 16:32:02 WEST 2026** using +This report was generated on **Tue Jul 14 18:16:51 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file diff --git a/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index d20c6979b2..bcabb3e90b 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine base-libraries -2.0.0-SNAPSHOT.423 +2.0.0-SNAPSHOT.424 2015 @@ -26,37 +26,37 @@ all modules and does not describe the project structure per-subproject. com.fasterxml.jackson jackson-bom - 2.22.0 + 2.22.1 compile com.fasterxml.jackson.core jackson-databind - 2.22.0 + 2.22.1 compile com.fasterxml.jackson.dataformat jackson-dataformat-yaml - 2.22.0 + 2.22.1 compile com.fasterxml.jackson.datatype jackson-datatype-guava - 2.22.0 + 2.22.1 compile com.fasterxml.jackson.datatype jackson-datatype-jdk8 - 2.22.0 + 2.22.1 compile com.fasterxml.jackson.datatype jackson-datatype-jsr310 - 2.22.0 + 2.22.1 compile @@ -86,7 +86,7 @@ all modules and does not describe the project structure per-subproject. io.spine spine-logging - 2.0.0-SNAPSHOT.419 + 2.0.0-SNAPSHOT.422 compile @@ -134,13 +134,13 @@ all modules and does not describe the project structure per-subproject. com.google.errorprone error_prone_annotations - 2.47.0 + 2.42.0 provided com.google.errorprone error_prone_type_annotations - 2.36.0 + 2.42.0 provided @@ -152,7 +152,7 @@ all modules and does not describe the project structure per-subproject. com.fasterxml.jackson.module jackson-module-kotlin - 2.22.0 + 2.22.1 runtime @@ -170,7 +170,7 @@ all modules and does not describe the project structure per-subproject. io.spine spine-logging-smoke-test - 2.0.0-SNAPSHOT.419 + 2.0.0-SNAPSHOT.422 test @@ -182,7 +182,7 @@ all modules and does not describe the project structure per-subproject. io.spine.tools logging-testlib - 2.0.0-SNAPSHOT.419 + 2.0.0-SNAPSHOT.422 test @@ -223,7 +223,7 @@ all modules and does not describe the project structure per-subproject. com.google.errorprone error_prone_core - 2.36.0 + 2.42.0 com.google.protobuf diff --git a/version.gradle.kts b/version.gradle.kts index c3bd036c91..e463ae2c9b 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -24,4 +24,4 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -extra.set("versionToPublish", "2.0.0-SNAPSHOT.423") +extra.set("versionToPublish", "2.0.0-SNAPSHOT.424")