Merge 8.1.x into 9.0.x - #16277
Open
jamesfredley wants to merge 1224 commits into
Open
Conversation
…ature/gsp-compile-static-8.0.x
…/codeconsole/grails-core into feature/gsp-compile-static-8.0.x
The rewrite decides whether a class can call tags by looking for the trait that gives it the ability. Ordering that after trait injection by priority holds only among transforms that declare one, and a trait can arrive from a local transform, which is applied after every global transform has run. A controller compiled from the conventional directory was read after it carried the trait; the same source compiled from elsewhere was read before. Which of the two happened for a given class also varied by platform, so the rewrite was applied on macOS and skipped on Linux for the same controller. Reading the class in a later phase makes the question decidable: every trait has been applied by then, whichever transform supplied it. The priority stays as a second guarantee for anything ordered within the phase. This also removes the limitation the rewrite carried, that a controller declared by annotation outside grails-app/controllers kept the dispatched call rather than the direct one. Its test now pins the rewrite instead of the limitation, and a new one pins the phase the correctness now rests on.
The case was asked for in review and dropped as platform-dependent, on the reading that recognising a controller by its location turns on where the compilation happens. That reading was wrong: the trait assertion holds on every platform, so the injector does recognise a controller compiled into a temporary directory. What varied was the rewrite, for the reason the previous commit fixed. This is the shape that carried the bug, so it is worth a test that runs in a second rather than only a functional one that needs a whole build.
The index describes what a tag library declares when it is compiled, which is not what a running application registers: a plugin can be excluded, a tag library can be named in nonEnhancedTagLibClasses, and a unit test can mock some tag libraries and not others. A call resolved against the index reached TagOutput directly and raised GrailsTagException there, where the same call dispatched dynamically raised MissingMethodException. Code catching that around a tag call, or probing with respondsTo, saw the difference. An unregistered tag now goes back through the namespace dispatcher, which is the dispatch the call would have had. That reports what it always reported, including the type it names, rather than a second copy of the rule here.
…an-object-type-8.0.x BUGFIX: message bundles silently failing to resolve in development
…-state Fix flaky grails-views-gson tests caused by shared static test state
The Gradle flag had a test that it reaches a forked JVM, and the compiler had tests that a page compiles, but nothing ran an application whose pages were compiled statically and rendered them. This adds one: a build that sets grails.compileStatic.gsp, pages that read a declared model, the names the framework binds, a typed local and a tag library in its own namespace, and an integration test that renders each through a running server. Rendering correctly is not on its own evidence, since a page renders the same either way, so the class each page compiled to is checked as well. The pages that declare a model are separated from the one that declares nothing: a model directive implies static compilation on its own, and only the page without one answers whether the build setting did anything.
…tests The CAS plugin had no tests at all, and its only exerciser was a bootRun-only demo pointed at a hand-run CAS server. Two defects were living in that gap. Fixes: * casAuthenticationFilter set proxyReceptorUrl unconditionally. Spring Security 7.1 rejects a null pattern, so an application that did not configure a proxy receptor - the default - failed to start. It is now only set when configured, which is how CasAuthenticationFilter expresses that proxy support is off. Previously the unguarded assignment produced a matcher for the literal path '/**null', quietly giving unconfigured applications a live proxy receptor. * Single sign-out never worked. The plugin set useSessionFixationPrevention to false from doWithSpring, but it declares loadAfter = ['springSecurityCore'], so the core plugin had already defined sessionAuthenticationStrategy from the original value. The session was still replaced on login, so CAS logout requests matched no session. The bean is now redefined from the CAS plugin as well, through the same BeanTypeResolver the core plugin uses so an application's sessionAuthenticationStrategyBeanClass override still wins. Behaviour change: * cas.useSingleSignout now defaults to false. Enabling it disables session fixation prevention, which an application should choose deliberately rather than inherit. The plugin warns at startup when it is enabled. Documented in the CAS configuration reference and in the Grails 8 upgrade guide. Tests: grails-test-examples-spring-security-cas-test1 now runs against a real Apereo CAS server started with Testcontainers, gated on Docker availability, and no longer needs an externally managed CAS server for bootRun either. An EnvironmentPostProcessor starts the container and supplies the CAS URLs before the context is built; the service and proxy callback URLs, which depend on the port the embedded server binds, are set once the server is up. Three configurations run via the existing TESTCONFIG idiom: 'cas' (proxy settings unset), 'casProxy' (full proxy-granting-ticket round trip) and 'casNoSingleSignout' (asserts the new default). Coverage spans the login handshake, ticket validation, role enforcement, proxy tickets obtained through AttributePrincipal, and single sign-out. Logout requests are posted from a cookie-less client, as CAS does, so the filter's behaviour cannot be confused with the session clearing that a failed authentication would cause anyway. Also fixes an unrelated pre-existing gap: 'Grails BOM Hibernate7 Micronaut.adoc' is generated and gitignored but was missing from the rat exclusions, so rat failed after any docs build.
…n metadata * README: drop two leftover lines from the previous text that survived the rewrite, and correct "two configurations" now that there are three. * Stop running a CAS configuration twice. The specs defaulted to the 'cas' configuration when TESTCONFIG was unset, so the broad 'security' job ran it in each of its matrix entries on top of the dedicated casSecurityConfig job. They now require a configuration to be selected, matching the core functional-test-app precedent, so 'security' skips them and each configuration runs exactly once. bootRun still needs no TESTCONFIG. * Plugin metadata: the plugin uses org.apereo.cas.client, so call it Apereo rather than Jasig, in the plugin title/description and in the guide, where three dead jasig.org links are repointed at apereo.github.io. Bump grailsVersion and repoint organization, issueManagement and scm at apache/grails-core, matching the convention used elsewhere on this branch.
* Drop the author metadata, per ASF policy. * Restore log.warn alongside the println for the single signout warning, as SpringSecurityCoreGrailsPlugin does. The @slf4j annotation was otherwise unused, and an application that captures logs but not stdout would never see the warning the docs promise. Trim a whitespace-only line. * Update the "Single Signout" section of the CAS guide, which still said the feature was enabled by default and only documented turning it off. * Renumber the upgrade-guide section to 48; sections 45 to 47 landed upstream while this was open, leaving two sections numbered 46. * Give the CAS requests in the specs a per-request timeout. Only a connect timeout was set, so a container that accepted the connection but never answered would block send() indefinitely and hang the job until the CI runner killed it. * Forward TESTCONFIG and casContainerVersion to bootRun, which forks its own JVM and so never saw them. /secure/proxyStatus could therefore only ever report NO_PROXY_TICKET when running the app by hand. Documented in the README, and verified that bootRun -DTESTCONFIG=casProxy now yields a real proxy ticket. * Reuse the base class's execution-token extraction in CasLoginSpec instead of duplicating it without its null guard, which turned a missing token into an opaque NPE inside URLEncoder.encode. * Correct the CasSingleSignOutSpec class comment, stale since single signout became opt-in. * Reindent SecureController with spaces to match .editorconfig.
Reusing the assignment form for a name already typed was tracked in one flat set for the whole page, which is not what a block scope is. Two sibling blocks are two scopes, so a name typed in each was declared in the first and assigned in the second, where nothing had declared it: it resolved through the page's setProperty and lost its type, and reading it reported that the type was not known. The names are held one frame per emitted block now. A name an enclosing frame declared is assigned to, which is what the same-scope case needs, and a name only a sibling declared is declared again, which is what that case needs. Also reports strictness as false while pages are not compiled statically, so that toggling it does not invalidate a task whose output cannot change, and drops a comment left above an empty block when its dependencies moved to testImplementation.
The views and the configuration went in without one, which the RAT audit reports. The pages carry it as a GSP comment, so it is not rendered, and it sits ahead of the model directive without displacing it.
Class.cast accepts only what is already an instance, so every conversion Groovy would have made was rejected -- and rejected at render, after the page had compiled. A long or a double declared from an integer literal, a String from a GString, all of them threw. Casting through the wrapper had narrowed that to exact boxing rather than removed it. Both tags emit a Groovy cast now, which is what the framework-supplied accessors in this branch already emitted, and the tests that passed were the shapes Class.cast happened to accept, so they say what they mean now. A g:def value mixing text and an expression emitted source that did not parse: the attribute is a GString, and only a lone expression is Groovy on its own. It is quoted where it is neither that nor plain text, which leaves naming a variable untouched. Also points the page compilers at the option object rather than at a provider reaching through the project, which put the project behind a task input, and moves a javadoc block onto the method it describes.
The type attribute was not in the guide at all, though the error a page gets
tells the reader to use it -- "give it a type where it is introduced" -- and
led to a section that did not mention it. It is described there now, beside
g:def, and listed on the set tag's reference page with the restriction that
it is only meaningful alongside value.
Two statements predate the non-strict default and had stopped being true. A
page reading a variable it never declared compiles, so enabling this does not
require every view to declare its model first; what an existing application
actually meets is an operator applied to a value of no known type, which is
reported either way. And static compilation of pages is no longer independent
of the grails { compileStatic { } } block, since that is now how it is asked
for; what remains true is the narrower point that all = true excludes it.
The existing assertions went through the template engine, which resolves a page at render time, so what they proved depended on what happened to be on the runtime classpath rather than on what the build produced. The claim being made is that the option reaches both places a page is compiled, and only one of them was covered. The task's output directory is read directly now. Nothing in the integration test's own task graph produces it, so the dependency is stated: without that the directory is empty on a clean build and the assertion is vacuous.
SchedulerFactoryBean and AdaptableJobFactory come from spring-context-support, which the plugin creates unconditionally, but it was not declared. It is also not reliably inherited from the rest of the stack -- grails-gsp excludes it from its transitive graph -- so an application depending only on this plugin failed to start with a NoClassDefFoundError.
Documents Spring's @scheduled support and its lack of cluster awareness, introduces Quartz as the clustered alternative, and covers Quartz clustering requirements and pitfalls in full.
Restructures the guide so Background Jobs is the entry point, with Basic Scheduling (Spring @scheduled) as the recommended default and Clustered Scheduling (Quartz) presented as the answer to problems Spring's scheduler cannot solve -- principally multi-instance deployments.
Clustering is one capability of the Quartz plugin, not what adding it gives you. Renames the section accordingly and states explicitly, in the chapter intro and on the section landing page, that Quartz defaults to an in-memory job store and must be configured before it is cluster-safe.
Elastic Beanstalk UpdateEnvironment failed from GitHub Actions: cloudformation:DescribeStackResource and s3:GetObjectAcl.
Merge 7.2.x Forge AWS docs into 8.0.x
Copy the AWS Elastic Beanstalk workflow, packaging, and release docs from 8.0.x. Delete the GCP Cloud Run Forge workflows. Leave 8.1.x application code otherwise unchanged.
feat: Forge AWS Elastic Beanstalk on 8.1.x
* Use SLF4J for runtime diagnostics
Assisted-by: opencode:gpt-5.6-sol
* Fix import order and isolate user.home in runner spec
Assisted-by: opencode:gpt-5.6-sol
* Document and de-duplicate the multi-SLF4J-provider test classpath
Copilot flagged that grails-shell-cli's test classpath carries both
slf4j-simple and logback-classic simultaneously, which SLF4J 2.x treats
as an ambiguous binding. Verified this is real: `dependencies
--configuration testRuntimeClasspath` resolves both providers together,
and neither can simply be dropped - slf4j-simple is needed at runtime
for the actual `grails` CLI executable's production logging, and
logback-classic is needed by the new Logback-appender-based forked
regression specs (SpringApplicationRunnerSpec, GrailsCliSpec).
Confirmed no current regression from this (full :grails-shell-cli:test
run is green, no "multiple SLF4J providers" warning appears in any test
output) because both new specs that need a specific provider already
pin it explicitly via -Dslf4j.provider=... in their forked child
process. This commit removes the now-fully-redundant duplicate
`testImplementation 'org.slf4j:slf4j-simple'` line (already pulled in
via the runtimeOnly dependency, so this doesn't change the resolved
classpath) and documents the coexistence so a future forked-process
fixture doesn't skip the explicit pin and hit non-deterministic
provider selection.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* Fix broken imports in SchemaExportCommandSpec after upstream CLI package move
The 8.0.x branch relocated ApplicationCommand/ExecutionContext and each
SchemaExportCommand into a dedicated cli source set with new packages
(grails.dev.commands.ExecutionContext -> org.apache.grails.core.cli.
ExecutionContext, grails.plugin.hibernate.commands.SchemaExportCommand
-> org.apache.grails.data.hibernate{5,7}.cli.SchemaExportCommand) as
part of unrelated work that landed after this PR's base commit.
Merging origin/8.0.x picked this up cleanly via rename tracking for the
production SchemaExportCommand.groovy files (already updated to the new
package on merge), but the two new SchemaExportCommandSpec.groovy test
files added by this PR had no prior history for git to track the rename
through, so they were merged in unchanged - still importing the old
ExecutionContext package and referencing SchemaExportCommand unqualified
(previously fine only because the spec shared its production class's old
package). Both left compileTestGroovy failing after the merge. Fixed by
importing both classes from their new locations.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* test: record coverage for SLF4J diagnostics paths
Codecov reported 13.88% patch coverage because the fixture specs verify
the new logging behavior in forked JVMs that JaCoCo never instruments.
Forward the test JVM's JaCoCo -javaagent argument into the forked
processes so their execution data appends to the module exec file, and
exercise the remaining ProfilingGrailsPluginManager configuration
phases in-process with a probe plugin.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Walter Duque de Estrada <wbduque@mac.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
GitHub Actions UpdateEnvironment failed with s3:PutObjectAcl and s3:DeleteObject on elasticbeanstalk-<region>-<account>. Grant those on the artifact bucket and the Elastic Beanstalk storage bucket.
fix: grant Forge AWS deploy role S3 ACL on EB bucket
GitHub Actions UpdateEnvironment failed with autoscaling:DescribeAutoScalingGroups. Grant describe on Auto Scaling and EC2 instances so Elastic Beanstalk can inspect the environment.
fix: grant Forge AWS deploy role Auto Scaling describe
Attach AWSElasticBeanstalkWebTier, ManagedUpdates, and AdministratorAccess-AWSElasticBeanstalk to the deploy role, matching what einaregilsson/beanstalk-deploy documents. Create application versions without --process and fail fast on Elastic Beanstalk ERROR events instead of waiting out the poll loop.
fix: Elastic Beanstalk managed policies for GitHub deploys
Copy forge-deploy-aws.yml (no --process, fail fast on EB errors) and shared.yaml GitHubDeployRole managed policies from 8.0.x.
fix: sync Forge AWS GitHub deploy with working 8.0.x
chore: merge 8.0.0-M6->8.0.x; bump to 8.0.0-SNAPSHOT
….0.x GORM Native Datastore Id Support
DEFAULT_RESOURCES_INCLUDES generates eight mappings (index, create,
save, show, edit, update, patch, delete) and DEFAULT_RESOURCE_INCLUDES
generates seven, but the guide listed only seven and six. PATCH has
been generated since the action was introduced and was never documented,
including in the "Explicit REST Mappings" equivalence list.
Also corrects the nested resources table, which gave the edit URI as
/books/${bookId}/authors/edit/${id}. The generated mapping appends
/edit after the id, as asserted by RestfulResourceMappingSpec.
Document the PATCH mapping generated by resources and single
The static initializer added by #15800 builds its Caffeine cache through three dynamic call sites: ldc class com/github/benmanes/caffeine/cache/Caffeine invokedynamic invoke:(Ljava/lang/Class;)Ljava/lang/Object; // newBuilder() invokedynamic invoke:(Ljava/lang/Object;)Ljava/lang/Object; // weakKeys() invokedynamic invoke:(Ljava/lang/Object;)Ljava/lang/Object; // build() In a GraalVM native image there is no method handle to link, so Groovy falls back to IndyInterface.aotDispatch and resolves through the metaclass, which is built from Caffeine.getDeclaredMethods() -- empty unless the class is registered for reflection. The class initializer fails with No signature of static method: newBuilder for class: com.github.benmanes.caffeine.cache.Caffeine and codecLookup, gspTagLibraryLookup and groovyPagesTemplateEngine fail with it, so the application never starts. Six of the ten methods already carried @CompileStatic. Moving it to the class turns those three call sites into invokestatic/invokevirtual and needs no reachability metadata at all. addMetaMethod stays dynamic: it resolves a metamethod by GString property name, which is the one thing static compilation cannot express.
Shadow 8.3.6's ShadowApplicationPlugin configures the startShadowScripts
task through conventionMapping.map('mainClassName'). Gradle 9 removed the
deprecated CreateStartScripts.mainClassName in favour of the mainClass
Property, so the task can no longer be created and the Forge build fails
at configuration time:
Could not determine the dependencies of task
':grails-forge-web-netty:shadowDistTar'.
> Could not create task ':grails-forge-web-netty:startShadowScripts'.
> You can't map a property that does not exist: propertyName=mainClassName
Shadow is only applied to grails-forge-web-netty because the AWS Elastic
Beanstalk packaging came over from 7.2.x, which builds Forge on Gradle
8.14.5 where mainClassName still exists. Shadow 8.3.7 backported Gradle 9
support and 8.3.11 is the latest 8.3.x; the 8.x line is maintenance-only
upstream, so Forge's own build should follow the generated applications to
Shadow 9 (already 9.2.2 in the Forge dependency catalog) in a later change,
which needs the Transformer -> ResourceTransformer migration in buildSrc.
…e-static-8.0.x Fix Grails Forge build on Gradle 9 by bumping Shadow to 8.3.11
Resolve GormEntityTransformation by keeping 8.1.x's three-argument JPA association helper and carrying 8.0.x native identity injection. Assisted-by: Cursor Grok 4.6
Bring current 8.0.x/8.1.x work onto 9.0.x, including Shadow 8.3.11. Keep Groovy 6.0.0-beta-2 and 9.0 CI hang handling; restore 8.1 CAS and Neo4j jobs plus MongoDB/Neo4j BOM constraints. Assisted-by: Cursor Grok 4.6
Contributor
There was a problem hiding this comment.
Pull request overview
This PR merges the current 8.1.x line into 9.0.x, carrying forward previously landed build, test, and framework changes onto the Groovy 6 line while resolving conflicts to preserve 9.0.x-specific pins and CI workarounds.
Changes:
- Add/expand Spring AOT native support via new
aot.factoriesregistrations across multiple Grails modules. - Rework test dependency wiring in many modules (notably adopting
testFixtures(...)usage and adjusting parallel test configuration). - Restore/extend Neo4j/MongoDB/CAS-related build and test coverage, plus a variety of correctness/doc updates across framework modules, examples, and Gradle test fixtures.
Reviewed changes
Copilot reviewed 275 out of 1344 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| grails-web-url-mappings/src/main/resources/META-INF/spring/aot.factories | Register URL mappings runtime hints for Spring AOT. |
| grails-web-url-mappings/build.gradle | Adjust test dependencies (incl. web-common fixtures). |
| grails-web-mvc/build.gradle | Remove compileOnly spring-test; adjust test dependencies. |
| grails-web-databinding/src/main/resources/META-INF/spring/aot.factories | Register databinding runtime hints for Spring AOT. |
| grails-web-databinding/build.gradle | Remove compileOnly spring-test block. |
| grails-web-core/build.gradle | Add web-common fixtures to tests; remove compileOnly spring-test. |
| grails-web-boot/build.gradle | Remove compileOnly spring-test block. |
| grails-views-gson/src/test/groovy/grails/plugin/json/view/TemplateInheritanceSpec.groovy | Clarify test model class usage for imported templates. |
| grails-views-gson/src/test/groovy/grails/plugin/json/view/IncludeAssociationsSpec.groovy | Use explicit imports for association test classes. |
| grails-views-gson/src/test/groovy/grails/plugin/json/view/api/JsonApiHandleAssociationsSpec.groovy | Import concrete Author type; tidy file end. |
| grails-views-gson/build.gradle | Enable java-test-fixtures; add BOM to fixtures. |
| grails-validation/build.gradle | Remove compileOnly spring-test block. |
| grails-url-mappings/build.gradle | Remove compileOnly spring-test block. |
| grails-testing-support-web/src/main/groovy/grails/testing/web/GrailsWebUnitTest.groovy | Document why taglib metaclass enhancement remains for tests. |
| grails-testing-support-web/build.gradle | Add web-common fixtures to main implementation. |
| grails-testing-support-views-gson/build.gradle | Depend on grails-views-gson test fixtures as API. |
| grails-testing-support-redis/build.gradle | Enable vulnerability scan plugin. |
| grails-testing-support-mongodb/build.gradle | Add compileOnly embedded Mongo module for transaction-capable specs. |
| grails-test-suite-uber/src/test/groovy/org/grails/plugins/PluginTests.java | Update messageSource expectation to Spring Boot’s bean type. |
| grails-test-suite-uber/src/test/groovy/grails/test/mixin/RestfulControllerSpec.groovy | Tighten constraints for title nullability/blankness. |
| grails-test-suite-uber/src/test/groovy/grails/test/mixin/ResourceAnnotationRestfulControllerSpec.groovy | Tighten constraints for title nullability/blankness. |
| grails-test-suite-persistence/build.gradle | Use test fixtures for shared test utilities; fix parallel setting reference. |
| grails-test-examples/spring-security/core/misc-functional-test-app/roles/src/integration-test/groovy/demo/LoginPage.groovy | Wait for navigation after login submit to avoid flakiness. |
| grails-test-examples/spring-security/core/misc-functional-test-app/group/src/integration-test/groovy/demo/LoginPage.groovy | Wait for navigation after login submit to avoid flakiness. |
| grails-test-examples/spring-security/cas/test1/src/main/resources/cas/services/grailsTest-10000001.json | Add CAS registered service definition fixture. |
| grails-test-examples/spring-security/cas/test1/grails-app/init/grails/plugin/springsecurity/cas/test/BootStrap.groovy | Fix package to match app structure; remove old imports. |
| grails-test-examples/spring-security/cas/test1/grails-app/init/grails/plugin/springsecurity/cas/test/Application.groovy | Fix package to match app structure. |
| grails-test-examples/spring-security/cas/test1/grails-app/domain/grails/plugin/springsecurity/cas/test/UserRole.groovy | Move domain package into app namespace. |
| grails-test-examples/spring-security/cas/test1/grails-app/domain/grails/plugin/springsecurity/cas/test/User.groovy | Move domain package into app namespace. |
| grails-test-examples/spring-security/cas/test1/grails-app/domain/grails/plugin/springsecurity/cas/test/Role.groovy | Move domain package into app namespace. |
| grails-test-examples/spring-security/cas/test1/grails-app/controllers/grails/plugin/springsecurity/cas/test/UrlMappings.groovy | Fix package name. |
| grails-test-examples/scaffolding/grails-app/init/com/example/BootStrap.groovy | Seed Book data via BookService. |
| grails-test-examples/scaffolding/build.gradle | Enable compileStatic for GSP compilation validation. |
| grails-test-examples/quartz/grails-app/init/quartzapp/BootStrap.groovy | Replace accidental controller content with Quartz bootstrap logic. |
| grails-test-examples/plugins/loadfirst/grails-app/i18n/loadfirst.properties | Add plugin i18n bundle fixture. |
| grails-test-examples/plugins/loadfirst/grails-app/i18n/loadfirst_en_US.properties | Add locale-specific plugin i18n bundle fixture. |
| grails-test-examples/plugins/issue-11767/src/main/groovy/issue11767/plugin/MyPluginGrailsPlugin.groovy | Update author metadata. |
| grails-test-examples/neo4j/test-data-service/src/main/groovy/example/LoginAuthenticationSucessHandler.groovy | Migrate servlet imports to Jakarta. |
| grails-test-examples/neo4j/test-data-service/grails-app/services/example/StudentService.groovy | Adjust imports (includes an unused one). |
| grails-test-examples/neo4j/test-data-service/grails-app/init/example/BootStrap.groovy | Minor formatting tweak. |
| grails-test-examples/neo4j/test-data-service/grails-app/init/example/Application.groovy | Remove trailing whitespace and normalize closing brace. |
| grails-test-examples/neo4j/hibernate5/grails-app/views/error.gsp | Switch error attribute key to Jakarta. |
| grails-test-examples/neo4j/hibernate5/grails-app/assets/images/skin/shadow.jpg | Add missing asset. |
| grails-test-examples/neo4j/base/grails-app/views/error.gsp | Switch error attribute key to Jakarta. |
| grails-test-examples/neo4j/base/grails-app/assets/images/skin/shadow.jpg | Add missing asset. |
| grails-test-examples/hibernate7/grails-schema-per-tenant/build.gradle | Add grails-web-common fixtures for tests. |
| grails-test-examples/hibernate7/grails-partitioned-multi-tenancy/build.gradle | Add grails-web-common fixtures for tests. |
| grails-test-examples/hibernate7/grails-database-per-tenant/build.gradle | Add grails-web-common fixtures for tests. |
| grails-test-examples/hibernate7/gorm/build.gradle | Add web-common fixtures for integration tests. |
| grails-test-examples/hibernate5/grails-schema-per-tenant/build.gradle | Add grails-web-common fixtures for tests. |
| grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/build.gradle | Add BOM to tests; add web-common fixtures. |
| grails-test-examples/hibernate5/grails-database-per-tenant/build.gradle | Add BOM to tests; add web-common fixtures. |
| grails-test-examples/gsp-layout/build.gradle | Add BOM to tests; add core/web-common fixtures for tests. |
| grails-test-examples/gsp-compile-static/grails-app/taglib/gspstatic/DemoTagLib.groovy | Replace incorrect content with a statically-compiled demo taglib. |
| grails-test-examples/gsp-compile-static/grails-app/controllers/gspstatic/Book.groovy | Replace incorrect content with a simple statically-compiled POGO. |
| grails-test-examples/graphql/grails-test-app/src/main/groovy/grails/test/app/pogo/Profile.groovy | Add constraints to enforce non-null fields. |
| grails-test-examples/graphql/grails-test-app/src/integration-test/groovy/grails/test/app/UserRoleIntegrationSpec.groovy | Filter stdout capture to SQL only. |
| grails-test-examples/graphql/grails-test-app/src/integration-test/groovy/grails/test/app/TagIntegrationSpec.groovy | Filter stdout capture to SQL only. |
| grails-test-examples/graphql/grails-test-app/src/integration-test/groovy/grails/test/app/CommentIntegrationSpec.groovy | Filter stdout capture to SQL only. |
| grails-test-examples/graphql/grails-test-app/grails-app/domain/grails/test/app/UserRole.groovy | Add non-null constraints for associations. |
| grails-test-examples/graphql/grails-test-app/grails-app/domain/grails/test/app/User.groovy | Make embedded profile/address non-null by default. |
| grails-test-examples/graphql/grails-test-app/grails-app/domain/grails/test/app/Address.groovy | Add non-null constraints to fields. |
| grails-test-examples/gorm/build.gradle | Add BOM to tests; add web-common fixtures to integration tests. |
| grails-test-examples/app1/grails-app/controllers/functionaltests/IncludesController.groovy | Add probe action used by compiled-tag-call verification. |
| grails-test-core/build.gradle | Move groovy dependency; add web-common fixtures; remove compileOnly spring-test. |
| grails-spring/build.gradle | Apply shared test-config.gradle. |
| grails-spring-security/oauth2/plugin/src/main/groovy/grails/plugin/springsecurity/oauth2/SpringSecurityOauth2GrailsPlugin.groovy | Update author metadata. |
| grails-spring-security/cas/plugin/grails-app/conf/DefaultCasSecurityConfig.groovy | Change single signout default to opt-in with rationale. |
| grails-shell-cli/src/test/resources/org/grails/cli/compiler/dependencies/spring-boot-dependencies-effective-bom.xml | Add minimal effective BOM fixture. |
| grails-shell-cli/build.gradle | Swap test logger dependency to logback-classic; document SLF4J provider behavior. |
| grails-services/build.gradle | Remove compileOnly spring-test block. |
| grails-scaffolding/src/main/templates/scaffolding/show.gsp | Add typed model directive for static compilation. |
| grails-scaffolding/src/main/templates/scaffolding/index.gsp | Add typed model directive; fix id interpolation. |
| grails-scaffolding/src/main/templates/scaffolding/edit.gsp | Add typed model directive for static compilation. |
| grails-scaffolding/src/main/templates/scaffolding/create.gsp | Add typed model directive for static compilation. |
| grails-scaffolding/src/main/templates/scaffolding/Controller.groovy | Use Serializable id parameters in generated controller actions. |
| grails-scaffolding/src/main/resources/META-INF/spring/aot.factories | Register scaffolding runtime hints for Spring AOT. |
| grails-scaffolding/src/main/groovy/grails/plugin/scaffolding/GormService.groovy | Remove ReadOnly annotation usage. |
| grails-rest-transforms/build.gradle | Add web-common fixtures; remove compileOnly spring-test. |
| grails-redis/build.gradle | Enable vulnerability scan plugin. |
| grails-quartz/src/main/templates/Job.groovy | Add Quartz job template. |
| grails-quartz/grails-app/conf/plugin.yml | Replace legacy properties with YAML config. |
| grails-profiles/rest-api/templates/artifacts/scaffolding/Controller.groovy | Align REST profile scaffolding controller IDs to Serializable. |
| grails-mimetypes/src/main/resources/META-INF/spring/aot.factories | Register mimetypes runtime hints for Spring AOT. |
| grails-mimetypes/build.gradle | Add web-common fixtures to tests; remove compileOnly spring-test. |
| grails-micronaut/build.gradle | Enable vulnerability scan plugin. |
| grails-mail/src/main/groovy/grails/plugins/mail/PlainTextMailTagLib.groovy | Change tag implementation signature to method form. |
| grails-mail/build.gradle | Enable vulnerability scan plugin. |
| grails-interceptors/build.gradle | Add BOM to tests; add web-common fixtures; remove compileOnly spring-test. |
| grails-i18n/src/test/resources/META-INF/grails/i18n.properties | Add generated i18n descriptor test fixture. |
| grails-i18n/src/test/resources/beta-plugin.properties | Add plugin message bundle fixture. |
| grails-i18n/src/test/resources/alpha-plugin.properties | Add plugin message bundle fixture. |
| grails-i18n/src/main/resources/META-INF/spring.factories | Register environment post-processor. |
| grails-i18n/build.gradle | Remove compileOnly spring-test block. |
| grails-gsp/plugin/src/test/groovy/org/grails/web/pages/ParseSpec.groovy | Update generated constants expectations. |
| grails-gsp/plugin/src/main/resources/META-INF/spring/aot.factories | Register taglib runtime hints for Spring AOT. |
| grails-gsp/plugin/src/ast/resources/META-INF/services/org.codehaus.groovy.transform.ASTTransformation | Register compiled-tag-call AST transformation. |
| grails-gsp/plugin/build.gradle | Add AST dependency; add core/web-common fixtures for tests. |
| grails-gsp/grails-web-taglib/src/main/groovy/org/grails/web/taglib/WebRequestTemplateVariableBinding.java | Add servletContext binding alias. |
| grails-gsp/grails-web-gsp/src/test/groovy/org/grails/web/gsp/io/GrailsConventionGroovyPageLocatorSpec.groovy | Remove lastModified assignment for generated page parser. |
| grails-gsp/grails-taglib/src/main/groovy/org/grails/taglib/TagLibNamespaceMethodDispatcher.groovy | Route tag dispatch through CompiledTagInvocation. |
| grails-gsp/grails-sitemesh3/src/main/groovy/org/grails/plugins/sitemesh3/Sitemesh3GrailsPlugin.groovy | Update author metadata; remove developers list. |
| grails-gsp/grails-layout/build.gradle | Add core fixtures for tests. |
| grails-gsp/core/src/main/resources/META-INF/spring/aot.factories | Register precompiled page runtime hints. |
| grails-gsp/core/src/main/groovy/org/grails/gsp/CompileStaticGroovyPage.groovy | Add notes about model variable naming source. |
| grails-gsp/core/build.gradle | Add core fixtures and servlet/web-common test-only deps. |
| grails-gradle/plugins/src/test/resources/test-projects/taglib-index-wiring/settings.gradle | Add new TestKit fixture project settings. |
| grails-gradle/plugins/src/test/resources/test-projects/native-metadata-ordering/settings.gradle | Add new TestKit fixture project settings. |
| grails-gradle/plugins/src/test/resources/test-projects/native-metadata-ordering/grails-app/views/index.gsp | Add view fixture for native metadata recording. |
| grails-gradle/plugins/src/test/resources/test-projects/native-metadata-ordering/gradle.properties | Add fixture project properties. |
| grails-gradle/plugins/src/test/resources/test-projects/native-defaults-on/settings.gradle | Add fixture project settings. |
| grails-gradle/plugins/src/test/resources/test-projects/native-defaults-on/gradle.properties | Add fixture project properties. |
| grails-gradle/plugins/src/test/resources/test-projects/native-defaults-on/build.gradle | Add fixture to inspect native defaults. |
| grails-gradle/plugins/src/test/resources/test-projects/native-defaults-off/settings.gradle | Add fixture project settings. |
| grails-gradle/plugins/src/test/resources/test-projects/native-defaults-off/gradle.properties | Add fixture project properties. |
| grails-gradle/plugins/src/test/resources/test-projects/native-defaults-off/build.gradle | Add fixture to ensure no implicit native config. |
| grails-gradle/plugins/src/test/resources/test-projects/native-defaults-aot/settings.gradle | Add fixture project settings. |
| grails-gradle/plugins/src/test/resources/test-projects/native-defaults-aot/gradle.properties | Add fixture project properties. |
| grails-gradle/plugins/src/test/resources/test-projects/native-defaults-aot/build.gradle | Add fixture to inspect AOT system properties. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin/src/main/groovy/demo/SpringSecurityDemoGrailsPlugin.groovy | Add plugin fixture class. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin/settings.gradle | Add fixture project settings. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin/grails-app/i18n/spring-security-demo.properties | Add fixture i18n bundle. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin/grails-app/i18n/spring-security-demo-validation.properties | Add fixture i18n bundle. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin/grails-app/i18n/spring-security-demo_fr.properties | Add fixture i18n bundle. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin/gradle.properties | Add fixture project properties. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin/build.gradle | Add fixture build script. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin-collision/src/main/groovy/demo/SpringSecurityDemoGrailsPlugin.groovy | Add collision fixture plugin class. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin-collision/settings.gradle | Add collision fixture settings. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin-collision/grails-app/i18n/messages.properties | Add collision fixture messages. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin-collision/gradle.properties | Add collision fixture properties. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-plugin-collision/build.gradle | Add collision fixture build script. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-declared/settings.gradle | Add declared basenames fixture settings. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-declared/grails-app/i18n/api.properties | Add declared basenames fixture bundle. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-declared/grails-app/i18n/api_errors.properties | Add declared basenames fixture bundle. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-declared/gradle.properties | Add declared basenames fixture properties. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-declared/build.gradle | Add declared basenames fixture config. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-app/settings.gradle | Add app descriptor fixture settings. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-app/grails-app/i18n/messages.properties | Add app fixture messages bundle. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-app/grails-app/i18n/messages_pt_BR.properties | Add app fixture localized messages. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-app/grails-app/i18n/messages_de.properties | Add app fixture localized messages. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-app/grails-app/i18n/api_errors.properties | Add app fixture bundle. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-app/gradle.properties | Add app fixture properties. |
| grails-gradle/plugins/src/test/resources/test-projects/i18n-descriptor-app/build.gradle | Add app fixture build script. |
| grails-gradle/plugins/src/test/resources/test-projects/gsp-compile-static/settings.gradle | Add compile-static fixture settings. |
| grails-gradle/plugins/src/test/resources/test-projects/gsp-compile-static/gradle.properties | Add compile-static fixture properties. |
| grails-gradle/plugins/src/test/resources/test-projects/gsp-compile-classpath/build.gradle | Add diagnostic outputs for GSP compile classpath. |
| grails-gradle/plugins/src/test/resources/test-projects/gorm-default-id-type/settings.gradle | Add gorm id-type fixture settings. |
| grails-gradle/plugins/src/test/resources/test-projects/gorm-default-id-type/grails-app/conf/application.yml | Add gorm id-type fixture config. |
| grails-gradle/plugins/src/test/resources/test-projects/gorm-default-id-type/gradle.properties | Add gorm id-type fixture properties. |
| grails-gradle/plugins/src/test/resources/test-projects/gorm-default-id-type-plugin-consumer/settings.gradle | Add plugin-consumer composite fixture settings. |
| grails-gradle/plugins/src/test/resources/test-projects/gorm-default-id-type-plugin-consumer/plugin/src/main/java/example/PortableBook.java | Add portable domain type fixture. |
| grails-gradle/plugins/src/test/resources/test-projects/gorm-default-id-type-plugin-consumer/plugin/build.gradle | Add plugin fixture build script. |
| grails-gradle/plugins/src/test/resources/test-projects/gorm-default-id-type-plugin-consumer/gradle.properties | Add plugin-consumer fixture properties. |
| grails-gradle/plugins/src/test/resources/test-projects/gorm-default-id-type-plugin-consumer/app/grails-app/conf/application.yml | Add app fixture config for native id. |
| grails-gradle/plugins/src/test/resources/test-projects/gorm-default-id-type-plugin-consumer/app/build.gradle | Add app fixture build script for native id. |
| grails-gradle/plugins/src/test/resources/test-projects/asset-classpath-packaging/settings.gradle | Add asset fixture settings. |
| grails-gradle/plugins/src/test/resources/test-projects/asset-classpath-packaging/gradle.properties | Add asset fixture properties. |
| grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/views/gsp/GroovyPageToolchainSpec.groovy | Update test wording for toolchain input behavior. |
| grails-gradle/plugins/build.gradle | Set test env var to validate inherited environment stripping behavior. |
| grails-gradle/gradle/test-config.gradle | Fix parallel forks property reference. |
| grails-gradle/bom/build.gradle | Remove Log4j import comment/line; keep Spring Boot platform import. |
| grails-geb/src/main/groovy/grails/plugin/geb/GebGrailsPlugin.groovy | Update author metadata. |
| grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/GormImplSpec.groovy | Enable Neo4j as a supported option. |
| grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/database/GrailsDataMongoDBSpec.groovy | Add exclusivity test for MongoDB vs Neo4j feature selection. |
| grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java | Add NEO4J enum option. |
| grails-forge/grails-forge-core/build.gradle | Move logback-classic to testImplementation. |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GrailsForgeConfiguration.java | Make redirect URI optional when redirect URL is null. |
| grails-forge/gradle/test-config.gradle | Align maxParallelForks with configuredTestParallel. |
| grails-forge/gradle.properties | Bump Shadow plugin version to 8.3.11. |
| grails-domain-class/build.gradle | Remove compileOnly spring-test block. |
| grails-doc/src/en/ref/Tags - GSP/set.adoc | Document type attribute for static GSP compilation. |
| grails-doc/src/en/ref/Database Mapping/type.adoc | Clarify semantics of type: "text" mapping. |
| grails-doc/src/en/guide/theWebLayer/gson/gsonTesting.adoc | Document using grails-views-gson test fixtures. |
| grails-doc/src/en/guide/security/securityPlugins/springSecurity/ui/customization.adoc | Fix plugin i18n bundle path and precedence notes. |
| grails-doc/src/en/guide/security/securityPlugins/springSecurity/cas/introduction.adoc | Update CAS link to Apereo site. |
| grails-doc/src/en/guide/REST/restfulControllers/restControllersStepByStep.adoc | Add PATCH route to REST table. |
| grails-doc/src/en/guide/REST/restfulControllers/extendingRestfulController.adoc | Add PATCH route to REST table. |
| grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/transactions/SessionHolder.java | Expose unmodifiable view of bound sessions. |
| grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/AbstractMappingContext.java | Propagate default nullable into mapping factory. |
| grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/core/connections/ConnectionSourceSettings.groovy | Add defaultIdType setting for portable domains. |
| grails-datasource/build.gradle | Remove compileOnly spring-test block. |
| grails-datamapping-validation/src/main/resources/META-INF/spring/aot.factories | Register constrained-property hints for Spring AOT. |
| grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/PagedResultSpec.groovy | Ignore criteria paging test for Neo4j suite (ordering). |
| grails-datamapping-support/src/main/groovy/org/grails/compiler/gorm/GormTransformer.java | Make transformer ordered with highest precedence. |
| grails-datamapping-core/src/test/resources/META-INF/services/org.grails.datastore.gorm.services.ServiceImplementerAdapter | Add test SPI adapters. |
| grails-datamapping-core/src/test/resources/META-INF/services/org.grails.datastore.gorm.services.ServiceImplementer | Add test SPI implementer. |
| grails-datamapping-core/src/test/groovy/grails/gorm/services/MethodValidationTransformSpec.groovy | Exclude trait datastore accessors from Generated assertion. |
| grails-datamapping-core/src/test/groovy/grails/gorm/services/CompileStaticServiceInjectionSpec.groovy | Remove expectation of datastore field presence. |
| grails-datamapping-core/src/main/resources/META-INF/spring/aot.factories | Register GORM runtime hints. |
| grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/validation/jakarta/MappingContextTraversableResolver.groovy | Skip cascades when cascade validation is disabled. |
| grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transform/OrderedGormTransformation.groovy | Use init() instead of manual AST node type checks. |
| grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/UpdateStringQueryImplementer.groovy | Adjust implementer ordering to prefer update handling. |
| grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/FindOneInterfaceProjectionStringQueryImplementer.groovy | Slight order tweak relative to base implementer. |
| grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormValidateable.groovy | Throw clearer error if no GORM implementation configured. |
| grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/finders/FindByFinder.java | Add ctor supporting DatastoreResolver + MappingContext. |
| grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/AutoTimestampEventListener.java | Add logger for event listener. |
| grails-datamapping-core/build.gradle | Add grails-data-simple to tests. |
| grails-datamapping-core-test/src/test/groovy/org/grails/datastore/gorm/CoreTestSuite.groovy | Add FindByExampleSpec to suite selection. |
| grails-databinding/build.gradle | Remove compileOnly spring-test block. |
| grails-data-simple/build.gradle | Add spock-core for tests. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/ZonedDateTimeToLongConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/StringToPeriodConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/PeriodToStringConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/OffsetTimeToLongConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/OffsetDateTimeToLongConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LongToZonedDateTimeConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LongToOffsetTimeConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LongToOffsetDateTimeConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LongToLocalTimeConverter.groovy | Whitespace + brace formatting. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LongToLocalDateTimeConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LongToLocalDateConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LongToInstantConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LocalTimeToLongConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LocalDateToLongConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/LocalDateTimeToLongConverter.groovy | Formatting tweak. |
| grails-data-neo4j/grails-plugin/src/main/groovy/org/grails/datastore/gorm/neo4j/converters/InstantToLongConverter.groovy | Formatting tweak. |
| grails-data-neo4j/docs/src/docs/asciidoc/gettingStarted/standalone.adoc | Update dependency coordinates. |
| grails-data-neo4j/docs/src/docs/asciidoc/gettingStarted/springBoot.adoc | Update dependency coordinates. |
| grails-data-neo4j/core/src/test/resources/spy.properties | Add spy.properties fixture (license header). |
| grails-data-neo4j/core/src/test/resources/META-INF/services/org.apache.grails.data.testing.tck.base.GrailsDataTckManager | Register Neo4j TCK manager SPI. |
| grails-data-neo4j/core/src/test/groovy/grails/gorm/tests/WithTransactionSpec.groovy | Switch to Neo4j datastore spec + register domains via manager. |
| grails-data-neo4j/core/src/test/groovy/grails/gorm/tests/Pet.groovy | Import shared TCK domain types. |
| grails-data-neo4j/core/src/test/groovy/grails/gorm/tests/PagedResultSpec.groovy | Switch to Neo4j datastore spec + register domain via manager. |
| grails-data-neo4j/core/src/test/groovy/grails/gorm/tests/NullValueEqualSpec.groovy | Switch to Neo4j datastore spec + register domain via manager. |
| grails-data-neo4j/core/src/test/groovy/grails/gorm/tests/ManyToManyQuerySpec.groovy | Switch to Neo4j datastore spec + register domains via manager. |
| grails-data-neo4j/core/src/test/groovy/grails/gorm/tests/cypher/OneToManyCreateSpec.groovy | Mark spec pending with explanatory reason. |
| grails-data-neo4j/core/src/main/resources/META-INF/services/org.grails.datastore.gorm.services.ServiceImplementer | Register Neo4j service implementers. |
| grails-data-neo4j/core/src/main/resources/META-INF/services/org.grails.compiler.gorm.GormEntityTraitProvider | Register Neo4j entity trait provider. |
| grails-data-neo4j/core/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule | Register Neo4j Groovy extension module. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/SessionFlushedEvent.java | Reorder imports. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/proxy/Neo4jProxyFactory.java | Import ordering cleanup. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/mapping/config/RelationshipConfig.groovy | Import/format cleanup. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/mapping/config/NodeConfig.groovy | Fix semicolons/import formatting. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/mapping/config/DynamicToManyAssociation.java | Formatting cleanup. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/mapping/config/DynamicAssociation.java | Add blank line for formatting. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/mapping/config/Attribute.groovy | Import cleanup. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/IdGenerator.java | Move nextId() into interface; clean enum structure. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/engine/Neo4jModificationTrackingEntityAccess.groovy | Add blank line between imports. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/connections/Neo4jConnectionSourceSettingsBuilder.groovy | Import order cleanup. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/config/Settings.java | Formatting cleanup; spacing. |
| grails-data-neo4j/core/src/main/groovy/org/grails/datastore/gorm/neo4j/collection/Neo4jRelationship.groovy | Import cleanup; formatting tweak. |
| grails-data-neo4j/core/src/main/groovy/grails/neo4j/services/Cypher.groovy | Add trailing newline/format cleanup. |
| grails-data-neo4j/core/src/main/groovy/grails/neo4j/Direction.groovy | Formatting cleanup. |
| grails-data-mongodb/spring-data/build.gradle | Add embedded Mongo + flapdoodle for replica set transaction tests. |
| grails-data-mongodb/grails-plugin/src/main/groovy/grails/plugins/mongodb/MongodbGrailsPlugin.groovy | Rename org name; fix issueManagement system casing. |
| grails-data-mongodb/embedded/src/main/java/org/grails/datastore/gorm/mongodb/embedded/RunningEmbeddedMongo.java | Add isRunning() contract. |
| grails-data-mongodb/embedded/src/main/java/org/grails/datastore/gorm/mongodb/embedded/EmbeddedMongoBackend.java | Remove outdated author line. |
| grails-data-mongodb/embedded/build.gradle | Add compileOnly mongo driver for replica set init; keep tests. |
| grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/MongoGormEnhancer.groovy | Register API factory with GormRegistry. |
| grails-data-mongodb/core/build.gradle | Add embedded Mongo + flapdoodle and simple datastore test branch coverage. |
| grails-data-hibernate7/grails-plugin/build.gradle | Add slf4j-simple for test runtime. |
| grails-data-hibernate7/dbmigration/src/test-cli/groovy/org/apache/grails/data/hibernate7/dbmigration/cli/ApplicationContextDatabaseMigrationCommandSpec.groovy | Tighten constraints for migration test domains. |
| grails-data-hibernate7/dbmigration/build.gradle | Remove compileOnly spring-test. |
| grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/SchemaTenantGormEnhancerSpec.groovy | Remove CurrentTenant annotation usage. |
| grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntitySpec.groovy | Add non-null constraint for embedded address. |
| grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java | Propagate default nullable into mapping factory. |
| grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.java | Avoid binding enum collections as basic enum properties. |
| grails-data-hibernate5/grails-plugin/build.gradle | Add slf4j-simple for test runtime. |
| grails-data-hibernate5/dbmigration/src/test-cli/groovy/org/apache/grails/data/hibernate5/dbmigration/cli/ApplicationContextDatabaseMigrationCommandSpec.groovy | Tighten constraints for migration test domains. |
| grails-data-hibernate5/dbmigration/src/main/groovy/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.groovy | Update author metadata. |
| grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormEnhancer.groovy | Register API factory with GormRegistry. |
| grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java | Propagate default nullable into mapping factory. |
| grails-data-graphql/core/src/test/groovy/org/grails/gorm/graphql/types/input/EmbeddedInputObjectTypeBuilderSpec.groovy | Update nullable assertion to match new default behavior. |
| grails-data-graphql/core/src/test/groovy/org/grails/gorm/graphql/SchemaSpec.groovy | Adjust type assertions to match schema type shapes. |
| grails-data-graphql/core/build.gradle | Enable java-test-fixtures; add BOM to fixtures. |
| grails-core/src/test/resources/grails/boot/version-in-a-resource.properties | Add version resource test fixture. |
| grails-core/src/main/resources/META-INF/spring/aot.factories | Register Grails core AOT processors and runtime hints. |
| grails-core/src/main/groovy/org/grails/compiler/injection/GrailsAwareInjectionOperation.java | Sort injectors by order before applying. |
| grails-core/src/main/groovy/org/grails/compiler/injection/DefaultGrailsDomainClassInjector.java | Clarify injector ordering relative to GORM transforms. |
| grails-core/build.gradle | Remove compileOnly spring-test. |
| grails-converters/build.gradle | Remove compileOnly spring-test block. |
| grails-controllers/src/main/resources/META-INF/spring/aot.factories | Register controller runtime hints for Spring AOT. |
| grails-controllers/build.gradle | Add web-common fixtures for tests; remove compileOnly spring-test. |
| grails-common/src/main/groovy/org/apache/grails/common/compiler/GroovyTransformOrder.groovy | Add transform order constant for compiled tag calls. |
| grails-codecs/build.gradle | Remove compileOnly spring-test block. |
| grails-cache/src/main/groovy/grails/plugin/cache/CacheGrailsPlugin.groovy | Clear authorEmail metadata. |
| grails-bom/micronaut/build.gradle | Remove explicit Log4j BOM import. |
| grails-bom/hibernate7/build.gradle | Remove explicit Log4j BOM import. |
| grails-bom/hibernate7-micronaut/build.gradle | Remove explicit Log4j BOM import. |
| grails-bom/hibernate5/build.gradle | Remove explicit Log4j BOM import. |
| grails-bom/hibernate5-micronaut/build.gradle | Remove explicit Log4j BOM import. |
| grails-bom/base/build.gradle | Remove explicit Log4j BOM import; rely on platform iteration. |
| grails-async/plugin/build.gradle | Add web-common fixtures for tests. |
| gradle/test-config.gradle | Add onlyNeo4jTests flag; fix parallel setting reference. |
| gradle/publish-root-config.gradle | Add neo4j-bom and quartz projects to published list. |
| gradle/mongodb-test-config.gradle | Propagate mongodbContainerVersion into test JVM when present. |
| gradle/mongodb-forked-test-config.gradle | Fix parallel setting reference; propagate mongodbContainerVersion. |
| gradle/grails-data-tck-config.gradle | Add only/skip Neo4j test selection logic. |
| gradle.properties | Add geantyrefVersion property. |
| etc/bin/Dockerfile | Bump Liberica JDK patch version. |
| end-to-end/settings.gradle | Add taglib-index-incremental end-to-end project. |
| end-to-end/README.md | Document new taglib index incremental suite. |
| DEVELOPMENT.md | Document onlyNeo4jTests/skipNeo4jTests flags. |
| build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/PublishPlugin.groovy | Add emeritus contributor entry. |
| .sdkmanrc | Bump pinned Java patch version. |
| .gitignore | Ignore generated Neo4j BOM docs file. |
| .github/workflows/release-publish-docs.yml | Bump Java patch version for docs publishing workflow. |
| .github/workflows/codeql.yml | Update CodeQL action SHAs. |
| .github/scripts/groovy-snapshot-canary-build.init.gradle | Update comments and referenced init-script name. |
| .git-blame-ignore-revs | Add quartz import reformat commit to ignore list. |
Suppressed comments (2)
grails-bom/base/build.gradle:57
- The Log4j BOM needs to be imported before Spring Boot’s BOM so Maven consumers keep the Log4j family pinned to the intended secure version (see dependencies.gradle combinedPlatforms comment). Importing Spring Boot first can allow its older Log4j constraints to win for Maven users.
grails-bom/hibernate5/build.gradle:58 - This BOM imports Spring Boot’s BOM after importing grails-bom. For Maven consumers, import order can allow Spring Boot’s older Log4j constraints to override the intended Log4j pin; other build logic (dependencies.gradle combinedPlatforms) relies on Log4j’s BOM being imported ahead of Spring Boot to keep the secure version effective.
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
22
to
+24
| import grails.gorm.services.Service | ||
| import grails.gorm.transactions.Transactional | ||
| import org.springframework.beans.factory.annotation.Autowired |
Comment on lines
+4
to
+6
| static triggers = { | ||
| simple repeatInterval: 5000l // execute job once in 5 seconds | ||
| } |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 9.0.x #16277 +/- ##
===================================================
- Coverage 53.1045% 30.1329% -22.9715%
+ Complexity 19363 517 -18846
===================================================
Files 2081 81 -2000
Lines 99018 4739 -94279
Branches 17375 817 -16558
===================================================
- Hits 52583 1428 -51155
+ Misses 38875 3068 -35807
+ Partials 7560 243 -7317 🚀 New features to boost your workflow:
|
✅ All tests passed ✅🏷️ Commit: 8c47f15 Learn more about TestLens at testlens.app/docs. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Merge current
8.1.x(including the8.0.xline from #16276) into9.0.x.This brings the Forge Gradle 9 Shadow
8.3.11pin and other already-landed 8.0/8.1 work onto the Groovy 6 line.Conflict handling kept 9.0-specific Groovy 6 pins and the functional hanging-cell CI workaround, while restoring 8.1 CAS/Neo4j jobs, MongoDB driver-family BOM constraints, and the Neo4j BOM custom versions.
Local Forge validation from
grails-forge/::grails-forge-web-netty:shadowDistTarand:grails-forge-web-netty:awsElasticBeanstalksucceededapp.jar,Procfile,start.sh, and.platform/nginx/conf.d/proxy.confMain-Class: org.grails.forge.netty.ApplicationContributor Checklist
Issue and Scope
7.0.x): Bug fixes only. No new features or API changes.7.1.x): New features are welcome, but breaking existing APIs must be avoided.8.0.x): Reserved for major changes. Breaking API changes are permitted.Code Quality
./gradlew build --rerun-tasks../gradlew codeStyleand resolved any violations. See Code Style for details.Licensing and Attribution
Documentation
Generative AI (Cursor Grok 4.6) was used to complete the merge, resolve conflicts, and run validation. Oracle reviewed the shipping diff as GREEN; Codex found no blocking regressions in the conflict resolutions.