This is an automated email from the ASF dual-hosted git repository.

jdaugherty pushed a commit to branch 8.0.x
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit f88784b5db279bdca570eab7869f01ee07bfc8cf
Merge: 75e5ff63d7 1b67ebd322
Author: James Daugherty <[email protected]>
AuthorDate: Wed Nov 26 08:56:44 2025 -0500

    Merge branch '7.1.x' into 8.0.x

 .github/scripts/releaseDistributions.sh            |  15 +-
 .github/scripts/releaseJarFiles.sh                 |   9 +-
 .github/vote_templates/announce.txt                |  14 +-
 .github/vote_templates/staged.txt                  |  20 +-
 .github/vote_templates/vote_succeeded.txt          |  12 +
 .github/workflows/release.yml                      | 685 +++++++++++----------
 .sdkmanrc                                          |   2 +-
 RELEASE.md                                         |  36 +-
 .../apache/grails/buildsrc/PublishPlugin.groovy    |   2 +-
 dependencies.gradle                                |  16 +-
 etc/bin/Dockerfile                                 |   4 +-
 etc/bin/verify.sh                                  |  29 +-
 .../groovy/org/grails/config/NavigableMap.groovy   |  83 +--
 .../src/main/resources/grails-banner.txt           |   3 +-
 .../grails/config/SpringProfileExcludeSpec.groovy  | 173 ++++++
 grails-cache/build.gradle                          |   5 +-
 .../ConvertersConfigurationInitializer.java        |  26 +-
 .../converters/marshaller/json/EnumMarshaller.java |   4 +
 .../marshaller/json/GenericJavaBeanMarshaller.java |   1 +
 .../marshaller/json/GroovyBeanMarshaller.java      |   1 +
 ...umMarshaller.java => SimpleEnumMarshaller.java} |  20 +-
 .../converters/marshaller/xml/EnumMarshaller.java  |   4 +
 .../marshaller/xml/GenericJavaBeanMarshaller.java  |   1 +
 .../marshaller/xml/GroovyBeanMarshaller.java       |   1 +
 ...umMarshaller.java => SimpleEnumMarshaller.java} |  12 +-
 .../marshaller/json/StaticPropertySpec.groovy      |  68 ++
 .../src/main/groovy/grails/boot/GrailsApp.groovy   |   5 +-
 .../main/groovy/grails/boot/GrailsBanner.groovy    | 380 ++++++++++++
 .../additional-spring-configuration-metadata.json  |  37 ++
 grails-data-hibernate5/dbmigration/build.gradle    |   1 -
 .../advancedGORMFeatures/ormdsl/caching.adoc       |  16 +-
 grails-data-hibernate5/grails-plugin/build.gradle  |   1 -
 grails-data-mongodb/grails-plugin/build.gradle     |   5 +-
 .../examples/grails3-neo4j-hibernate/build.gradle  |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../examples/grails3-neo4j/build.gradle            |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../datastore/gorm/CustomAutoTimestampSpec.groovy  |  77 ++-
 .../grails/gorm/annotation/AutoTimestamp.java      |   2 +
 .../{AutoTimestamp.java => CreatedBy.java}         |  41 +-
 .../{AutoTimestamp.java => CreatedDate.java}       |  19 +-
 .../{AutoTimestamp.java => LastModifiedBy.java}    |  41 +-
 .../{AutoTimestamp.java => LastModifiedDate.java}  |  19 +-
 .../gorm/events/AutoTimestampEventListener.java    | 124 +++-
 .../datastore/gorm/timestamp/AuditorAware.java     |  58 ++
 .../AbstractMethodDecoratingTransformation.groovy  |   2 -
 .../eval/DefaultConstraintEvaluator.java           |  26 +-
 .../registry/DefaultValidatorRegistry.groovy       |   5 +-
 .../mapping/config/AuditMetadataType.java          |  58 ++
 .../datastore/mapping/config/Property.groovy       |   6 +
 .../grails/datastore/mapping/config/Settings.java  |   2 +
 .../connections/ConnectionSourceSettings.groovy    |   5 +
 .../mapping/model/AuditMetadataUtils.java          | 186 ++++++
 grails-dependencies/assets/build.gradle            |   1 +
 .../guide/cache/cacheUsage/cacheConfiguration.adoc |   2 +-
 .../en/guide/cache/cacheUsage/cacheUnitTests.adoc  |   4 +-
 .../gradleBuild/gradleDependencies.adoc            |   1 +
 .../guide/conf/applicationClass/customizing.adoc   | 125 ++++
 grails-doc/src/en/guide/introduction/whatsNew.adoc |   4 +-
 .../introduction/whatsNew/dependencyUpgrades.adoc  |   2 +-
 .../en/guide/testing/unitTesting/annotations.adoc  |   6 +-
 .../unitTesting/unitTestingDomainClasses.adoc      |  10 +-
 .../unitTesting/unitTestingUrlMappings.adoc        |   2 +-
 .../guide/theWebLayer/gson/jsonInstallation.adoc   |  19 +-
 grails-doc/src/en/guide/theWebLayer/gsp.adoc       |   2 +-
 .../src/en/guide/upgrading/upgrading60x.adoc       | 566 ++++++++++++++++-
 .../plugins/domain/DomainClassGrailsPlugin.groovy  |  14 +
 grails-fields/build.gradle                         |   2 -
 .../plugin/formfields/FormFieldsTagLib.groovy      |   3 +-
 .../scaffolding/model/DomainModelService.groovy    |   1 +
 .../model/DomainModelServiceImpl.groovy            |  82 ++-
 .../forge/feature/assetPipeline/AssetPipeline.java |   5 +
 .../build/gradle/templates/buildGradle.rocker.raw  |   7 -
 .../templates/gradleWrapperProperties.rocker.raw   |   5 -
 .../grails/templates/urlMappings.rocker.raw        |   1 +
 .../feature/test/GebWithWebDriverBinaries.java     |   9 +-
 .../grails/forge/io/FileSystemOutputHandler.java   |  67 +-
 .../main/java/org/grails/forge/io/OutputUtils.java |  61 ++
 .../java/org/grails/forge/io/ZipOutputHandler.java |  52 +-
 .../resources/assets/javascripts/application.js    |   4 +-
 .../resources/assets/stylesheets/application.css   |   6 +-
 .../src/main/resources/gsp/index.gsp               |   2 +-
 .../grails-forge-core/src/main/resources/pom.xml   |  14 +-
 .../test/GebWithWebDriverBinariesSpec.groovy       |   4 +-
 .../org/grails/forge/create/CreateAppSpec.groovy   |   2 +-
 grails-geb/build.gradle                            |   1 -
 .../testFixtures/resources/docker-java.properties  |   2 +
 .../model/src/main/groovy/grails/io/IOUtils.groovy |   5 +-
 .../main/groovy/grails/util/BuildSettings.groovy   |   2 +-
 .../src/test/groovy/grails/io/IOUtilsSpec.groovy   |  11 +-
 .../gradle/plugin/core/GrailsExtension.groovy      |  16 +
 .../gradle/plugin/core/GrailsGradlePlugin.groovy   |  74 ++-
 .../plugin/core/GrailsPluginGradlePlugin.groovy    |   7 +-
 grails-gsp/grails-sitemesh3/build.gradle           |   2 -
 grails-gsp/plugin/build.gradle                     |   2 -
 grails-gsp/spring-boot/build.gradle                |   4 +-
 grails-profiles/web/profile.yml                    |   2 +
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   6 +-
 .../UrlMappings.groovy                             |   1 +
 .../web/skeleton/grails-app/views/index.gsp        |   2 +-
 .../grails/rest/render/ContainerRenderer.groovy    |   2 +-
 .../main/groovy/grails/rest/render/Renderer.groovy |   2 +-
 .../rest/render/errors/VndErrorJsonRenderer.groovy |   3 +-
 .../rest/render/errors/VndErrorXmlRenderer.groovy  |   3 +-
 .../grails/rest/render/hal/HalJsonRenderer.groovy  |   2 +-
 .../render/util/AbstractLinkingRenderer.groovy     |   4 +-
 .../rest/render/json/DefaultJsonRenderer.groovy    |   2 +-
 grails-scaffolding/build.gradle                    |   8 +-
 .../plugin/scaffolding/DomainServiceLocator.java   |  29 +-
 .../grails/plugin/scaffolding/GormService.groovy   |  13 +-
 .../scaffolding/ScaffoldingGrailsPlugin.groovy     |   1 +
 .../scaffolding/ScaffoldingViewResolver.groovy     | 165 +++--
 .../scaffolding/ScaffoldingViewResolverSpec.groovy | 273 ++++++++
 grails-test-examples/app1/build.gradle             |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 grails-test-examples/app2/build.gradle             |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../BasicCachingServiceNoCacheManagerSpec.groovy   |   2 +
 .../groovy/com/demo/BasicCachingServiceSpec.groovy |   2 +
 grails-test-examples/demo33/build.gradle           |   1 +
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   8 +-
 .../grails-app/controllers/demo/UrlMappings.groovy |   2 +
 .../demo33/grails-app/domain/demo/Person.groovy    |   3 +-
 .../groovy/demo/DependencyInjectionSpec.groovy     |   2 +
 .../src/test/groovy/demo/DataTestTraitSpec.groovy  |   2 +
 .../demo/GetDomainClassesToMockMethodSpec.groovy   |   2 +
 .../test/groovy/demo/PersonControllerSpec.groovy   |   2 +
 .../demo33/src/test/groovy/demo/PersonSpec.groovy  |   2 +
 grails-test-examples/geb-gebconfig/build.gradle    |   1 +
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   8 +-
 grails-test-examples/geb/build.gradle              |   1 +
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   8 +-
 .../org/demo/spock/PerTestRecordingSpec.groovy     |  48 +-
 grails-test-examples/gsp-layout/build.gradle       |   1 +
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   8 +-
 grails-test-examples/gsp-sitemesh3/build.gradle    |   1 +
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   8 +-
 .../grails-database-per-tenant/build.gradle        |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../hibernate5/grails-hibernate/build.gradle       |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../grails-partitioned-multi-tenancy/build.gradle  |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../grails-schema-per-tenant/build.gradle          |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../hibernate5/issue450/build.gradle               |   1 +
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   8 +-
 grails-test-examples/hyphenated/build.gradle       |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 grails-test-examples/issue-11102/build.gradle      |   1 +
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   8 +-
 .../build.gradle                                   |  25 +-
 .../issue-15228/grails-app/conf/application.yml    |  58 ++
 .../issue-15228/grails-app/conf/logback.xml        |  39 ++
 .../issue15228/app/AppController.groovy}           |  26 +-
 .../controllers/issue15228/app/UrlMappings.groovy} |  13 +-
 .../init/issue15228/app}/Application.groovy        |   6 +-
 .../grails-app/views/app/normalView.gson}          |  12 +-
 .../grails-app/views/errors/_errors.gson}          |  30 +-
 .../_otherValidateableObject.gson}                 |  12 +-
 .../issue11767/app/GsonViewRespondSpec.groovy      | 104 ++++
 .../issue15228/app/OtherValidateableObject.groovy} |  14 +-
 .../issue15228/app/ValidateableObject.groovy}      |  14 +-
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   8 +-
 grails-test-examples/mongodb/base/build.gradle     |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../mongodb/database-per-tenant/build.gradle       |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../mongodb/gson-templates/build.gradle            |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../mongodb/hibernate5/build.gradle                |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 grails-test-examples/namespaces/build.gradle       |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 grails-test-examples/plugins/exploded/build.gradle |   1 -
 .../plugins/issue11005/build.gradle                |   1 -
 .../plugins/loadafter/build.gradle                 |   1 -
 .../plugins/loadfirst/build.gradle                 |   1 -
 .../plugins/loadsecond/build.gradle                |   1 -
 grails-test-examples/scaffolding/build.gradle      |   1 +
 .../grails-app/assets/javascripts/application.js   |   4 +-
 .../grails-app/assets/stylesheets/application.css  |   6 +-
 .../grails-app/domain/com/example/User.groovy      |  15 +-
 .../domain/com/example/community/User.groovy       |  15 +-
 .../grails-app/init/com/example/Application.groovy |   7 +
 .../com/example/SpringSecurityAuditorAware.groovy  |  50 ++
 .../views-functional-tests-plugin/build.gradle     |   2 -
 .../views-functional-tests/build.gradle            |   1 +
 .../grails-app/assets/javascripts/application.js   |   2 +-
 .../grails-app/assets/stylesheets/application.css  |   4 +-
 .../groovy/functional/tests/BookSpec.groovy        |  27 +-
 .../rest/render/xml/DefaultXmlRendererSpec.groovy  |   3 -
 .../web/converters/JSONConverterTests.groovy       |  24 +
 .../grails/testing/spock/OnceBeforeSpec.groovy     |   2 +
 .../groovy/grails/testing/spock/RunOnceSpec.groovy |   2 +
 grails-testing-support-web/build.gradle            |   1 +
 .../views/mvc/renderer/DefaultViewRenderer.groovy  |   2 +-
 grails-views-gson/build.gradle                     |   2 -
 .../AbstractJsonViewContainerRenderer.groovy       |  11 +-
 grails-views-markup/build.gradle                   |   2 -
 .../grails/web/mapping/ResponseRedirector.groovy   |   8 +-
 .../groovy/grails/web/mapping/UrlMappingData.java  |   5 +
 .../grails/web/mapping/DefaultUrlMappingData.java  |  24 +-
 .../org/grails/web/mapping/RegexUrlMapping.java    |   9 +
 .../web/mapping/ResponseCodeMappingData.java       |   5 +
 .../web/mapping/RedirectNonAbsoluteURISpec.groovy  |  22 +
 .../UrlMappingsWithGreedyExtensionSpec.groovy      | 230 +++++++
 settings.gradle                                    |   2 +
 231 files changed, 4193 insertions(+), 1016 deletions(-)

diff --cc grails-doc/src/en/guide/introduction/whatsNew.adoc
index 54bdb2863d,97287f0a08..20b2ea8712
--- a/grails-doc/src/en/guide/introduction/whatsNew.adoc
+++ b/grails-doc/src/en/guide/introduction/whatsNew.adoc
@@@ -21,15 -21,76 +21,13 @@@ This section covers all the new feature
  
  === Overview
  
- Grails {GrailsVersion} is a major release that includes new features, 
improvements, and dependency upgrades.
 -Grails 7 is a major release that includes new features, improvements, and 
dependency upgrades.
++Grails 8 is a major release that includes new features, improvements, and 
dependency upgrades.
  This release focuses on enhancing the developer experience, improving 
performance, and ensuring compatibility with the latest technologies.
  
 -For detailed information on how to upgrade to Grails 7, including major 
dependency changes, please see the xref:upgrading#upgrading60x[Upgrading from 
Grails 6 to Grails 7] section.
 +For detailed information on how to upgrade to Grails 8, including major 
dependency changes, please see the xref:upgrading#upgrading70x[Upgrading from 
Grails 7 to Grails 8] section.
  Notable new features are included below.
  
 -=== External Configuration
 +==== No New Features at this time
  
 -The https://github.com/sbglasius/external-config[external configuration 
plugin] is now integrated into Grails.
 -See the xref:conf.adoc#externalConfiguration[Configuration] section for 
details.
 +No new features at this time
  
 -=== Ubiquitous Containerized Browser Testing with Geb
 -
 -The https://github.com/apache/grails-core/tree/HEAD/grails-geb#readme[Grails 
Geb Plugin] has received a significant update, introducing test fixtures that 
enable ubiquitous containerized browser testing.
 -
 -This new approach is now the recommended way to write functional tests in 
Grails. However, the previous method using WebDriver binaries remains supported 
for backward compatibility.
 -
 -==== Key Features
 -
 -By extending your test classes with `ContainerGebSpec`, your tests will 
automatically leverage a containerized browser provided by 
https://java.testcontainers.org/[Testcontainers]. This setup eliminates the 
need for managing browser versions and ensures consistent test environments.
 -
 -==== Requirements
 -
 -To use `ContainerGebSpec`, ensure that you have a compatible container 
runtime installed. Supported options include:
 -
 -- **Docker Desktop**
 -- **OrbStack** (macOS only)
 -- **Rancher Desktop**
 -- **Podman Desktop**
 -- **Colima** (macOS and Linux)
 -
 -==== How It Works
 -
 -Once a compatible container runtime is installed, no additional configuration 
is needed. Simply extend your test classes with `ContainerGebSpec` (instead of 
`GebSpec`), and the following will happen:
 -
 -1. A container will be started automatically when you run your integration 
tests.
 -2. The container will be configured to launch a browser capable of accessing 
your application under test.
 -
 -With this setup, you gain the benefits of containerized testing, such as 
isolation, reproducibility, and reduced setup complexity.
 -
 -==== formActionSubmit tag
 -
 -A new tag `formActionSubmit` has been added to replace `actionSubmit`.
 -Dispatching actions via a parameter name on a form submit will be removed in 
a future version of grails.
 -See ticket https://github.com/grails/grails-gsp/issues/551[#551] for details.
 -
 -==== @Scaffold support for Controllers and Services
 -
 -The `@Scaffold` annotation was added to customize scaffolding generation for 
controllers and services.
 -
 -==== Bootstrap 5.3.3 support
 -
 -Bootstrap 5.3.3 support.
 -Scaffolding and Fields tags now optionally support boostrap classes.
 -
 -==== Prioritization of AutoConfiguration over bean overriding.
 -
 -The core dependencies of Grails are moving to using `@Configuration` to 
better integrate with the Spring Boot ecosystem.
 -Please note that this does mean that some beans are now initialized earlier 
in the application context lifecycle.
 -
 -==== Significant Dependency Removals
 -
 -With the removal of Micronaut, and the fixes to the asset pipeline plugin, 
Grails build sizes should now be significantly reduced.
 -
 -==== g:form & CSRF protection
 -
 -The `g:form` tag now automatically provides csrf protection when Spring 
Security CSRF is enabled.
--
 -==== Grails Banner versions and customization (Grails 7.1+)
--
 -A Grails banner was introduced in Grails 7 that is displayed on application 
startup.
 -From Grails 7.1 onwards, this banner now shows versions of foundational 
dependencies
 -and can be xref:conf.adoc#customizing-the-banner[customized].

Reply via email to