You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by jd...@apache.org on 2026/10/01 08:52:43 UTC

(grails-core) 01/01: Merge branch '8.1.x' into 9.0.x

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

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

commit 4f9c78138a3b3762441bccc713fa6701161b6446
Merge: 3ee6bdc569 1b80f632be
Author: James Daugherty <jd...@jdresources.net>
AuthorDate: Thu Oct 1 04:08:38 2026 -0400

    Merge branch '8.1.x' into 9.0.x

 .github/workflows/build-health.yml                 | 142 ++++
 .github/workflows/coverage.yml                     |   2 +-
 .github/workflows/end-to-end.yml                   |   2 +-
 .github/workflows/forge-deploy-aws.yml             |   2 +-
 .github/workflows/gradle.yml                       | 106 ++-
 .github/workflows/groovy-snapshot-canary.yml       |   4 +-
 .github/workflows/rat.yml                          |   2 +-
 .github/workflows/release-notes.yml                | 145 +++-
 .github/workflows/release.yml                      |  10 +-
 .github/workflows/sitemesh2.yml                    |   4 +-
 AGENTS.md                                          |  14 +-
 build-logic/README.md                              |   2 +
 build-logic/gradle.properties                      |   2 +
 build-logic/plugins/build.gradle                   |   5 -
 .../buildsrc/GrailsRepoSettingsPlugin.groovy       |   9 +
 .../buildsrc/GrailsRepoSettingsPluginSpec.groovy   | 119 +++
 build-logic/settings.gradle                        |   6 +
 build-logic/vulnerability-scan/build.gradle        |  48 ++
 .../buildsrc/scan}/OssIndexAuditThrottle.groovy    |   2 +-
 .../buildsrc/scan}/VulnerabilityScanPlugin.groovy  |   2 +-
 dependencies.gradle                                |   4 +-
 gradle.properties                                  |   9 +
 gradle/dependency-analysis.settings.gradle         |  99 +++
 gradle/rat-root-config.gradle                      |   1 +
 grails-console/build.gradle                        |   7 +-
 grails-data-hibernate5/boot-plugin/build.gradle    |   2 -
 .../HibernateGormAutoConfiguration.groovy          |   3 +-
 .../gorm/mongo/DisjunctionQuerySpec.groovy         |   2 -
 grails-data-mongodb/gson-templates/build.gradle    |   3 +
 .../gorm/tests/HasManyInheritanceSpec.groovy       |   3 +-
 .../tests/multitenancy/MultiTenancySpec.groovy     |   3 +-
 .../datastore/gorm/DefaultGormApiFactory.groovy    |  24 +-
 .../org/grails/datastore/gorm/GormEnhancer.groovy  |  24 +-
 .../gorm/finders/AbstractFindByFinder.java         |  69 --
 .../datastore/gorm/finders/AbstractFinder.java     |  86 --
 .../datastore/gorm/finders/CountByFinder.java      |  91 ---
 .../grails/datastore/gorm/finders/CountFinder.java | 157 ++++
 .../datastore/gorm/finders/DynamicFinder.java      | 359 ++++-----
 .../gorm/finders/DynamicFinderInvocation.java      |  12 +-
 .../gorm/finders/FindAllByBooleanFinder.java       |  56 --
 .../datastore/gorm/finders/FindAllByFinder.java    |  71 --
 .../gorm/finders/FindByBooleanFinder.java          |  51 --
 .../datastore/gorm/finders/FindByFinder.java       |  45 --
 .../gorm/finders/FindOrCreateByFinder.java         | 117 ---
 .../datastore/gorm/finders/FindOrSaveByFinder.java |  53 --
 .../datastore/gorm/finders/FinderGrammar.java      |  65 ++
 .../datastore/gorm/finders/FinderSupport.java      |  78 ++
 .../datastore/gorm/finders/ListOrderByFinder.java  | 133 ++--
 .../datastore/gorm/finders/ListResultFinder.java   | 134 ++++
 .../datastore/gorm/finders/MethodExpression.java   |  64 +-
 .../datastore/gorm/finders/SingleResultFinder.java | 245 ++++++
 .../datastore/gorm/proxy/GroovyProxyFactory.groovy |  10 +-
 .../gorm/proxy/ProxyInstanceMetaClass.java         | 170 ++--
 .../query/criteria/AbstractDetachedCriteria.groovy |   3 +-
 .../datastore/gorm/finders/CountFinderSpec.groovy  | 261 +++++++
 ...c.groovy => DatastoreResolverFinderSpec.groovy} |  66 +-
 .../gorm/finders/DynamicFinderCoverageSpec.groovy  |  10 +-
 .../finders/DynamicFinderInvocationSpec.groovy     |  67 ++
 .../gorm/finders/DynamicFinderSpec.groovy          | 869 ++++++++++++++++++++-
 .../finders/FindOrSaveByDynamicFinderSpec.groovy   |  63 ++
 .../gorm/finders/FindOrSaveByFinderSpec.groovy     |  88 ---
 .../gorm/finders/FinderSupportSpec.groovy          | 123 +++
 .../datastore/gorm/finders/FinderTestEntity.groovy |  49 ++
 .../gorm/finders/ListOrderByFinderSpec.groovy      | 210 +++++
 .../gorm/finders/ListResultFinderSpec.groovy       | 222 ++++++
 .../gorm/finders/MethodExpressionSpec.groovy       | 574 ++++++++++++++
 .../gorm/finders/SingleResultFinderSpec.groovy     | 412 ++++++++++
 .../gorm/proxy/GroovyProxyFactorySpec.groovy       | 385 +++++++++
 .../gorm/proxy/ProxyInstanceMetaClassSpec.groovy   | 475 +++++++++++
 .../org/grails/gorm/rx/api/RxGormStaticApi.groovy  |  24 +-
 .../grails/gorm/rx/finders/CountByFinder.groovy    |  53 --
 .../gorm/rx/finders/FindAllByBooleanFinder.groovy  |  42 -
 .../grails/gorm/rx/finders/FindAllByFinder.groovy  |  59 --
 .../gorm/rx/finders/FindByBooleanFinder.groovy     |  42 -
 .../org/grails/gorm/rx/finders/FindByFinder.groovy |  51 --
 .../gorm/rx/finders/FindOrCreateByFinder.groovy    |  92 ---
 .../gorm/rx/finders/FindOrSaveByFinder.groovy      |  40 -
 .../grails/gorm/rx/finders/RxCountFinder.groovy    |  98 +++
 .../gorm/rx/finders/RxListResultFinder.groovy      | 115 +++
 .../gorm/rx/finders/RxSingleResultFinder.groovy    | 195 +++++
 .../gorm/rx/finders/CountByFinderSpec.groovy       | 140 ----
 .../rx/finders/FindAllByBooleanFinderSpec.groovy   |  96 ---
 .../gorm/rx/finders/FindAllByFinderSpec.groovy     | 146 ----
 .../gorm/rx/finders/FindByBooleanFinderSpec.groovy |  86 --
 .../grails/gorm/rx/finders/FindByFinderSpec.groovy | 133 ----
 .../rx/finders/FindOrCreateByFinderSpec.groovy     | 185 -----
 .../gorm/rx/finders/FindOrSaveByFinderSpec.groovy  | 114 ---
 .../gorm/rx/finders/RxCountFinderSpec.groovy       | 172 ++++
 .../gorm/rx/finders/RxListResultFinderSpec.groovy  | 246 ++++++
 .../rx/finders/RxSingleResultFinderSpec.groovy     | 377 +++++++++
 .../data/testing/tck/tests/GroovyProxySpec.groovy  |  23 +
 grails-doc/src/en/guide/deployment.adoc            |  27 +-
 .../en/guide/deployment/deploymentContainer.adoc   |  52 +-
 .../guide/deployment/deploymentLayeredBuilds.adoc  | 245 ++++++
 .../en/guide/deployment/deploymentStandalone.adoc  | 116 ++-
 .../src/en/guide/deployment/deploymentTasks.adoc   | 197 ++++-
 grails-doc/src/en/guide/index.adoc                 |  25 +-
 grails-doc/src/en/guide/toc.yml                    |   5 +-
 .../src/en/guide/upgrading/upgrading80x.adoc       |  37 +
 grails-forge/gradle.properties                     |   2 +
 grails-forge/settings.gradle                       |   3 +
 grails-gradle/gradle.properties                    |   2 +
 grails-gradle/plugins/build.gradle                 |   3 +
 .../gradle/plugin/core/GrailsGradlePlugin.groovy   |  69 +-
 .../plugin/core/GrailsPluginGradlePlugin.groovy    |   4 +
 .../plugin/core/AssetClasspathPackagingSpec.groovy |  47 --
 .../core/GrailsAssetPipelineLayoutSpec.groovy      |  68 ++
 .../GrailsPluginGradlePluginAstClassesSpec.groovy  |  46 ++
 .../asset-classpath-packaging/build.gradle         |  42 -
 .../asset-classpath-packaging/settings.gradle      |   1 -
 .../plugin-ast-classes-dirs/build.gradle           |  12 +
 .../gradle.properties                              |   1 -
 .../grails-app/conf/application.yml                |   0
 .../plugin-ast-classes-dirs/settings.gradle        |   1 +
 grails-gradle/settings.gradle                      |   3 +
 settings.gradle                                    |   3 +
 116 files changed, 7538 insertions(+), 2757 deletions(-)

diff --cc .github/workflows/gradle.yml
index e1ce086b8d,e2982bbbe4..cc068dc9f7
--- a/.github/workflows/gradle.yml
+++ b/.github/workflows/gradle.yml
@@@ -494,61 -490,23 +494,61 @@@ jobs
            cache-disabled: true # dependency jars are cached by the explicit branch-keyed step above
            develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY  }}
        - name: "🔍 Setup TestLens"
-         uses: testlens-app/setup-testlens@3f82d2dc6cd5c03f02ce5f7885a21195d85f8d14 # v1.9.3
+         uses: testlens-app/setup-testlens@d29a2be31512b3aeda3adcef09fbe0d55af90c51 # v1.9.4
        - name: "🏃 Run Functional Tests"
 -        run: >
 -          ./gradlew ${{ matrix.gradle_task }}
 -          --continue
 -          --rerun-tasks
 -          --stacktrace
 -          -PgrailsIndy=${{ matrix.indy }}
 -          -PonlyFunctionalTests
 -          -PskipCodeStyle
 -          -PskipHibernate5Tests
 -          -PskipHibernate7Tests
 -          -PskipMongodbTests
 -          -PskipNeo4jTests
 -          -PskipSpringSecurityTests
 -          -PskipRedisTests
 -          ${{ matrix.shard_arguments }}
 +        # The known hanging cell finishes tests, prints the wrapper:test /
 +        # aggregate-report tail, then hangs before buildFinished. Timeout plus
 +        # that end-of-walk log and green XML is treated as success.
 +        run: |
 +          hanging=0
 +          if [ "${{ matrix.java }}" = "21" ] && [ "${{ matrix.indy }}" = "true" ] && [ "${{ matrix.gradle_task }}" = "testShard" ]; then
 +            hanging=1
 +            limit=45m
 +          else
 +            limit=70m
 +          fi
 +          rm -f build/ci-build-finished.txt build/ci-build-finished.txt.tmp
 +          set +e
 +          timeout --kill-after=30s "$limit" ./gradlew ${{ matrix.gradle_task }} \
 +            --init-script .github/ci-exit-after-build.init.gradle \
 +            --no-daemon \
 +            --continue \
 +            --rerun-tasks \
 +            --stacktrace \
 +            -PgrailsIndy=${{ matrix.indy }} \
 +            -PonlyFunctionalTests \
 +            -PskipCodeStyle \
 +            -PskipHibernate5Tests \
 +            -PskipHibernate7Tests \
 +            -PskipMongodbTests \
 +            -PskipNeo4jTests \
 +            -PskipSpringSecurityTests \
 +            -PskipRedisTests \
 +            ${{ matrix.shard_arguments }} \
 +            2>&1 | tee gradle-functional.log
 +          code=${PIPESTATUS[0]}
 +          set -e
 +          if [ "$code" -eq 0 ]; then
 +            exit 0
 +          fi
 +          marker="build/ci-build-finished.txt"
 +          if [ "$hanging" -eq 1 ] && { [ "$code" -eq 124 ] || [ "$code" -eq 137 ]; }; then
 +            if [ -f "$marker" ] && [ "$(cat "$marker")" = "SUCCESS" ]; then
 +              echo "Known hanging cell: SUCCESS sentinel after teardown hang."
 +              exit 0
 +            fi
 +            if grep -qE '> Task .+ FAILED' gradle-functional.log; then
 +              echo "A Gradle task FAILED; not recovering from teardown hang."
 +              exit 1
 +            fi
 +            if grep -q '> Task :grails-wrapper:test' gradle-functional.log \
 +              && grep -q 'Markdown aggregate test report:' gradle-functional.log \
 +              && python3 .github/ci-check-functional-reports.py; then
 +              echo "Known hanging cell: suite walked to grails-wrapper:test with green XML; teardown hang treated as success."
 +              exit 0
 +            fi
 +          fi
 +          exit "$code"
        - name: "🗄️ Save dependency jar cache"
          if: ${{ success() && matrix.cache_writer && steps.dependency-cache.outputs.cache-hit != 'true' }}
          uses: actions/cache/save@v6.1.0