From 004f2179349ee5f4f09507c5b9bc491d2cbb8feb Mon Sep 17 00:00:00 2001 From: Implementer Date: Tue, 6 Oct 2026 07:51:41 +0200 Subject: [PATCH] Takes service-conventions v0.12.0 The owner's word moves guestgraph/service-conventions in `service-conventions.json` from v0.11.0 to v0.12.0. The upstream notes are at https://github.com/guestgraph/service-conventions/releases/tag/v0.12.0. The sync ran twice: the v0.11.0 script does not know the wrapper, so the first run writes the new script and the second the wrapper, which already matched after Maven 3.10.0 was merged here. Verified: the pin's move against the local service-conventions at the release commit, then a second sync, `./mvnw -B verify`, `sh service-conventions/regen-er && git diff --exit-code docs/er-schema.mmd`, `sh service-conventions/service-conventions-sync check`, `sh service-conventions/service-conventions-check` and `sh service-conventions/regen-api && git diff --exit-code src/main/resources/api/openapi.yaml` passed. Process: Delivery Phase: Implement Track: Code Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/dependabot.yml | 10 ++++++++-- AGENTS.md | 4 ++-- pom.xml | 2 +- service-conventions.json | 2 +- service-conventions/AGENTS.md | 4 ++-- service-conventions/dependabot.yml | 10 ++++++++-- service-conventions/pom.xml | 6 +++--- service-conventions/service-conventions-sync | 18 +++++++++++++++--- 8 files changed, 40 insertions(+), 16 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 3e536a6..ba88d42 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,8 +3,10 @@ # Maven follows the parent a service's pom takes by relativePath, and that parent is vendored: # a bump written into the copy makes it differ from its release and the service-conventions job # refuses it. Everything the parent pins is therefore ignored here and bumped in the shared -# repository, where `sh tests/run` holds this list to what the parent actually pins. Everything -# a service declares for itself stays watched. +# repository, where `sh tests/run` holds this list to what the parent actually pins. The same +# holds for the other vendored files Dependabot reads: the Maven wrapper, whose version is the +# runtime module's, and the actions the vendored workflow verify.yml uses. Everything a service +# declares for itself stays watched. version: 2 updates: - package-ecosystem: "maven" @@ -25,11 +27,15 @@ updates: - dependency-name: "com.diffplug.spotless:spotless-maven-plugin" - dependency-name: "com.google.googlejavaformat:google-java-format" - dependency-name: "org.codehaus.mojo:exec-maven-plugin" + - dependency-name: "org.apache.maven:apache-maven" - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" + ignore: + - dependency-name: "actions/checkout" + - dependency-name: "actions/setup-java" groups: actions: patterns: diff --git a/AGENTS.md b/AGENTS.md index 7d0a15b..70843e4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,8 +11,8 @@ Shared conventions of the robertblust, guestgraph and companygraph organizations Everything below this block is this repository's own. `sh conventions/conventions-sync check` says whether the copy matches the release, `sync` brings it to the release the pin names, and `sh conventions/conventions-check` holds this repository's own Markdown to `WRITING.md`, and `sh conventions/conventions-format` to its one form, which `fix` writes. Edit a shared file in robertblust/conventions, never here. - -The code-level rules of every guestgraph service on the Spring stack live in `service-conventions/`, vendored from guestgraph/service-conventions at the release `service-conventions.json` names: the parent build every `pom.xml` takes by path, the source rules, the architecture rules in `src/test/java/ServiceRulesTest.java`, the diagram script, the API generator `regen-api` that writes the one `openapi.yaml` the service serves from the sources named beside it, the workflow in `.github/workflows/verify.yml`, and this block. `sh service-conventions/service-conventions-sync check` says whether the copy matches the release, `sync` brings it to the release the pin names, and `sh service-conventions/service-conventions-check` says what of the list the service lacks. What every service has, whatever its stack, is `SERVICE.md` there. Edit a shared file in guestgraph/service-conventions, never here. + +The code-level rules of every guestgraph service on the Spring stack live in `service-conventions/`, vendored from guestgraph/service-conventions at the release `service-conventions.json` names: the parent build every `pom.xml` takes by path, the source rules, the architecture rules in `src/test/java/ServiceRulesTest.java`, the diagram script, the API generator `regen-api` that writes the one `openapi.yaml` the service serves from the sources named beside it, the workflow in `.github/workflows/verify.yml`, the Maven wrapper, and this block. `sh service-conventions/service-conventions-sync check` says whether the copy matches the release, `sync` brings it to the release the pin names, and `sh service-conventions/service-conventions-check` says what of the list the service lacks. What every service has, whatever its stack, is `SERVICE.md` there. Edit a shared file in guestgraph/service-conventions, never here. # GuestGraph — working conventions diff --git a/pom.xml b/pom.xml index 807886b..a50066a 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ io.guestgraph service-parent - 0.11.0 + 0.12.0 service-conventions/pom.xml diff --git a/service-conventions.json b/service-conventions.json index 9bc3b44..c256214 100644 --- a/service-conventions.json +++ b/service-conventions.json @@ -1 +1 @@ -{ "repo": "guestgraph/service-conventions", "tag": "v0.11.0", "stack": "spring", "root": "io.guestgraph.engine", "scope": "tenantId", "schema": "engine", "jdbcClientAllowed": ["io.guestgraph.engine.resolution.TenantLock", "io.guestgraph.engine.config.LocalDevSeeder"] } +{ "repo": "guestgraph/service-conventions", "tag": "v0.12.0", "stack": "spring", "root": "io.guestgraph.engine", "scope": "tenantId", "schema": "engine", "jdbcClientAllowed": ["io.guestgraph.engine.resolution.TenantLock", "io.guestgraph.engine.config.LocalDevSeeder"] } diff --git a/service-conventions/AGENTS.md b/service-conventions/AGENTS.md index 3b88429..f043383 100644 --- a/service-conventions/AGENTS.md +++ b/service-conventions/AGENTS.md @@ -1,3 +1,3 @@ - -The code-level rules of every guestgraph service on the Spring stack live in `service-conventions/`, vendored from guestgraph/service-conventions at the release `service-conventions.json` names: the parent build every `pom.xml` takes by path, the source rules, the architecture rules in `src/test/java/ServiceRulesTest.java`, the diagram script, the API generator `regen-api` that writes the one `openapi.yaml` the service serves from the sources named beside it, the workflow in `.github/workflows/verify.yml`, and this block. `sh service-conventions/service-conventions-sync check` says whether the copy matches the release, `sync` brings it to the release the pin names, and `sh service-conventions/service-conventions-check` says what of the list the service lacks. What every service has, whatever its stack, is `SERVICE.md` there. Edit a shared file in guestgraph/service-conventions, never here. + +The code-level rules of every guestgraph service on the Spring stack live in `service-conventions/`, vendored from guestgraph/service-conventions at the release `service-conventions.json` names: the parent build every `pom.xml` takes by path, the source rules, the architecture rules in `src/test/java/ServiceRulesTest.java`, the diagram script, the API generator `regen-api` that writes the one `openapi.yaml` the service serves from the sources named beside it, the workflow in `.github/workflows/verify.yml`, the Maven wrapper, and this block. `sh service-conventions/service-conventions-sync check` says whether the copy matches the release, `sync` brings it to the release the pin names, and `sh service-conventions/service-conventions-check` says what of the list the service lacks. What every service has, whatever its stack, is `SERVICE.md` there. Edit a shared file in guestgraph/service-conventions, never here. diff --git a/service-conventions/dependabot.yml b/service-conventions/dependabot.yml index 3e536a6..ba88d42 100644 --- a/service-conventions/dependabot.yml +++ b/service-conventions/dependabot.yml @@ -3,8 +3,10 @@ # Maven follows the parent a service's pom takes by relativePath, and that parent is vendored: # a bump written into the copy makes it differ from its release and the service-conventions job # refuses it. Everything the parent pins is therefore ignored here and bumped in the shared -# repository, where `sh tests/run` holds this list to what the parent actually pins. Everything -# a service declares for itself stays watched. +# repository, where `sh tests/run` holds this list to what the parent actually pins. The same +# holds for the other vendored files Dependabot reads: the Maven wrapper, whose version is the +# runtime module's, and the actions the vendored workflow verify.yml uses. Everything a service +# declares for itself stays watched. version: 2 updates: - package-ecosystem: "maven" @@ -25,11 +27,15 @@ updates: - dependency-name: "com.diffplug.spotless:spotless-maven-plugin" - dependency-name: "com.google.googlejavaformat:google-java-format" - dependency-name: "org.codehaus.mojo:exec-maven-plugin" + - dependency-name: "org.apache.maven:apache-maven" - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" + ignore: + - dependency-name: "actions/checkout" + - dependency-name: "actions/setup-java" groups: actions: patterns: diff --git a/service-conventions/pom.xml b/service-conventions/pom.xml index 96cb7d9..d7a473e 100644 --- a/service-conventions/pom.xml +++ b/service-conventions/pom.xml @@ -16,7 +16,7 @@ io.guestgraph service-parent - 0.11.0 + 0.12.0 pom GuestGraph service parent The Spring stack of every guestgraph service: platform, shared versions and the plugins that hold the source to the rules @@ -31,10 +31,10 @@ 25 2.0.5 - 1.5.0 + 1.5.1 3.13.2 3.28.0 - 3.10.2 + 3.10.3 1.36.1 3.6.4 diff --git a/service-conventions/service-conventions-sync b/service-conventions/service-conventions-sync index 7950ea0..ccc864e 100644 --- a/service-conventions/service-conventions-sync +++ b/service-conventions/service-conventions-sync @@ -10,8 +10,10 @@ # SERVICE_CONVENTIONS_SOURCE overrides that with another base URL or a local directory that holds # the stack's directory, which is how the tests run offline. Beside service-conventions/ the sync # writes four files a build reads in a fixed place: the workflow, the rules test, the API -# generator and the block of AGENTS.md after the family's block, and the shared runtime, the -# package io.guestgraph.service every service carries as source. Needs sh, curl, awk, sed, and shasum or sha256sum. +# generator and the block of AGENTS.md after the family's block, the shared runtime, the +# package io.guestgraph.service every service carries as source, and the Maven wrapper the runtime +# module builds with, so every service runs the one Maven the parent is tested on. Needs sh, curl, +# awk, sed, and shasum or sha256sum. set -eu usage() { echo "usage: sh service-conventions/service-conventions-sync sync|check" >&2; exit 2; } @@ -25,6 +27,7 @@ FILES="pom.xml pmd-ruleset.xml ServiceRulesTest.java RegenApi.java regen-er rege RUNTIME="Problems.java ServiceException.java ServiceExceptionHandler.java RequestSizeLimitFilter.java ApiDocsController.java BearerTokenFilter.java ServiceDefaults.java ServiceAutoConfiguration.java" RESOURCES="service-defaults.yaml META-INF/spring.factories META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports" RUNTIME_DIR=src/main/java/io/guestgraph/service +WRAPPER=".mvn/wrapper/maven-wrapper.properties mvnw mvnw.cmd" OPEN_RE='^$' CLOSE='' FAMILY_CLOSE='' @@ -94,12 +97,15 @@ if [ "$cmd" = sync ]; then for f in $RUNTIME; do fetch "runtime/src/main/java/io/guestgraph/service/$f" "$RUNTIME_DIR/$f"; done mkdir -p src/main/resources/META-INF/spring for f in $RESOURCES; do fetch "runtime/src/main/resources/$f" "src/main/resources/$f"; done + mkdir -p .mvn/wrapper + for f in $WRAPPER; do fetch "runtime/$f" "$f"; done + chmod +x mvnw for f in $FILES; do place=$(place_of "$f"); [ -n "$place" ] || continue mkdir -p "$(dirname "$place")"; cp "$DIR/$f" "$place" done write_block - echo "✓ service-conventions: $DIR/, the workflows, the rules test and the AGENTS.md block are at $REPO@$TAG ($STACK)" + echo "✓ service-conventions: $DIR/, the workflows, the rules test, the Maven wrapper and the AGENTS.md block are at $REPO@$TAG ($STACK)" exit 0 fi @@ -128,6 +134,12 @@ for f in $RUNTIME; do echo "✗ service-conventions: $RUNTIME_DIR/$f differs from $TAG"; status=1 fi done +for f in $WRAPPER; do + mkdir -p "$TMP/$(dirname "$f")"; fetch "runtime/$f" "$TMP/$f" + if [ ! -f "$f" ] || [ "$(sha "$f")" != "$(sha "$TMP/$f")" ]; then + echo "✗ service-conventions: $f differs from $TAG"; status=1 + fi +done if [ ! -f AGENTS.md ] || [ "$(block_of AGENTS.md)" != "$(block_of "$TMP/AGENTS.md")" ]; then echo "✗ service-conventions: the AGENTS.md block differs from $TAG"; status=1 fi