Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,17 @@
]
},
"hooks": {
"PreToolUse": [
"SessionStart": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "$CLAUDE_PROJECT_DIR/.agents/scripts/protect-version-file.sh"
"command": "$CLAUDE_PROJECT_DIR/init-submodules"
}
]
},
}
],
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/build-on-ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,13 @@ jobs:

- uses: gradle/actions/setup-gradle@v6

- name: Build project and run tests
# `build` does not run Dokka — its tasks are gated to the publishing
# graph — so `dokkaGenerate` is appended to surface documentation
# warnings on each push, before merge, instead of only in the post-merge
# `Publish` job. `failOnWarning` is enabled in the Dokka setup.
- name: Build project, run tests, and check documentation
shell: bash
run: ./gradlew build --stacktrace
run: ./gradlew build dokkaGenerate --stacktrace

# See: https://github.com/marketplace/actions/junit-report-action
- name: Publish Test Report
Expand Down
8 changes: 0 additions & 8 deletions .github/workflows/build-on-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,6 @@ jobs:
name: Build on Windows

steps:
- name: Configure Git for Windows symlink compatibility
shell: pwsh
run: |
# Avoid creating/expecting native symlinks on Windows runners.
# This helps when repository paths (like .agents/guidelines) are represented
# via links that can trigger EPERM on stat/access.
git config --global core.symlinks false

- uses: actions/checkout@v6
with:
submodules: recursive
Expand Down
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
path = .agents/shared
url = https://github.com/SpineEventEngine/agents.git
branch = master
update = checkout
update = merge
ignore = all
8 changes: 2 additions & 6 deletions .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 16 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,21 @@ links to a shared requirements file (e.g. `jvm-project.md`), read that too.

Shared skills, scripts, and guidelines come from the `.agents/shared` submodule (the
[`agents`][agents-repo] repository) exposed via symlinks.
`./config/pull` initializes and floats it automatically; on a fresh clone that skips
`pull`, run `git submodule update --init --remote .agents/shared`.
`./config/pull` initializes and floats them automatically. But a fresh `git worktree`
(and some shallow clones / cloud checkouts) start with NO submodules checked out, so
those symlinks dangle and no skills are found. Bootstrap such a tree with
**`./init-submodules`** — a root script that materializes the missing
*config-managed* submodules at their pinned commits: `config` itself, plus every
submodule that declares a tracked `branch` in `.gitmodules` (`.agents/shared`, and
any shared submodule added later) — the same rule `./config/pull` uses to decide
what it floats. Submodules the consumer owns (a Hugo theme, a vendored library,
doc-example submodules, …) declare no tracked branch and are left untouched, so the
automatic `SessionStart` run never tries to clone — or fail on credentials for — a
submodule this project does not manage. It depends on no pre-existing `config`
submodule, so it works before `./config/pull` (which lives inside the `config`
submodule) can. Claude Code runs it automatically via a `SessionStart` hook; other
agents and humans run it by hand, then `./config/pull` to float the shared submodules
to their branch tips.

## Commit and history safety

Expand Down Expand Up @@ -115,7 +128,7 @@ In consumer repositories, skip without comment any path matching:
- `.claude/**`, `.idea/**`, `.junie/**`
- `.github/copilot-instructions.md`
- `buildSrc/**` (except `buildSrc/src/main/kotlin/module.gradle.kts`)
- `gradle/`, `gradlew`, `gradlew.bat`
- `gradle/`, `gradlew`, `gradlew.bat`, `init-submodules`
- `.codecov.yml`, `.gitignore`, `gradle.properties`, `lychee.toml`
- `.github/workflows/` — unless the workflow was introduced by this repo

Expand Down
19 changes: 6 additions & 13 deletions buildSrc/src/main/kotlin/BuildExtensions.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2025, TeamDev. All rights reserved.
* Copyright 2026, TeamDev. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -33,7 +33,6 @@ import io.spine.dependency.build.PluginPublishPlugin
import io.spine.dependency.lib.Protobuf
import io.spine.dependency.local.Compiler
import io.spine.dependency.local.CoreJvmCompiler
import io.spine.dependency.local.McJava
import io.spine.dependency.local.ProtoTap
import io.spine.dependency.test.Kotest
import io.spine.dependency.test.Kover
Expand Down Expand Up @@ -88,12 +87,6 @@ val ScriptHandlerScope.protobuf: Protobuf
val ScriptHandlerScope.coreJvmCompiler: CoreJvmCompiler
get() = CoreJvmCompiler

/**
* Shortcut to [McJava] dependency object for using under `buildScript`.
*/
val ScriptHandlerScope.mcJava: McJava
get() = McJava

/**
* Shortcut to [CoreJvmCompiler] dependency object.
*
Expand All @@ -112,10 +105,10 @@ val ScriptHandlerScope.spineCompiler: Compiler
/**
* Shortcut to [Compiler] dependency object.
*
* This plugin is published at Gradle Plugin Portal.
* But when used in a pair with [mcJava], it cannot be applied directly to a project.
* It is so, because [mcJava] uses [spineCompiler] as its dependency.
* And the buildscript's classpath ends up with both of them.
* This plugin is published at Gradle Plugin Portal. But when another plugin that
* depends on the Compiler is also on the buildscript's classpath, the Compiler
* cannot be applied directly to a project. In such a case, declare it here so that
* it is added to the classpath, then apply it by ID.
*/
val PluginDependenciesSpec.spineCompiler: Compiler
get() = Compiler
Expand Down Expand Up @@ -344,7 +337,7 @@ val buildToolConfigurations: Array<String> = arrayOf(
)

/**
* Make the `sourcesJar` task accept duplicated input which seems to occur
* Make the `sourcesJar` task accept duplicated input, which seems to occur
* somewhere inside Protobuf Gradle Plugin.
*/
fun Project.allowDuplicationInSourcesJar() {
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/DokkaExts.kt
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ fun Project.htmlDocsJar(): TaskProvider<Jar> = tasks.getOrCreate("htmlDocsJar")
}

/**
* Tells if this task belongs to the execution graph which contains
* Tells if this task belongs to the execution graph that contains
* the `publish` and `dokkaGenerate` tasks.
*
* This predicate could be useful for disabling publishing tasks
Expand Down
50 changes: 25 additions & 25 deletions buildSrc/src/main/kotlin/LicenseSettings.kt
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
/*
* Copyright 2025, TeamDev. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Redistribution and use in source and/or binary forms, with or without
* modification, must retain the above copyright notice and the following
* disclaimer.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
* Copyright 2026, TeamDev. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Redistribution and use in source and/or binary forms, with or without
* modification, must retain the above copyright notice and the following
* disclaimer.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/**
* The settings of the software license which apply to the code of this project.
* The settings of the software license that apply to the code of this project.
*
* The constants defined in this object are used by the
* [PublicationHandler][io.spine.gradle.publish.PublicationHandler] to set up
Expand Down
4 changes: 2 additions & 2 deletions buildSrc/src/main/kotlin/Strings.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2025, TeamDev. All rights reserved.
* Copyright 2026, TeamDev. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -28,7 +28,7 @@
* This file provides extensions to `String` and `CharSequence` that wrap
* analogues from standard Kotlin runtime.
*
* It helps in switching between versions of Gradle which have different versions of
* It helps in switching between versions of Gradle that have different versions of
* the Kotlin runtime. Please see the bodies of the extension functions for details on
* switching the implementations depending on the Kotlin version at hand.
*
Expand Down
7 changes: 3 additions & 4 deletions buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2025, TeamDev. All rights reserved.
* Copyright 2026, TeamDev. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -80,7 +80,7 @@ abstract class Dependency {
*
* @param project The project in which the artifacts are forced. Used for logging.
* @param cfg The configuration for which the artifacts are forced. Used for logging.
* @param rs The resolution strategy which forces the artifacts.
* @param rs The resolution strategy that forces the artifacts.
*/
fun forceArtifacts(project: Project, cfg: Configuration, rs: ResolutionStrategy) {
artifacts.values.forEach {
Expand All @@ -90,7 +90,7 @@ abstract class Dependency {
}

/**
* A dependency which declares a Maven Bill of Materials (BOM).
* A dependency that declares a Maven Bill of Materials (BOM).
*
* @see <a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Bill_of_Materials_.28BOM.29_POMs">
* Maven Bill of Materials</a>
Expand All @@ -111,7 +111,6 @@ abstract class DependencyWithBom : Dependency() {
fun Configuration.diagSuffix(project: Project): String =
"the configuration `$name` in the project: `${project.path}`."


private fun ResolutionStrategy.forceWithLogging(
project: Project,
configuration: Configuration,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2025, TeamDev. All rights reserved.
* Copyright 2026, TeamDev. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -39,7 +39,7 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer

/**
* The plugin which forces versions of platforms declared in the [Boms] object.
* The plugin that forces versions of platforms declared in the [Boms] object.
*
* Versions are enforced via the
* [org.gradle.api.artifacts.dsl.DependencyHandler.enforcedPlatform] call
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
package io.spine.dependency.lib

/**
* Commons CLI is a transitive dependency which we don't use directly.
* Commons CLI is a transitive dependency that we don't use directly.
* We `force` it in [forceVersions].
*
* [Commons CLI](https://commons.apache.org/proper/commons-cli/)
Expand Down
6 changes: 3 additions & 3 deletions buildSrc/src/main/kotlin/io/spine/dependency/lib/IntelliJ.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2025, TeamDev. All rights reserved.
* Copyright 2026, TeamDev. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -31,8 +31,8 @@ package io.spine.dependency.lib
/**
* The components of the IntelliJ Platform.
*
* Make sure to add the `intellijReleases` and `jetBrainsCacheRedirector`
* repositories to your project. See `kotlin/Repositories.kt` for details.
* Make sure to add the `intellijReleases` and `intellijDependencies`
* repositories to your project. See `io/spine/gradle/repo/Repositories.kt` for details.
*/
@Suppress("unused")
object IntelliJ {
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import io.spine.dependency.DependencyWithBom
object Kotlin : DependencyWithBom() {

/**
* This is the version of Kotlin we use for writing code which does not
* This is the version of Kotlin we use for writing code that does not
* depend on Gradle and the version of embedded Kotlin.
*/
@Suppress("MemberVisibilityCanBePrivate") // used directly from the outside.
Expand Down
4 changes: 2 additions & 2 deletions buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ package io.spine.dependency.local
*/
@Suppress("ConstPropertyName", "unused")
object Base {
const val version = "2.0.0-SNAPSHOT.404"
const val versionForBuildScript = "2.0.0-SNAPSHOT.404"
const val version = "2.0.0-SNAPSHOT.420"
const val versionForBuildScript = "2.0.0-SNAPSHOT.420"
const val group = Spine.group
private const val prefix = "spine"
const val libModule = "$prefix-base"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.051"
private const val fallbackVersion = "2.0.0-SNAPSHOT.053"

/**
* The distinct version of the Compiler used by other build tools.
Expand All @@ -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.051"
private const val fallbackDfVersion = "2.0.0-SNAPSHOT.053"

/**
* The artifact for the Compiler Gradle plugin.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ typealias CoreJava = CoreJvm
@Suppress("ConstPropertyName", "unused")
object CoreJvm {
const val group = Spine.group
const val version = "2.0.0-SNAPSHOT.373"
const val version = "2.0.0-SNAPSHOT.376"

const val coreArtifact = "spine-core"
const val clientArtifact = "spine-client"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ object CoreJvmCompiler {
/**
* The version used in the build classpath.
*/
const val dogfoodingVersion = "2.0.0-SNAPSHOT.068"
const val dogfoodingVersion = "2.0.0-SNAPSHOT.077"

/**
* The version to be used for integration tests.
*/
const val version = "2.0.0-SNAPSHOT.068"
const val version = "2.0.0-SNAPSHOT.077"

/**
* The ID of the Gradle plugin.
Expand Down
Loading
Loading