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