From 10adeb569aa93d68bd645b7611c8cc67b2caf13d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 22:12:09 +0000 Subject: [PATCH 01/17] Bump picomatch in /site Bumps and [picomatch](https://github.com/micromatch/picomatch). These dependencies needed to be updated together. Updates `picomatch` from 2.3.1 to 2.3.2 - [Release notes](https://github.com/micromatch/picomatch/releases) - [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2) Updates `picomatch` from 4.0.3 to 4.0.4 - [Release notes](https://github.com/micromatch/picomatch/releases) - [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2) --- updated-dependencies: - dependency-name: picomatch dependency-version: 2.3.2 dependency-type: indirect - dependency-name: picomatch dependency-version: 4.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- site/package-lock.json | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/site/package-lock.json b/site/package-lock.json index ada41ff0..81c95151 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -763,10 +763,11 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -1153,10 +1154,11 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, From 1c6c1926511456f6f8a13d80e48a1b904104096e Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:00:54 +0100 Subject: [PATCH 02/17] Remove unused code from `buildSrc` --- .../gradle/internal/CheckVersionIncrement.kt | 121 ------------------ .../spine/gradle/internal/IncrementGuard.kt | 90 ------------- .../io/spine/gradle/internal/RunBuild.kt | 98 -------------- 3 files changed, 309 deletions(-) delete mode 100644 buildSrc/src/main/kotlin/io/spine/gradle/internal/CheckVersionIncrement.kt delete mode 100644 buildSrc/src/main/kotlin/io/spine/gradle/internal/IncrementGuard.kt delete mode 100644 buildSrc/src/main/kotlin/io/spine/gradle/internal/RunBuild.kt diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/internal/CheckVersionIncrement.kt b/buildSrc/src/main/kotlin/io/spine/gradle/internal/CheckVersionIncrement.kt deleted file mode 100644 index a6b8ac0d..00000000 --- a/buildSrc/src/main/kotlin/io/spine/gradle/internal/CheckVersionIncrement.kt +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2020, 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 - * - * http://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. - */ - -package io.spine.gradle.internal - -import com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES -import com.fasterxml.jackson.dataformat.xml.XmlMapper -import org.gradle.api.DefaultTask -import org.gradle.api.GradleException -import org.gradle.api.Project -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.TaskAction -import java.io.FileNotFoundException -import java.net.URL - -/** - * A task which verifies that the current version of the library has not been published to the given - * Maven repository yet. - */ -open class CheckVersionIncrement : DefaultTask() { - - /** - * The Maven repository in which to look for published artifacts. - * - * We only check the `releases` repository. Artifacts in `snapshots` repository still may be - * overridden. - */ - @Input - lateinit var repository: Repository - - @Input - val version: String = project.version as String - - @TaskAction - private fun fetchAndCheck() { - val artifact = "${project.artifactPath()}/${MavenMetadata.FILE_NAME}" - val repoUrl = repository.releases - val metadata = fetch(repoUrl, artifact) - val versions = metadata?.versioning?.versions - val versionExists = versions?.contains(version) ?: false - if (versionExists) { - throw GradleException(""" - Version `$version` is already published to maven repository `$repoUrl`. - Try incrementing the library version. - All available versions are: ${versions?.joinToString(separator = ", ")}. - - To disable this check, run Gradle with `-x $name`. - """.trimIndent() - ) - } - } - - private fun fetch(repository: String, artifact: String): MavenMetadata? { - val url = URL("$repository/$artifact") - return MavenMetadata.fetchAndParse(url) - } - - private fun Project.artifactPath(): String { - val group = this.group as String - val name = "spine-${this.name}" - - val pathElements = ArrayList(group.split('.')) - pathElements.add(name) - val path = pathElements.joinToString(separator = "/") - return path - } -} - -private data class MavenMetadata(var versioning: Versioning = Versioning()) { - - companion object { - - const val FILE_NAME = "maven-metadata.xml" - - private val mapper = XmlMapper() - - init { - mapper.configure(FAIL_ON_UNKNOWN_PROPERTIES, false) - } - - /** - * Fetches the metadata for the repository and parses the document. - * - *

If the document could not be found, assumes that the module was never - * released and thus has no metadata. - */ - fun fetchAndParse(url: URL): MavenMetadata? { - return try { - val metadata = mapper.readValue(url, MavenMetadata::class.java) - metadata - } catch (e: FileNotFoundException) { - null - } - } - } -} - -private data class Versioning(var versions: List = listOf()) diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/internal/IncrementGuard.kt b/buildSrc/src/main/kotlin/io/spine/gradle/internal/IncrementGuard.kt deleted file mode 100644 index 423cfb41..00000000 --- a/buildSrc/src/main/kotlin/io/spine/gradle/internal/IncrementGuard.kt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2020, 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 - * - * http://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. - */ - -package io.spine.gradle.internal - -import org.gradle.api.Plugin -import org.gradle.api.Project - -/** - * Gradle plugin which adds a [CheckVersionIncrement] task. - * - * The task is called `checkVersionIncrement` inserted before the `check` task. - */ -class IncrementGuard : Plugin { - - companion object { - const val taskName = "checkVersionIncrement" - } - - /** - * Adds the [CheckVersionIncrement] task to the project. - * - * Only adds the check if the project is built on Travis CI and the job is a pull request. - * - * The task only runs on non-master branches on GitHub Actions. This is done - * to prevent unexpected CI fails when re-building `master` multiple times, creating git - * tags, and in other cases that go outside of the "usual" development cycle. - */ - override fun apply(target: Project) { - val tasks = target.tasks - tasks.register(taskName, CheckVersionIncrement::class.java) { - repository = PublishingRepos.cloudRepo - tasks.getByName("check").dependsOn(this) - - shouldRunAfter("test") - if (!shouldCheckVersion()) { - logger.info( - "The build does not represent a GitHub Actions feature branch job, " + - "the `checkVersionIncrement` task is disabled." - ) - this.enabled = false - } - } - } - - /** - * Returns `true` if the current build is a GitHub Actions build which represents a push - * to a feature branch. - * - * Returns `false` if the associated reference is not a branch (e.g. a tag) or if it has - * the name which ends with `master`. So, on branches such as `master` and `2.x-jdk8-master` - * this method would return `false`. - * - * @see - * List of default environment variables provided for GitHub Actions builds - */ - private fun shouldCheckVersion(): Boolean { - val eventName = System.getenv("GITHUB_EVENT_NAME") - if ("push" != eventName) { - return false - } - val reference = System.getenv("GITHUB_REF") ?: return false - val matches = Regex("refs/heads/(.+)").matchEntire(reference) ?: return false - val branch = matches.groupValues[1] - return !branch.endsWith("master") - } -} diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/internal/RunBuild.kt b/buildSrc/src/main/kotlin/io/spine/gradle/internal/RunBuild.kt deleted file mode 100644 index 25d177a5..00000000 --- a/buildSrc/src/main/kotlin/io/spine/gradle/internal/RunBuild.kt +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2020, 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 - * - * http://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. - */ - -package io.spine.gradle.internal - -import org.gradle.api.DefaultTask -import org.gradle.api.GradleException -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.TaskAction -import org.gradle.internal.os.OperatingSystem -import java.io.File - -/** - * A Gradle task which runs another Gradle build. - * - * Launches Gradle wrapper under a given [directory] with the `build` task. The `clean` task is also - * run if current build includes a `clean` task. - * - * The build writes verbose log into `$directory/build/debug-out.txt`. The error output is written - * into `$directory/build/error-out.txt`. - */ -open class RunBuild : DefaultTask() { - - /** - * Path to the directory which contains a Gradle wrapper script. - */ - @Internal - lateinit var directory: String - - @TaskAction - private fun execute() { - val runsOnWindows = OperatingSystem.current().isWindows() - val script = if (runsOnWindows) "gradlew.bat" else "gradlew" - val command = buildCommand(script) - - // Ensure build error output log. - // Since we're executing this task in another process, we redirect error output to - // the file under the `build` directory. - val buildDir = File(directory, "build") - if (!buildDir.exists()) { - buildDir.mkdir() - } - val errorOut = File(buildDir, "error-out.txt") - val debugOut = File(buildDir, "debug-out.txt") - - val process = buildProcess(command, errorOut, debugOut) - if (process.waitFor() != 0) { - throw GradleException("Build FAILED. See $errorOut for details.") - } - } - - private fun buildCommand(script: String): List { - val command = mutableListOf() - command.add("${project.rootDir}/$script") - val shouldClean = project.gradle - .taskGraph - .hasTask(":clean") - if (shouldClean) { - command.add("clean") - } - command.add("build") - command.add("--console=plain") - command.add("--debug") - command.add("--stacktrace") - return command - } - - private fun buildProcess(command: List, errorOut: File, debugOut: File) = - ProcessBuilder() - .command(command) - .directory(project.file(directory)) - .redirectError(errorOut) - .redirectOutput(debugOut) - .start() -} From a12ff4cb66233e5d96ec15c63fef430119d70820 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:01:18 +0100 Subject: [PATCH 03/17] Bump Gradle -> `9.5.1` --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4d9ca164..9937dae9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From a5736d59b5b5fb7fd0d534b7ec27cbec961b3695 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:03:47 +0100 Subject: [PATCH 04/17] Address Gradle deprecations --- build.gradle.kts | 17 ++++++++++++----- buildSrc/build.gradle.kts | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 42806e1e..8dbfe571 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,11 +1,11 @@ /* - * 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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 @@ -27,21 +27,26 @@ /** * Builds and runs the site locally. */ -task("runSite") { +tasks.register("runSite") { + description = "Builds and runs the site locally." + + " The server is available at http://localhost:1313/." commandLine("./_script/hugo-serve") } /** * Builds the site without starting the server. */ -task("buildSite") { +tasks.register("buildSite") { + description = "Builds the site without starting the server." + + " The generated files are located in the `public` directory." commandLine("./_script/hugo-build") } /** * Verifies that the external links used by the site are available. */ -task("checkLinks") { +tasks.register("checkLinks") { + description = "Verifies that the external links used by the site are available." commandLine("./_script/proof-links") } @@ -54,5 +59,7 @@ task("checkLinks") { * @see https://docs.gradle.org/current/userguide/composite_builds.html */ tasks.register("buildAll") { + description = "Builds all included projects via depending on the top-level" + + " \"buildAll\" tasks declared in these projects." dependsOn(gradle.includedBuilds.map { it.task(":buildAll") }) } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 2044a5df..5de0ba65 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -30,7 +30,7 @@ plugins { repositories { mavenLocal() - jcenter() + mavenCentral() } val jacksonVersion = "2.11.0" From 63b7d3ce8336c164cc47d89141f43f21a55f9fb0 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:04:00 +0100 Subject: [PATCH 05/17] Init `CLAUDE.md` for this repo --- CLAUDE.md | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..a5054fdc --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,107 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Repository purpose + +This repo holds the [spine.io](https://spine.io) site. It is published to GitHub Pages via the +`gh-pages.yml` workflow on every push to `master` or `staging`. + +The repo is "two-headed": +- A **Hugo** site rooted in `site/`. +- A thin **Gradle** wrapper at the root, which only exists to expose Hugo/Lychee commands as + Gradle tasks (and to participate in the larger Spine composite build via `buildAll`). + +There is no application code here other than Hugo templates and a small amount of JS/SCSS under +`site/assets/`. + +## Common commands + +Run these from the repo root unless noted. + +| Task | Command | +|---|---| +| Run site locally (Hugo dev server on `:1313`) | `./gradlew :runSite` or `cd site && hugo server` | +| Build the site (no server) | `./gradlew :buildSite` or `cd site && hugo` | +| Check broken links (Lychee) | `./gradlew :checkLinks` — requires the dev server running on `:1313` | +| Install Node deps (PostCSS pipeline) | `cd site && npm install` | +| Update documentation module | `cd site && hugo mod get -u github.com/SpineEventEngine/documentation/docs` | +| Update site-commons theme | `cd site && hugo mod get -u github.com/SpineEventEngine/site-commons` | +| Update all Hugo modules | `cd site && hugo mod get -u ./...` | +| Clear Hugo module cache (on module errors) | `cd site && hugo mod clean --all` | + +Prerequisites: JDK 8 (x86_64), Go 1.12+, Node 18+, Hugo Extended **v0.150.0 or higher**. + +The `_script/hugo-serve`, `_script/hugo-build`, and `_script/proof-links` shell scripts are what +the Gradle tasks invoke. They `cd site` and source `~/.bash_profile`/`~/.bashrc` so Gradle's +non-interactive shell still sees the user's Hugo/Go install. + +## Architecture + +### Hugo modules: where the content actually lives + +Most of the site's content is **not in this repo**. `site/config/_default/hugo.toml` imports two +Hugo modules (pinned in `site/go.mod`): + +- `github.com/SpineEventEngine/documentation/docs` — all `/docs/...` pages. Edit there, not here. +- `github.com/SpineEventEngine/site-commons` — shared theme: partials, shortcodes + (`cloakemail`, `note-block`, code blocks, anchor icons, snackbars), email data, repository data. + +When something on the rendered site (especially under `/docs`) isn't where you expect, check +those two upstream repos before searching this one. The `AUTHORING.md` and the site-commons +`_reference/` directory document the available shortcodes. + +The documentation side-navigation lives in the `documentation` repo at +`docs/data/docs//sidenav.yml` (or per-module). Prev/Next buttons are generated from it. + +### Code samples + +`_code/examples/` contains **git submodules** pointing to `spine-examples/*` repos (hello, airport, +blog, kanban, todo-list). The `embed-code` tool referenced in `README.md` / `_code/EMBEDDING.md` +is **not used in this repo** — it only runs in the `documentation` repo. Don't try to wire it up +here. + +### Local content in this repo + +`site/content/` holds the pages that are *not* documentation: +landing (`_index.md`, `hero.json`, `features.json`, `step-*.md`), `about`, `blog`, +`getting-help` (with `services.json` / `support-section.json`), `checkout` / `checkout-completed`, +`faq`, `oss-licenses`, `privacy`, `release-notes`. + +`site/layouts/` overrides theme templates for these sections plus `_default`, `_partials`, +`_shortcodes`, and `index.html`. Main navigation data is in `site/data/navbar.yml`; the layout +template is `site/layouts/_partials/components/navbar/navigation.html`. + +### Payments / checkout + +The `getting-help` page sells products and uses a real (staging in dev) payment flow. Config in +`site/config/_default/hugo.toml` under `[params.payment]` points the dev environment at the +staging Paygate. Test cards: LHV sandbox (see `README.md`). Do not change `paygateURL` / +`consentURL` casually — they are environment-aware. + +### Markdown is rendered with `unsafe = true` + +Hugo's Goldmark is configured with `unsafe = true` and block attributes enabled +(`site/config/_default/hugo.toml`), so raw HTML inside Markdown is allowed and `{.class}` +attribute syntax works. This is intentional — many pages embed HTML directly. + +## Authoring conventions (from AUTHORING.md) + +These are enforced by reviewers and by the Lychee link check; follow them: + +- **Internal links must not start with `/`.** Use `docs/introduction/`, not `/docs/introduction/`. +- **Internal links must end with `/`** to avoid redirect hops. +- For URLs that depend on the current docs version or external repos, use the variable forms: + `{{% version %}}` and `{{% get-site-data "repositories." %}}` (key resolves against + `site-commons/data/repositories.yml`). +- In layout partials (HTML), build URLs via Hugo: `{{ \`docs/...\` | relURL }}`. +- Image size hints: append `#medium` or `#small` to the image path. +- Use the `cloakemail` shortcode for any email/phone — never inline them. + +Lychee excludes live in `lychee.toml`. The GitHub Actions check is `.github/workflows/proof-links.yml`. + +## When updating Hugo modules + +After `hugo mod get -u ...`, commit both `site/go.mod` and `site/go.sum`. The convention is to +**prune `go.sum` down to the two required entries per module** so the file doesn't accumulate +old versions. From b92fc9811292e7bb366140b626ea35c4f554933c Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:04:15 +0100 Subject: [PATCH 06/17] Address Gradle deprecations --- buildSrc/src/main/kotlin/io/spine/gradle/internal/deps.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/internal/deps.kt b/buildSrc/src/main/kotlin/io/spine/gradle/internal/deps.kt index 0b618cfa..f3b9a8d3 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/internal/deps.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/internal/deps.kt @@ -365,7 +365,7 @@ object DependencyResolution { includeGroup("io.spine.gcloud") } } - repositories.jcenter() + repositories.mavenCentral() repositories.maven { url = URI(Repos.gradlePlugins) } From edc0e2b1827e0d38df86ba80437a5ef06180d251 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:04:42 +0100 Subject: [PATCH 07/17] Exclude `.saas-cache` and `.kotlin` directories --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6b29beb2..57a41e77 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,6 @@ gcs-auth-key.json # org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/ # ------- gradle.properties + +/.sass-cache/ +/buildSrc/.kotlin/ From b1c56efbec19749aa062c25f9503e8a7cc16d0ed Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:06:18 +0100 Subject: [PATCH 08/17] Load licenses from `docs/dependencies` directories --- site/assets/js/pages/oss-licenses.js | 47 ++++++++++++++++++---------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/site/assets/js/pages/oss-licenses.js b/site/assets/js/pages/oss-licenses.js index 9a168220..7978c970 100644 --- a/site/assets/js/pages/oss-licenses.js +++ b/site/assets/js/pages/oss-licenses.js @@ -37,25 +37,27 @@ */ $( function() { - const converter = new showdown.Converter(); + const converter = new showdown.Converter({ sanitize: true }); const loadedAttr = 'loaded'; const repoAttr = 'repo'; const repoName = 'repo-name'; - // Spine repositories are migrated being migrated to listing their deps in this file. - const reportFilePath = '/master/dependencies.md'; + // Spine repositories are being migrated to keeping their dependency reports under `docs/dependencies/`. + const reportFilePath = '/master/docs/dependencies/dependencies.md'; - // Previously used report file path, as a fallback for non-migrated repos. + // Previous location of the report, kept as a fallback for repos still in migration. + const rootReportFilePath = '/master/dependencies.md'; + + // The oldest report file name, used by non-migrated repos. const legacyFilePath = '/master/license-report.md'; /** * Loads the dependency report file from the repository. * - *

There may be one of two report files present in the repo: - * `license-report.md` or `dependencies.md`. - * The latter is a newer version of the report, so it is loaded - * as a priority. In case it is missing, `license-report.md` is loaded, as a fallback. - * Eventually, all Spine repositories will migrate to having `dependencies.md`. + *

There may be one of three report files present in the repo, tried in this order: + * `docs/dependencies/dependencies.md` (new location), `dependencies.md` at the repo root + * (previous location), and `license-report.md` at the repo root (oldest). + * Eventually, all Spine repositories will migrate to the new location. * *

The report sections describing the terms of use for dual-licensed dependencies, * and another one with the credits paid to the author of Gradle plugin @@ -73,20 +75,30 @@ $( if (loaded === 'false') { const repositoryUrl = clickedElement.attr(repoAttr); - let processLoadedContent = function (data) { + const processLoadedContent = function (data) { const html = converter.makeHtml(data); mdDestinationEl.html(html); clickedElement.attr(loadedAttr, 'true'); makeCollapsibleTitle(mdDestinationEl, clickedElRepoName); }; - let reportUrl = repositoryUrl + reportFilePath; - let legacyReportUrl = repositoryUrl + legacyFilePath; - - $.get(reportUrl, processLoadedContent) - .fail(function () { - $.get(legacyReportUrl, processLoadedContent) - }); + const candidateUrls = [ + repositoryUrl + reportFilePath, + repositoryUrl + rootReportFilePath, + repositoryUrl + legacyFilePath + ]; + + const tryNext = function (index) { + if (index >= candidateUrls.length) { + mdDestinationEl.html('

Could not load dependency report.

'); + // Mark as resolved to avoid re-firing all requests on the next click. + clickedElement.attr(loadedAttr, 'error'); + return; + } + $.get(candidateUrls[index], processLoadedContent) + .fail(function () { tryNext(index + 1); }); + }; + tryNext(0); } }); @@ -123,6 +135,7 @@ $( * Makes all Markdown links external. */ linkElements.addClass('external'); + linkElements.attr('rel', 'noopener noreferrer'); linkElements.attr('target', '_blank'); /** From e7f90c70d7b2c17e95b9eb613687d492b0ea9228 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:10:29 +0100 Subject: [PATCH 09/17] Migrate Hugo `languageCode` to locale --- site/config/_default/hugo.toml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/site/config/_default/hugo.toml b/site/config/_default/hugo.toml index 0d71eaf5..cc386a7f 100644 --- a/site/config/_default/hugo.toml +++ b/site/config/_default/hugo.toml @@ -1,9 +1,14 @@ baseURL = 'https://spine.io/' -languageCode = 'en-us' +defaultContentLanguage = 'en' title = 'Spine Event Engine' enableRobotsTXT = true disableKinds = ['taxonomy', 'term'] +[languages] + [languages.en] + locale = 'en-US' + weight = 1 + [module] # First theme has higher priority than later ones. [[module.imports]] From 068eba2250b022e467e624e6cf5ce636b23b2929 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:12:45 +0100 Subject: [PATCH 10/17] Remove unused code --- .../kotlin/io/spine/gradle/internal/deps.kt | 373 ------------------ 1 file changed, 373 deletions(-) delete mode 100644 buildSrc/src/main/kotlin/io/spine/gradle/internal/deps.kt diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/internal/deps.kt b/buildSrc/src/main/kotlin/io/spine/gradle/internal/deps.kt deleted file mode 100644 index f3b9a8d3..00000000 --- a/buildSrc/src/main/kotlin/io/spine/gradle/internal/deps.kt +++ /dev/null @@ -1,373 +0,0 @@ -/* - * Copyright 2020, 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 - * - * http://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. - */ - -package io.spine.gradle.internal - -import org.gradle.api.Project -import org.gradle.api.artifacts.ConfigurationContainer -import org.gradle.api.artifacts.dsl.RepositoryHandler -import java.net.URI - -/* - * This file describes shared dependencies of Spine sub-projects. - * - * Inspired by dependency management of the Uber's NullAway project: - * https://github.com/uber/NullAway/blob/master/gradle/dependencies.gradle - */ - -data class Repository( - val releases: String, - val snapshots: String, - val credentials: String -) - -/** - * Repositories to which we may publish. Normally, only one repository will be used. - * - * See `publish.gradle` for details of the publishing process. - */ -object PublishingRepos { - val mavenTeamDev = Repository( - releases = "http://maven.teamdev.com/repository/spine", - snapshots = "http://maven.teamdev.com/repository/spine-snapshots", - credentials = "credentials.properties" - ) - val cloudRepo = Repository( - releases = "https://spine.mycloudrepo.io/public/repositories/releases", - snapshots = "https://spine.mycloudrepo.io/public/repositories/snapshots", - credentials = "cloudrepo.properties" - ) -} - -// Specific repositories. -object Repos { - val oldSpine: String = PublishingRepos.mavenTeamDev.releases - val oldSpineSnapshots: String = PublishingRepos.mavenTeamDev.snapshots - - val spine: String = PublishingRepos.cloudRepo.releases - val spineSnapshots: String = PublishingRepos.cloudRepo.snapshots - - val sonatypeSnapshots: String = "https://oss.sonatype.org/content/repositories/snapshots" - val gradlePlugins = "https://plugins.gradle.org/m2/" -} - -object Versions { - val checkerFramework = "3.7.1" - val errorProne = "2.4.0" - val errorProneJavac = "9+181-r4173-1" // taken from here: https://github.com/tbroyer/gradle-errorprone-plugin/blob/v0.8/build.gradle.kts - val errorPronePlugin = "1.3.0" - val pmd = "6.24.0" - val checkstyle = "8.29" - val protobufPlugin = "0.8.13" - val appengineApi = "1.9.82" - val appenginePlugin = "2.2.0" - val findBugs = "3.0.2" - val guava = "30.0-jre" - val protobuf = "3.13.0" - val grpc = "1.28.1" - val flogger = "0.5.1" - val junit4 = "4.13.1" - val junit5 = "5.7.0" - val junitPlatform = "1.7.0" - val junitPioneer = "1.0.0" - val truth = "1.1" - val httpClient = "1.34.2" - val apacheHttpClient = "2.1.2" - val firebaseAdmin = "6.12.2" - val roaster = "2.21.2.Final" - val licensePlugin = "1.13" - val javaPoet = "1.13.0" - val autoService = "1.0-rc7" - val autoCommon = "0.10" - val jackson = "2.9.10.5" - val animalSniffer = "1.19" - val apiguardian = "1.1.0" - val javaxAnnotation = "1.3.2" - val klaxon = "5.4" - val ouathJwt = "3.11.0" - val bouncyCastlePkcs = "1.66" - val assertK = "0.23" - - /** - * Version of the SLF4J library. - * - * Spine used to log with SLF4J. Now we use Flogger. Whenever a choice comes up, we recommend to - * use the latter. - * - * Some third-party libraries may clash with different versions of the library. Thus, we specify - * this version and force it via [forceConfiguration(..)][DependencyResolution.forceConfiguration]. - */ - @Deprecated("Use Flogger over SLF4J.", replaceWith = ReplaceWith("flogger")) - val slf4j = "1.7.30" -} - -object GradlePlugins { - val errorProne = "net.ltgt.gradle:gradle-errorprone-plugin:${Versions.errorPronePlugin}" - val protobuf = "com.google.protobuf:protobuf-gradle-plugin:${Versions.protobufPlugin}" - val appengine = "com.google.cloud.tools:appengine-gradle-plugin:${Versions.appenginePlugin}" - val licenseReport = "com.github.jk1:gradle-license-report:${Versions.licensePlugin}" -} - -object Build { - val errorProneJavac = "com.google.errorprone:javac:${Versions.errorProneJavac}" - val errorProneAnnotations = listOf( - "com.google.errorprone:error_prone_annotations:${Versions.errorProne}", - "com.google.errorprone:error_prone_type_annotations:${Versions.errorProne}" - ) - val errorProneCheckApi = "com.google.errorprone:error_prone_check_api:${Versions.errorProne}" - val errorProneCore = "com.google.errorprone:error_prone_core:${Versions.errorProne}" - val errorProneTestHelpers = "com.google.errorprone:error_prone_test_helpers:${Versions.errorProne}" - val checkerAnnotations = "org.checkerframework:checker-qual:${Versions.checkerFramework}" - val checkerDataflow = listOf( - "org.checkerframework:dataflow:${Versions.checkerFramework}", - "org.checkerframework:javacutil:${Versions.checkerFramework}" - ) - val autoCommon = "com.google.auto:auto-common:${Versions.autoCommon}" - val autoService = AutoService - val jsr305Annotations = "com.google.code.findbugs:jsr305:${Versions.findBugs}" - val guava = "com.google.guava:guava:${Versions.guava}" - val flogger = "com.google.flogger:flogger:${Versions.flogger}" - val protobuf = listOf( - "com.google.protobuf:protobuf-java:${Versions.protobuf}", - "com.google.protobuf:protobuf-java-util:${Versions.protobuf}" - ) - val protoc = "com.google.protobuf:protoc:${Versions.protobuf}" - val googleHttpClient = "com.google.http-client:google-http-client:${Versions.httpClient}" - val googleHttpClientApache = "com.google.http-client:google-http-client-apache:${Versions.apacheHttpClient}" - val appengineApi = "com.google.appengine:appengine-api-1.0-sdk:${Versions.appengineApi}" - val firebaseAdmin = "com.google.firebase:firebase-admin:${Versions.firebaseAdmin}" - val jacksonDatabind = "com.fasterxml.jackson.core:jackson-databind:${Versions.jackson}" - val roasterApi = "org.jboss.forge.roaster:roaster-api:${Versions.roaster}" - val roasterJdt = "org.jboss.forge.roaster:roaster-jdt:${Versions.roaster}" - val animalSniffer = "org.codehaus.mojo:animal-sniffer-annotations:${Versions.animalSniffer}" - val ci = "true".equals(System.getenv("CI")) - val gradlePlugins = GradlePlugins - @Deprecated("Use Flogger over SLF4J.", replaceWith = ReplaceWith("flogger")) - @Suppress("DEPRECATION") // Version of SLF4J. - val slf4j = "org.slf4j:slf4j-api:${Versions.slf4j}" - - object AutoService { - val annotations = "com.google.auto.service:auto-service-annotations:${Versions.autoService}" - val processor = "com.google.auto.service:auto-service:${Versions.autoService}" - } -} - -object Gen { - val javaPoet = "com.squareup:javapoet:${Versions.javaPoet}" - val javaxAnnotation = "javax.annotation:javax.annotation-api:${Versions.javaxAnnotation}" -} - -object Publishing { - val klaxon = "com.beust:klaxon:${Versions.klaxon}" - val oauthJwt = "com.auth0:java-jwt:${Versions.ouathJwt}" - val bouncyCastlePkcs = "org.bouncycastle:bcpkix-jdk15on:${Versions.bouncyCastlePkcs}" - val assertK = "com.willowtreeapps.assertk:assertk-jvm:${Versions.assertK}" -} - -object Grpc { - val core = "io.grpc:grpc-core:${Versions.grpc}" - val stub = "io.grpc:grpc-stub:${Versions.grpc}" - val okHttp = "io.grpc:grpc-okhttp:${Versions.grpc}" - val protobuf = "io.grpc:grpc-protobuf:${Versions.grpc}" - val netty = "io.grpc:grpc-netty:${Versions.grpc}" - val nettyShaded = "io.grpc:grpc-netty-shaded:${Versions.grpc}" - val context = "io.grpc:grpc-context:${Versions.grpc}" - - @Deprecated("Use the shorter form.", replaceWith = ReplaceWith("core")) - val grpcCore = core - @Deprecated("Use the shorter form.", replaceWith = ReplaceWith("stub")) - val grpcStub = stub - @Deprecated("Use the shorter form.", replaceWith = ReplaceWith("okHttp")) - val grpcOkHttp = okHttp - @Deprecated("Use the shorter form.", replaceWith = ReplaceWith("protobuf")) - val grpcProtobuf = protobuf - @Deprecated("Use the shorter form.", replaceWith = ReplaceWith("netty")) - val grpcNetty = netty - @Deprecated("Use the shorter form.", replaceWith = ReplaceWith("nettyShaded")) - val grpcNettyShaded = nettyShaded - @Deprecated("Use the shorter form.", replaceWith = ReplaceWith("context")) - val grpcContext = context -} - -object Runtime { - - val flogger = Flogger - - object Flogger { - val systemBackend = "com.google.flogger:flogger-system-backend:${Versions.flogger}" - val log4J = "com.google.flogger:flogger-log4j:${Versions.flogger}" - val slf4J = "com.google.flogger:slf4j-backend-factory:${Versions.flogger}" - } - - @Deprecated("Use the `flogger` object.", replaceWith = ReplaceWith("flogger.systemBackend")) - val floggerSystemBackend = flogger.systemBackend - @Deprecated("Use the `flogger` object.", replaceWith = ReplaceWith("flogger.log4J")) - val floggerLog4J = flogger.log4J - @Deprecated("Use the `flogger` object.", replaceWith = ReplaceWith("flogger.slf4J")) - val floggerSlf4J = flogger.slf4J -} - -object Test { - val junit4 = "junit:junit:${Versions.junit4}" - val junit5Api = listOf( - "org.junit.jupiter:junit-jupiter-api:${Versions.junit5}", - "org.junit.jupiter:junit-jupiter-params:${Versions.junit5}", - "org.apiguardian:apiguardian-api:${Versions.apiguardian}" - ) - val junit5Runner = "org.junit.jupiter:junit-jupiter-engine:${Versions.junit5}" - val junitPioneer = "org.junit-pioneer:junit-pioneer:${Versions.junitPioneer}" - val guavaTestlib = "com.google.guava:guava-testlib:${Versions.guava}" - val mockito = "org.mockito:mockito-core:2.12.0" - val hamcrest = "org.hamcrest:hamcrest-all:1.3" - val truth = listOf( - "com.google.truth:truth:${Versions.truth}", - "com.google.truth.extensions:truth-java8-extension:${Versions.truth}", - "com.google.truth.extensions:truth-proto-extension:${Versions.truth}" - ) - @Deprecated("Use Flogger over SLF4J.", - replaceWith = ReplaceWith("Deps.runtime.floggerSystemBackend")) - @Suppress("DEPRECATION") // Version of SLF4J. - val slf4j = "org.slf4j:slf4j-jdk14:${Versions.slf4j}" -} - -object Scripts { - - private const val COMMON_PATH = "/config/gradle/" - - fun testArtifacts(p: Project) = p.script("test-artifacts.gradle") - fun testOutput(p: Project) = p.script("test-output.gradle") - fun slowTests(p: Project) = p.script("slow-tests.gradle") - fun javadocOptions(p: Project) = p.script("javadoc-options.gradle") - fun filterInternalJavadocs(p: Project) = p.script("filter-internal-javadoc.gradle") - fun jacoco(p: Project) = p.script("jacoco.gradle") - fun publish(p: Project) = p.script("publish.gradle") - fun publishProto(p: Project) = p.script("publish-proto.gradle") - fun javacArgs(p: Project) = p.script("javac-args.gradle") - fun jsBuildTasks(p: Project) = p.script("js/build-tasks.gradle") - fun jsConfigureProto(p: Project) = p.script("js/configure-proto.gradle") - fun npmPublishTasks(p: Project) = p.script("js/npm-publish-tasks.gradle") - fun npmCli(p: Project) = p.script("js/npm-cli.gradle") - fun updatePackageVersion(p: Project) = p.script("js/update-package-version.gradle") - fun dartBuildTasks(p: Project) = p.script("dart/build-tasks.gradle") - fun pubPublishTasks(p: Project) = p.script("dart/pub-publish-tasks.gradle") - fun pmd(p: Project) = p.script("pmd.gradle") - fun checkstyle(p: Project) = p.script("checkstyle.gradle") - fun runBuild(p: Project) = p.script("run-build.gradle") - fun modelCompiler(p: Project) = p.script("model-compiler.gradle") - fun licenseReportCommon(p: Project) = p.script("license-report-common.gradle") - fun projectLicenseReport(p: Project) = p.script("license-report-project.gradle") - fun repoLicenseReport(p: Project) = p.script("license-report-repo.gradle") - fun generatePom(p: Project) = p.script("generate-pom.gradle") - fun updateGitHubPages(p: Project) = p.script("update-gh-pages.gradle") - - private fun Project.script(name: String) = "${rootDir}$COMMON_PATH$name" -} - -object Deps { - val build = Build - val grpc = Grpc - val gen = Gen - val runtime = Runtime - val test = Test - val versions = Versions - val scripts = Scripts - val publishing = Publishing -} - -object DependencyResolution { - - fun forceConfiguration(configurations: ConfigurationContainer) { - configurations.all { - resolutionStrategy { - failOnVersionConflict() - cacheChangingModulesFor(0, "seconds") - @Suppress("DEPRECATION") // Force SLF4J version. - force( - Deps.build.slf4j, - Deps.build.errorProneAnnotations, - Deps.build.jsr305Annotations, - Deps.build.checkerAnnotations, - Deps.build.autoCommon, - Deps.build.guava, - Deps.build.animalSniffer, - Deps.build.protobuf, - Deps.test.guavaTestlib, - Deps.test.truth, - Deps.test.junit5Api, - Deps.test.junit4, - - // Transitive dependencies of 3rd party components that we don't use directly. - "org.junit.platform:junit-platform-commons:${Versions.junitPlatform}", - "com.google.auto.value:auto-value-annotations:1.7.4", - "com.google.auto.service:auto-service-annotations:1.0-rc7", - "com.google.code.gson:gson:2.8.6", - "com.google.j2objc:j2objc-annotations:1.3", - "org.codehaus.plexus:plexus-utils:3.3.0", - "com.squareup.okio:okio:1.17.5", // Last version before next major. - "commons-cli:commons-cli:1.4", - - // Force discontinued transitive dependency until everybody migrates off it. - "org.checkerframework:checker-compat-qual:2.5.5", - - "commons-logging:commons-logging:1.2", - - // Force the Gradle Protobuf plugin version. - Deps.build.gradlePlugins.protobuf - ) - } - } - } - - fun excludeProtobufLite(configurations: ConfigurationContainer) { - excludeProtoLite(configurations, "runtime") - excludeProtoLite(configurations, "testRuntime") - } - - private fun excludeProtoLite( - configurations: ConfigurationContainer, - configurationName: String - ) { - configurations - .named(configurationName).get() - .exclude(mapOf("group" to "com.google.protobuf", "module" to "protobuf-lite")) - } - - fun defaultRepositories(repositories: RepositoryHandler) { - repositories.mavenLocal() - repositories.maven { - url = URI(Repos.spine) - content { - includeGroup("io.spine") - includeGroup("io.spine.tools") - includeGroup("io.spine.gcloud") - } - } - repositories.mavenCentral() - repositories.maven { - url = URI(Repos.gradlePlugins) - } - } -} From 19da5ee5cd6c394782a015e64b6bf77653115ea3 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:15:05 +0100 Subject: [PATCH 11/17] Use `hogo.Data` instead of deprecated `Site.Data` See: https://gohugo.io/methods/site/data/ --- site/layouts/_partials/components/footer/columns.html | 2 +- site/layouts/_partials/components/footer/logo.html | 2 +- site/layouts/_partials/components/navbar/logo.html | 2 +- site/layouts/_partials/components/navbar/navigation.html | 2 +- site/layouts/_partials/components/redirect-screen.html | 2 +- site/layouts/_partials/components/subscribe-container.html | 2 +- site/layouts/_partials/getting-help/mailto-button.html | 2 +- site/layouts/_partials/head/canonical.html | 2 +- site/layouts/_partials/head/microdata/get-emails.html | 2 +- site/layouts/_partials/head/microdata/get-socials.html | 2 +- site/layouts/_partials/head/microdata/get-structured-data.html | 2 +- site/layouts/_partials/head/title.html | 2 +- site/layouts/checkout/single.html | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/site/layouts/_partials/components/footer/columns.html b/site/layouts/_partials/components/footer/columns.html index 92c7e68e..65e64636 100644 --- a/site/layouts/_partials/components/footer/columns.html +++ b/site/layouts/_partials/components/footer/columns.html @@ -24,7 +24,7 @@ ~ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> -{{ $columns := site.Data.footer.columns }} +{{ $columns := hugo.Data.footer.columns }}
{{ range $index, $column := $columns }} diff --git a/site/layouts/_partials/components/footer/logo.html b/site/layouts/_partials/components/footer/logo.html index be844d8d..4f1a0873 100644 --- a/site/layouts/_partials/components/footer/logo.html +++ b/site/layouts/_partials/components/footer/logo.html @@ -26,4 +26,4 @@ + alt="{{ hugo.Data.spine.full_name }}"> diff --git a/site/layouts/_partials/components/navbar/logo.html b/site/layouts/_partials/components/navbar/logo.html index afe207ba..95fd840c 100644 --- a/site/layouts/_partials/components/navbar/logo.html +++ b/site/layouts/_partials/components/navbar/logo.html @@ -28,6 +28,6 @@ + alt="{{ hugo.Data.spine.full_name }}">
diff --git a/site/layouts/_partials/components/navbar/navigation.html b/site/layouts/_partials/components/navbar/navigation.html index a3a96e5c..73bb8d81 100644 --- a/site/layouts/_partials/components/navbar/navigation.html +++ b/site/layouts/_partials/components/navbar/navigation.html @@ -26,7 +26,7 @@ {{ $currentPage := . }} {{ $currentRootSection := partial "functions/get-root-section.html" . }} -{{ $navItems := site.Data.navbar }} +{{ $navItems := hugo.Data.navbar }}
- {{ $email := site.Data.emails.dev_email }} + {{ $email := hugo.Data.emails.dev_email }} {{ $cloakedEmail := printf "{{< cloakemail address=\"%s\" >}}" $email }}

Sorry, the redirection was interrupted

Please try again. If the issue persists, contact us at diff --git a/site/layouts/_partials/components/subscribe-container.html b/site/layouts/_partials/components/subscribe-container.html index 50f3f501..ab69a5e0 100644 --- a/site/layouts/_partials/components/subscribe-container.html +++ b/site/layouts/_partials/components/subscribe-container.html @@ -31,7 +31,7 @@

diff --git a/site/layouts/_partials/getting-help/mailto-button.html b/site/layouts/_partials/getting-help/mailto-button.html index 06fc6074..9a10139b 100644 --- a/site/layouts/_partials/getting-help/mailto-button.html +++ b/site/layouts/_partials/getting-help/mailto-button.html @@ -26,7 +26,7 @@ -{{ $email := site.Data.emails.sales_email }} +{{ $email := hugo.Data.emails.sales_email }} {{ $class := "btn btn-bordered-blue pricing-btn" }} {{ $label := "Contact Us" }} diff --git a/site/layouts/_partials/head/canonical.html b/site/layouts/_partials/head/canonical.html index e01b7de0..af46402b 100644 --- a/site/layouts/_partials/head/canonical.html +++ b/site/layouts/_partials/head/canonical.html @@ -47,7 +47,7 @@ {{ $currentVersionData := partial "theme/functions/get-doc-version-data.html" $page }} {{ $currentModule := $currentVersionData.module }} -{{ $currentVersion := index site.Data.versions $currentModule | default (slice) }} +{{ $currentVersion := index hugo.Data.versions $currentModule | default (slice) }} {{ $mainVersion := index (where $currentVersion "is_main" true) 0 }} {{ $moduleBase := cond (eq $currentModule "docs") "docs" (printf "docs/%s" $currentModule) }} {{ $pathPattern := printf `^%s/[0-9]+/` $moduleBase }} diff --git a/site/layouts/_partials/head/microdata/get-emails.html b/site/layouts/_partials/head/microdata/get-emails.html index 70fa4b36..81ebc4b9 100644 --- a/site/layouts/_partials/head/microdata/get-emails.html +++ b/site/layouts/_partials/head/microdata/get-emails.html @@ -24,7 +24,7 @@ ~ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> -{{ $data := site.Data.emails }} +{{ $data := hugo.Data.emails }} {{ $devEmail := $data.dev_email }} {{ $salesEmail := $data.sales_email }} diff --git a/site/layouts/_partials/head/microdata/get-socials.html b/site/layouts/_partials/head/microdata/get-socials.html index 46288b67..3c0a6f1e 100644 --- a/site/layouts/_partials/head/microdata/get-socials.html +++ b/site/layouts/_partials/head/microdata/get-socials.html @@ -24,7 +24,7 @@ ~ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> -{{ $data := site.Data.socials }} +{{ $data := hugo.Data.socials }} {{ $socials := slice $data.github_discussions diff --git a/site/layouts/_partials/head/microdata/get-structured-data.html b/site/layouts/_partials/head/microdata/get-structured-data.html index fafffeb1..7a59b906 100644 --- a/site/layouts/_partials/head/microdata/get-structured-data.html +++ b/site/layouts/_partials/head/microdata/get-structured-data.html @@ -33,7 +33,7 @@ {{ $type := "Organization" }} {{ $images := slice $logoUrl }} -{{ $name := site.Data.spine.full_name }} +{{ $name := hugo.Data.spine.full_name }} {{ $url := site.BaseURL }} {{ $logo := $logoUrl }} {{ $emails := partial "head/microdata/get-emails.html" . }} diff --git a/site/layouts/_partials/head/title.html b/site/layouts/_partials/head/title.html index 69575db2..3e6d8b8b 100644 --- a/site/layouts/_partials/head/title.html +++ b/site/layouts/_partials/head/title.html @@ -32,7 +32,7 @@ {{ $title := .Title | default site.Title }} {{ $title = replace $title " " " " }} {{ $pageURL := .RelPermalink }} -{{ $productPrefix := site.Data.spine.name }} +{{ $productPrefix := hugo.Data.spine.name }} {{ $currentVersionData := partial "theme/functions/get-doc-version-data.html" . }} {{ with $currentVersionData.version }} diff --git a/site/layouts/checkout/single.html b/site/layouts/checkout/single.html index a4fadf00..6868be21 100644 --- a/site/layouts/checkout/single.html +++ b/site/layouts/checkout/single.html @@ -12,7 +12,7 @@

Loading checkout details...

- {{ $email := site.Data.emails.sales_email }} + {{ $email := hugo.Data.emails.sales_email }} {{ $emailLink := printf "%s" $email From bfe1d4a840e81c4d93088361714a0309af77558a Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:16:07 +0100 Subject: [PATCH 12/17] Improve task doc --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8dbfe571..d1f40afb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,7 +29,7 @@ */ tasks.register("runSite") { description = "Builds and runs the site locally." + - " The server is available at http://localhost:1313/." + " The server is available at http://localhost:1313/ or other port." commandLine("./_script/hugo-serve") } From b3a7ce1c82bfa4e810bad7ad585d1b2ecd1049dc Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:26:29 +0100 Subject: [PATCH 13/17] Fix usage of `site.Data` --- site/layouts/_partials/components/footer/columns.html | 2 +- site/layouts/_partials/components/footer/logo.html | 2 +- site/layouts/_partials/components/navbar/logo.html | 2 +- site/layouts/_partials/components/navbar/navigation.html | 2 +- site/layouts/_partials/components/redirect-screen.html | 2 +- site/layouts/_partials/components/subscribe-container.html | 2 +- site/layouts/_partials/getting-help/mailto-button.html | 2 +- site/layouts/_partials/head/canonical.html | 2 +- site/layouts/_partials/head/microdata/get-emails.html | 2 +- site/layouts/_partials/head/microdata/get-socials.html | 2 +- site/layouts/_partials/head/microdata/get-structured-data.html | 2 +- site/layouts/_partials/head/title.html | 2 +- site/layouts/checkout/single.html | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/site/layouts/_partials/components/footer/columns.html b/site/layouts/_partials/components/footer/columns.html index 65e64636..92c7e68e 100644 --- a/site/layouts/_partials/components/footer/columns.html +++ b/site/layouts/_partials/components/footer/columns.html @@ -24,7 +24,7 @@ ~ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> -{{ $columns := hugo.Data.footer.columns }} +{{ $columns := site.Data.footer.columns }}
{{ range $index, $column := $columns }} diff --git a/site/layouts/_partials/components/footer/logo.html b/site/layouts/_partials/components/footer/logo.html index 4f1a0873..be844d8d 100644 --- a/site/layouts/_partials/components/footer/logo.html +++ b/site/layouts/_partials/components/footer/logo.html @@ -26,4 +26,4 @@ + alt="{{ site.Data.spine.full_name }}"> diff --git a/site/layouts/_partials/components/navbar/logo.html b/site/layouts/_partials/components/navbar/logo.html index 95fd840c..afe207ba 100644 --- a/site/layouts/_partials/components/navbar/logo.html +++ b/site/layouts/_partials/components/navbar/logo.html @@ -28,6 +28,6 @@ + alt="{{ site.Data.spine.full_name }}">
diff --git a/site/layouts/_partials/components/navbar/navigation.html b/site/layouts/_partials/components/navbar/navigation.html index 73bb8d81..a3a96e5c 100644 --- a/site/layouts/_partials/components/navbar/navigation.html +++ b/site/layouts/_partials/components/navbar/navigation.html @@ -26,7 +26,7 @@ {{ $currentPage := . }} {{ $currentRootSection := partial "functions/get-root-section.html" . }} -{{ $navItems := hugo.Data.navbar }} +{{ $navItems := site.Data.navbar }}
- {{ $email := hugo.Data.emails.dev_email }} + {{ $email := site.Data.emails.dev_email }} {{ $cloakedEmail := printf "{{< cloakemail address=\"%s\" >}}" $email }}

Sorry, the redirection was interrupted

Please try again. If the issue persists, contact us at diff --git a/site/layouts/_partials/components/subscribe-container.html b/site/layouts/_partials/components/subscribe-container.html index ab69a5e0..50f3f501 100644 --- a/site/layouts/_partials/components/subscribe-container.html +++ b/site/layouts/_partials/components/subscribe-container.html @@ -31,7 +31,7 @@

diff --git a/site/layouts/_partials/getting-help/mailto-button.html b/site/layouts/_partials/getting-help/mailto-button.html index 9a10139b..06fc6074 100644 --- a/site/layouts/_partials/getting-help/mailto-button.html +++ b/site/layouts/_partials/getting-help/mailto-button.html @@ -26,7 +26,7 @@ -{{ $email := hugo.Data.emails.sales_email }} +{{ $email := site.Data.emails.sales_email }} {{ $class := "btn btn-bordered-blue pricing-btn" }} {{ $label := "Contact Us" }} diff --git a/site/layouts/_partials/head/canonical.html b/site/layouts/_partials/head/canonical.html index af46402b..e01b7de0 100644 --- a/site/layouts/_partials/head/canonical.html +++ b/site/layouts/_partials/head/canonical.html @@ -47,7 +47,7 @@ {{ $currentVersionData := partial "theme/functions/get-doc-version-data.html" $page }} {{ $currentModule := $currentVersionData.module }} -{{ $currentVersion := index hugo.Data.versions $currentModule | default (slice) }} +{{ $currentVersion := index site.Data.versions $currentModule | default (slice) }} {{ $mainVersion := index (where $currentVersion "is_main" true) 0 }} {{ $moduleBase := cond (eq $currentModule "docs") "docs" (printf "docs/%s" $currentModule) }} {{ $pathPattern := printf `^%s/[0-9]+/` $moduleBase }} diff --git a/site/layouts/_partials/head/microdata/get-emails.html b/site/layouts/_partials/head/microdata/get-emails.html index 81ebc4b9..70fa4b36 100644 --- a/site/layouts/_partials/head/microdata/get-emails.html +++ b/site/layouts/_partials/head/microdata/get-emails.html @@ -24,7 +24,7 @@ ~ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> -{{ $data := hugo.Data.emails }} +{{ $data := site.Data.emails }} {{ $devEmail := $data.dev_email }} {{ $salesEmail := $data.sales_email }} diff --git a/site/layouts/_partials/head/microdata/get-socials.html b/site/layouts/_partials/head/microdata/get-socials.html index 3c0a6f1e..46288b67 100644 --- a/site/layouts/_partials/head/microdata/get-socials.html +++ b/site/layouts/_partials/head/microdata/get-socials.html @@ -24,7 +24,7 @@ ~ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> -{{ $data := hugo.Data.socials }} +{{ $data := site.Data.socials }} {{ $socials := slice $data.github_discussions diff --git a/site/layouts/_partials/head/microdata/get-structured-data.html b/site/layouts/_partials/head/microdata/get-structured-data.html index 7a59b906..fafffeb1 100644 --- a/site/layouts/_partials/head/microdata/get-structured-data.html +++ b/site/layouts/_partials/head/microdata/get-structured-data.html @@ -33,7 +33,7 @@ {{ $type := "Organization" }} {{ $images := slice $logoUrl }} -{{ $name := hugo.Data.spine.full_name }} +{{ $name := site.Data.spine.full_name }} {{ $url := site.BaseURL }} {{ $logo := $logoUrl }} {{ $emails := partial "head/microdata/get-emails.html" . }} diff --git a/site/layouts/_partials/head/title.html b/site/layouts/_partials/head/title.html index 3e6d8b8b..69575db2 100644 --- a/site/layouts/_partials/head/title.html +++ b/site/layouts/_partials/head/title.html @@ -32,7 +32,7 @@ {{ $title := .Title | default site.Title }} {{ $title = replace $title " " " " }} {{ $pageURL := .RelPermalink }} -{{ $productPrefix := hugo.Data.spine.name }} +{{ $productPrefix := site.Data.spine.name }} {{ $currentVersionData := partial "theme/functions/get-doc-version-data.html" . }} {{ with $currentVersionData.version }} diff --git a/site/layouts/checkout/single.html b/site/layouts/checkout/single.html index 6868be21..a4fadf00 100644 --- a/site/layouts/checkout/single.html +++ b/site/layouts/checkout/single.html @@ -12,7 +12,7 @@

Loading checkout details...

- {{ $email := hugo.Data.emails.sales_email }} + {{ $email := site.Data.emails.sales_email }} {{ $emailLink := printf "%s" $email From 38aaf8d1eb981c42b726ccac1fcabd86ec5b870c Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:28:00 +0100 Subject: [PATCH 14/17] Update HUGO_VERSION to 0.161.1 in CI --- .github/workflows/gh-pages.yml | 2 +- .github/workflows/proof-links.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 58362b73..919a83bf 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -7,7 +7,7 @@ on: - staging env: - HUGO_VERSION: 0.150.0 + HUGO_VERSION: 0.161.1 jobs: deploy: diff --git a/.github/workflows/proof-links.yml b/.github/workflows/proof-links.yml index 93b3a4c2..9b93fd39 100644 --- a/.github/workflows/proof-links.yml +++ b/.github/workflows/proof-links.yml @@ -2,7 +2,7 @@ name: Proof Links on: [pull_request, workflow_dispatch] env: - HUGO_VERSION: 0.147.8 + HUGO_VERSION: 0.161.1 LYCHEE_RELEASE: "lychee-v0.15.1-x86_64-unknown-linux-gnu.tar.gz" LYCHEE_VERSION_TAG: "v0.15.1" From 8bc9b5783226c65c63bddf65cee463c6ac267c40 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:35:17 +0100 Subject: [PATCH 15/17] Enable PostCSS pipeline working on CI --- site/config/_default/hugo.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/site/config/_default/hugo.toml b/site/config/_default/hugo.toml index cc386a7f..c15de947 100644 --- a/site/config/_default/hugo.toml +++ b/site/config/_default/hugo.toml @@ -38,6 +38,11 @@ disableKinds = ['taxonomy', 'term'] [security] [security.exec] osEnv = ['(?i)^(PATH|PATHEXT|APPDATA|TMP|TEMP|TERM|HOME)$'] + # Hugo 0.161.0+ runs PostCSS under Node's --permission sandbox, which blocks + # browserslist from walking up the tree to find a config. Disable it so the + # PostCSS pipeline (autoprefixer, purgecss) keeps working on CI. + [security.node.permissions] + disable = true # Enables HTML rendering in markdown files. [markup] From 282a4c4b72b77c1a5067c31102af6a517bec519b Mon Sep 17 00:00:00 2001 From: Julia Evseeva Date: Fri, 22 May 2026 18:35:54 +0200 Subject: [PATCH 16/17] Bump the postCSS dependencies to make them work with Hugo 161 --- site/package-lock.json | 107 +++++++++++++++++++++-------------------- site/package.json | 4 +- 2 files changed, 58 insertions(+), 53 deletions(-) diff --git a/site/package-lock.json b/site/package-lock.json index ada41ff0..d2c3788a 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -10,8 +10,8 @@ "license": "ISC", "devDependencies": { "@fullhuman/postcss-purgecss": "^7.0.2", - "autoprefixer": "^10.4.22", - "postcss": "^8.5.6", + "autoprefixer": "^10.5.0", + "postcss": "^8.5.14", "postcss-cli": "^11.0.1", "postcss-discard-comments": "^7.0.5" } @@ -162,9 +162,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", - "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", "dev": true, "funding": [ { @@ -180,11 +180,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "browserslist": "^4.27.0", - "caniuse-lite": "^1.0.30001754", + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", - "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -209,12 +209,16 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.31", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz", - "integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==", + "version": "2.10.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", + "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", "dev": true, + "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/binary-extensions": { @@ -255,9 +259,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -273,12 +277,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -288,9 +293,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001757", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", - "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", "dev": true, "funding": [ { @@ -305,7 +310,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chokidar": { "version": "3.6.0", @@ -414,10 +420,11 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.260", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz", - "integrity": "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==", - "dev": true + "version": "1.5.361", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.361.tgz", + "integrity": "sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -684,9 +691,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "dev": true, "funding": [ { @@ -694,6 +701,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -702,10 +710,14 @@ } }, "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", + "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", @@ -716,15 +728,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -784,9 +787,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", "dev": true, "funding": [ { @@ -802,8 +805,9 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -1186,9 +1190,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -1204,6 +1208,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" diff --git a/site/package.json b/site/package.json index ae4db2b0..ea630367 100644 --- a/site/package.json +++ b/site/package.json @@ -10,8 +10,8 @@ "license": "ISC", "devDependencies": { "@fullhuman/postcss-purgecss": "^7.0.2", - "autoprefixer": "^10.4.22", - "postcss": "^8.5.6", + "autoprefixer": "^10.5.0", + "postcss": "^8.5.14", "postcss-cli": "^11.0.1", "postcss-discard-comments": "^7.0.5" } From a96323244a8546ac4541e78ba54a50764c6f2333 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 22 May 2026 17:40:32 +0100 Subject: [PATCH 17/17] Use HTTPS links --- site/layouts/_partials/about/tools.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/layouts/_partials/about/tools.html b/site/layouts/_partials/about/tools.html index 76e1f9b0..554e1d2b 100644 --- a/site/layouts/_partials/about/tools.html +++ b/site/layouts/_partials/about/tools.html @@ -5,7 +5,7 @@ ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ - ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ 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 @@ -48,7 +48,7 @@

Tools that help us

title="Cloud Repo" alt="Cloud Repo"> - + Error Prone @@ -58,7 +58,7 @@

Tools that help us

title="PMD" alt="PMD">
- + Checkstyle