Skip to content

Commit dc4296b

Browse files
committed
Merge remote-tracking branch 'upstream/7.0.x' into 7.0.x
# Conflicts: # UPGRADE7.md
2 parents 651bf5a + f56513b commit dc4296b

File tree

27 files changed

+219
-232
lines changed

27 files changed

+219
-232
lines changed

.sdkmanrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
java=17.0.13-librca
2-
gradle=8.12
1+
java=17.0.14-librca
2+
gradle=8.12.1
33

RELEASE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Grails Core Release Process
22

3-
1. Perform the release of any other dependent library and update the version in `gradle.properties`/`grails-bom/plugins.properties`/`grails-bom/profiles.properties`
3+
1. Perform the release of any other dependent library and update the version in `gradle.properties`/`grails-bom/plugins.properties`
44
1. Ensure you have the latest changes locally `git pull`
55
1. Ensure all changes from previous branches are merged up `git merge ...`
66
1. Ensure there are no snapshot dependencies

UPGRADE7.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Experienced while upgrading modules for Grails 7
2525
}
2626
- The `jakarta` package switch means that older libraries using `javax` will need to be updated to use the correct namespace. The side effect of this change is most grails plugins will likely need updated to be compatible with Grails 7.
2727
- When migrating a new project to Grails 7, it's advised to generate a stock 7.0 app from [start.grails.org](https://start.grails.org) and compare the project with a grails app generated from the same grails version that your application uses. This helps catch the dependency clean up that has occurred. Including the additions of new dependencies. Note: due to an issue with project resolution the `grails-bom` will need explicitly imported in buildSrc or any project that does not apply the grails gradle plugins (grails-plugin, grails-web, or grails-gsp). By default, the grails gradle plugins (grails-plugin, grails-web, grails-gsp) will apply the bom automatically.
28-
- Since groovy comes from the Spring bom, we have removed the gradle property 'groovyVersion' and adopted the upstream property 'groovy.version' instead.
28+
- the gradle property `groovyVersion` is being replaced with the upstream spring property name `groovy.version`. Please update your projects accordingly.
2929

3030
## NOTE: This document is a draft and the explanations are only highlights and will be expanded further prior to release of 7.0.
3131

dependabot/build.gradle

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated on Fri Nov 22 09:58:56 CET 2024 by: ./gradlew :grails-bom:dependabotBuild
1+
// Generated on Wed Feb 05 18:23:24 EST 2025 by: ./gradlew :grails-bom:dependabotBuild
22
plugins {
33
id 'java-library'
44
}
@@ -9,14 +9,13 @@ dependencies {
99
api "org.asciidoctor:asciidoctorj:${project['asciidoctorj.version']}"
1010
api "com.bertramlabs.plugins:asset-pipeline-gradle:${project['asset-pipeline-gradle.version']}"
1111
api "com.bertramlabs.plugins:asset-pipeline-grails:${project['asset-pipeline-grails.version']}"
12+
api "org.webjars.npm:bootstrap-icons:${project['bootstrap-icons.version']}"
13+
api "org.webjars.npm:bootstrap:${project['bootstrap.version']}"
1214
api "net.bytebuddy:byte-buddy:${project['byte-buddy.version']}"
1315
api "commons-codec:commons-codec:${project['commons-codec.version']}"
1416
api "org.apache.commons:commons-text:${project['commons-text.version']}"
1517
api "io.methvin:directory-watcher:${project['directory-watcher.version']}"
1618
api "org.xhtmlrenderer:flying-saucer-pdf-openpdf:${project['flying-saucer-pdf-openpdf.version']}"
17-
api "org.webjars.npm:bootstrap:${project['bootstrap.version']}"
18-
api "org.webjars.npm:bootstrap-icons:${project['bootstrap-icons.version']}"
19-
api "org.webjars.npm:jquery:${project['jquery.version']}"
2019
api "org.gebish:geb-spock:${project['geb-spock.version']}"
2120
api "org.grails:grails-datastore-gorm-hibernate5:${project['grails-datastore-gorm-hibernate5.version']}"
2221
api "org.grails:grails-datastore-gorm-mongodb:${project['grails-datastore-gorm-mongodb.version']}"
@@ -26,26 +25,30 @@ dependencies {
2625
api "org.grails:grails-datastore-gorm-async:${project['grails-datastore.version']}"
2726
api "org.grails:grails-datastore-gorm-rx:${project['grails-datastore.version']}"
2827
api "org.grails:grails-datastore-gorm-support:${project['grails-datastore.version']}"
28+
api "org.grails:grails-datastore-gorm-tck:${project['grails-datastore.version']}"
2929
api "org.grails:grails-datastore-gorm-test:${project['grails-datastore.version']}"
3030
api "org.grails:grails-datastore-gorm-validation:${project['grails-datastore.version']}"
31-
api "org.grails:grails-datastore-gorm-tck:${project['grails-datastore.version']}"
3231
api "org.grails:grails-datastore-web:${project['grails-datastore.version']}"
32+
api "org.grails:grails-gorm-testing-support:${project['grails-datastore.version']}"
3333
api "org.grails:grails-gdoc-engine:${project['grails-gdoc-engine.version']}"
3434
api "org.grails:grails-gradle-plugin:${project['grails-gradle-plugin.version']}"
35-
api "org.grails:grails-gorm-testing-support:${project['grails-testing-support.version']}"
36-
api "org.grails:grails-web-testing-support:${project['grails-testing-support.version']}"
3735
api "org.apache.groovy:groovy-bom:${project['groovy.version']}"
3836
api "org.grails:grails-gsp:${project['gsp.version']}"
3937
api "org.grails:grails-web-gsp:${project['gsp.version']}"
4038
api "org.grails:grails-web-taglib:${project['gsp.version']}"
39+
api "org.grails:grails-web-testing-support:${project['gsp.version']}"
4140
api "org.grails.plugins:gsp:${project['gsp.version']}"
4241
api "com.h2database:h2:${project['h2.version']}"
4342
api "com.fasterxml.jackson:jackson-bom:${project['jackson.version']}"
4443
api "org.fusesource.jansi:jansi:${project['jansi.version']}"
4544
api "com.github.javaparser:javaparser-core:${project['javaparser-core.version']}"
4645
api "jline:jline:${project['jline.version']}"
4746
api "net.java.dev.jna:jna:${project['jna.version']}"
47+
api "org.webjars.npm:jquery:${project['jquery.version']}"
4848
api "org.jsoup:jsoup:${project['jsoup.version']}"
49+
api "org.liquibase:liquibase-cdi:${project['liquibase.version']}"
50+
api "org.liquibase:liquibase-core:${project['liquibase.version']}"
51+
api "org.liquibase.ext:liquibase-hibernate5:${project['liquibase.version']}"
4952
api "org.mongodb:bson:${project['mongodb.version']}"
5053
api "org.mongodb:bson-record-codec:${project['mongodb.version']}"
5154
api "org.mongodb:mongodb-driver-core:${project['mongodb.version']}"
@@ -58,22 +61,24 @@ dependencies {
5861
api "org.grails.plugins:hibernate5:${project['plugins-hibernate5.version']}"
5962
api "org.grails.plugins:mongodb:${project['plugins-mongodb.version']}"
6063
api "org.grails.plugins:neo4j:${project['plugins-neo4j.version']}"
61-
api "org.grails.plugins:rxjava2:${project['plugins-rxjava2.version']}"
62-
api "org.grails.plugins:rxjava:${project['plugins-rxjava.version']}"
6364
api "org.grails.plugins:scaffolding:${project['plugins-scaffolding.version']}"
65+
api "org.grails.plugins:views-gradle:${project['plugins-views-gradle.version']}"
6466
api "org.grails.plugins:views-json-templates:${project['plugins-views-json-templates.version']}"
6567
api "org.grails.plugins:views-json:${project['plugins-views-json.version']}"
6668
api "org.grails.plugins:views-markup:${project['plugins-views-markup.version']}"
67-
api "org.grails.profiles:angular:${project['profiles-angular.version']}"
68-
api "org.grails.profiles:base:${project['profiles-base.version']}"
69-
api "org.grails.profiles:plugin:${project['profiles-plugin.version']}"
70-
api "org.grails.profiles:profile:${project['profiles-profile.version']}"
71-
api "org.grails.profiles:react:${project['profiles-react.version']}"
72-
api "org.grails.profiles:rest-api-plugin:${project['profiles-rest-api-plugin.version']}"
73-
api "org.grails.profiles:rest-api:${project['profiles-rest-api.version']}"
74-
api "org.grails.profiles:vue:${project['profiles-vue.version']}"
75-
api "org.grails.profiles:web-plugin:${project['profiles-web-plugin.version']}"
76-
api "org.grails.profiles:web:${project['profiles-web.version']}"
69+
api "org.grails.profiles:angular:${project['profiles.version']}"
70+
api "org.grails.profiles:base:${project['profiles.version']}"
71+
api "org.grails.profiles:plugin:${project['profiles.version']}"
72+
api "org.grails.profiles:profile:${project['profiles.version']}"
73+
api "org.grails.profiles:react:${project['profiles.version']}"
74+
api "org.grails.profiles:rest-api:${project['profiles.version']}"
75+
api "org.grails.profiles:rest-api-plugin:${project['profiles.version']}"
76+
api "org.grails.profiles:vue:${project['profiles.version']}"
77+
api "org.grails.profiles:web:${project['profiles.version']}"
78+
api "org.grails.profiles:web-plugin:${project['profiles.version']}"
79+
api "io.reactivex.rxjava2:rxjava:${project['rxjava2.version']}"
80+
api "io.reactivex.rxjava3:rxjava:${project['rxjava3.version']}"
81+
api "io.reactivex:rxjava:${project['rxjava.version']}"
7782
api "org.spockframework:spock-core:${project['spock.version']}"
7883
api "org.spockframework:spock-spring:${project['spock.version']}"
7984
api "org.springframework.boot:spring-boot-cli:${project['spring-boot.version']}"

gradle.properties

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ gradleNexusPluginVersion=2.3.1
88
gradleNexusPublishPluginVersion=2.0.0
99
gradleExtraConfigurationsPluginVersion=10.0.1
1010
gradleLicensePluginVersion=0.16.1
11-
gradleToolingApiVersion=8.12
12-
groovyVersion=4.0.24
11+
gradleToolingApiVersion=8.12.1
12+
groovyVersion=4.0.25
1313
joptSimpleVersion=5.0.4
1414
plexusComponentApiVersion=1.0-alpha-33
1515
plexusSecDispatcherVersion=1.4
@@ -35,7 +35,7 @@ preventSnapshotPublish=false
3535
# https://github.com/grails/grails-gradle-plugin/issues/222
3636
slf4jPreventExclusion=true
3737

38-
# Generated on Thu Jan 16 10:23:54 EST 2025 by: ./gradlew :grails-bom:syncProps
38+
# Generated on Wed Feb 05 18:23:13 EST 2025 by: ./gradlew :grails-bom:syncProps
3939
# Only version value modifications allowed after this point. Do not insert or change version names.
4040
ant.version=1.10.15
4141
asciidoctorj.version=3.0.0
@@ -54,17 +54,18 @@ grails-datastore-gorm-hibernate5.version=9.0.0-SNAPSHOT
5454
grails-datastore-gorm-mongodb.version=9.0.0-SNAPSHOT
5555
grails-gdoc-engine.version=1.0.1
5656
grails-gradle-plugin.version=7.0.0-SNAPSHOT
57-
groovy.version=4.0.24
57+
groovy.version=4.0.25
5858
gsp.version=7.0.0-SNAPSHOT
5959
h2.version=2.3.232
6060
jackson.version=2.18.2
6161
jansi.version=1.18
6262
javaparser-core.version=3.26.2
6363
jline.version=2.14.6
64-
jna.version=5.15.0
64+
jna.version=5.16.0
6565
jquery.version=3.7.1
6666
jsoup.version=1.18.3
67-
mongodb.version=5.3.0
67+
liquibase.version=4.27.0
68+
mongodb.version=5.3.1
6869
objenesis.version=3.4
6970
plugins-cache.version=8.0.0-SNAPSHOT
7071
plugins-database-migration.version=6.0.0-SNAPSHOT
@@ -78,20 +79,11 @@ plugins-views-gradle.version=4.0.0-SNAPSHOT
7879
plugins-views-json.version=4.0.0-SNAPSHOT
7980
plugins-views-json-templates.version=9.0.0-SNAPSHOT
8081
plugins-views-markup.version=4.0.0-SNAPSHOT
81-
profiles-angular.version=10.0.1
82-
profiles-base.version=7.0.1
83-
profiles-plugin.version=7.0.1
84-
profiles-profile.version=7.0.1
85-
profiles-react.version=7.0.1
86-
profiles-rest-api.version=7.0.1
87-
profiles-rest-api-plugin.version=7.0.1
88-
profiles-vue.version=7.0.1
89-
profiles-web.version=7.0.1
90-
profiles-web-plugin.version=7.0.1
82+
profiles.version=10.0.2-SNAPSHOT
9183
rxjava.version=1.3.8
9284
rxjava2.version=2.2.21
9385
rxjava3.version=3.1.10
9486
spock.version=2.3-groovy-4.0
95-
spring-boot.version=3.4.1
87+
spring-boot.version=3.4.2
9688
springloaded.version=1.2.8.RELEASE
9789
views-json-testing-support.version=4.0.0-SNAPSHOT

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

grails-async/core/src/test/groovy/grails/async/FutureTaskPromiseFactorySpec.groovy

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,18 @@ class FutureTaskPromiseFactorySpec extends Specification {
5252
list.onComplete { List l -> result = l }
5353

5454
then: 'the result is correct'
55-
new PollingConditions(timeout: 5).eventually {
56-
result
57-
result == [2, 4]
55+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
56+
assert result
57+
assert result == [2, 4]
5858
}
5959

6060
when: 'a promise list is created from two closures'
6161
list = Promises.createPromise({ 2 + 2 }, { 4 + 4 })
6262
list.onComplete { result = it }
6363

6464
then: 'the result is correct'
65-
new PollingConditions(timeout: 5).eventually {
66-
result == [4, 8]
65+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
66+
assert result == [4, 8]
6767
}
6868
}
6969

@@ -92,9 +92,9 @@ class FutureTaskPromiseFactorySpec extends Specification {
9292

9393
then: 'the onComplete handler is invoked and the onError handler is ignored'
9494
thrown(ExecutionException)
95-
new PollingConditions(timeout: 5).eventually {
96-
!result
97-
error
95+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
96+
assert !result
97+
assert error
9898
}
9999
}
100100

grails-async/core/src/test/groovy/grails/async/PromiseListSpec.groovy

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ class PromiseListSpec extends Specification {
3737
list.onComplete { result = it }
3838

3939
then: 'then the result from onComplete is correct'
40-
new PollingConditions(timeout: 5).eventually {
41-
result == [1, 2, 3]
40+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
41+
assert result == [1, 2, 3]
4242
}
4343
}
4444

@@ -53,8 +53,8 @@ class PromiseListSpec extends Specification {
5353
list.onComplete { result = it }
5454

5555
then: 'then the result from onComplete is correct'
56-
new PollingConditions(timeout: 5).eventually {
57-
result == [1, 2, 3]
56+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
57+
assert result == [1, 2, 3]
5858
}
5959
}
6060

grails-async/core/src/test/groovy/grails/async/PromiseMapSpec.groovy

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ class PromiseMapSpec extends Specification {
3333
map.onComplete { result = it }
3434

3535
then: 'an appropriately populated map is returned to the onComplete event'
36-
new PollingConditions(timeout: 5).eventually {
37-
result
38-
result['one'] == 1
39-
result['four'] == 4
40-
result['eight'] == 8
36+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
37+
assert result
38+
assert result['one'] == 1
39+
assert result['four'] == 4
40+
assert result['eight'] == 8
4141
}
4242
}
4343

@@ -52,11 +52,11 @@ class PromiseMapSpec extends Specification {
5252
map.onComplete { result = it }
5353

5454
then: 'an appropriately populated map is returned to the onComplete event'
55-
new PollingConditions(timeout: 5).eventually {
56-
result
57-
result['one'] == 1
58-
result['four'] == 4
59-
result['eight'] == 8
55+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
56+
assert result
57+
assert result['one'] == 1
58+
assert result['four'] == 4
59+
assert result['eight'] == 8
6060
}
6161
}
6262

@@ -69,13 +69,14 @@ class PromiseMapSpec extends Specification {
6969
map['eight'] = { 4 * 2 }
7070
def result = null
7171
map.onComplete { result = it }
72-
sleep 300
7372

7473
then: 'an appropriately populated map is returned to the onComplete event'
75-
result
76-
result['one'] == 1
77-
result['four'] == 4
78-
result['eight'] == 8
74+
new PollingConditions(timeout: 5, delay: 0.2, initialDelay: 0.3).eventually {
75+
assert result
76+
assert result['one'] == 1
77+
assert result['four'] == 4
78+
assert result['eight'] == 8
79+
}
7980
}
8081

8182
void 'Test that a PromiseMap triggers onError for an exception and ignores onComplete'() {
@@ -89,12 +90,13 @@ class PromiseMapSpec extends Specification {
8990
Throwable err = null
9091
map.onComplete { result = it }
9192
map.onError { err = it }
92-
sleep 300
9393

9494
then: 'An appropriately populated map is returned to the onComplete event'
95-
!result
96-
err
97-
err.message == 'java.lang.RuntimeException: bad'
95+
new PollingConditions(timeout: 5, delay: 0.2, initialDelay: 0.3).eventually {
96+
assert !result
97+
assert err
98+
assert err.message == 'java.lang.RuntimeException: bad'
99+
}
98100
}
99101

100102
@PendingFeature(reason = '''

grails-async/core/src/test/groovy/grails/async/PromiseSpec.groovy

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -68,20 +68,20 @@ class PromiseSpec extends Specification {
6868

6969
when: 'a promise list is created from two promises'
7070
def p1 = Promises.createPromise {
71-
sleep 200
71+
sleep 200 // simulate long running task
7272
1 + 1
7373
}
7474
def p2 = Promises.createPromise {
75-
sleep 200
75+
sleep 200 // simulate long running task
7676
2 + 2
7777
}
7878
def list = Promises.createPromise(p1, p2)
7979
def result = null
8080
list.onComplete { result = it }
8181

8282
then: 'the result is correct'
83-
new PollingConditions(timeout: 5).eventually {
84-
result == [2, 4]
83+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
84+
assert result == [2, 4]
8585
}
8686
}
8787

@@ -95,17 +95,17 @@ class PromiseSpec extends Specification {
9595
list.onComplete { result = it }
9696

9797
then: 'the result is correct'
98-
new PollingConditions(timeout: 5).eventually {
99-
result == [2, 4]
98+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
99+
assert result == [2, 4]
100100
}
101101

102102
when: 'a promise list is created from two closures'
103103
list = Promises.createPromise({ 3 + 3 }, { 4 + 4 })
104104
list.onComplete { result = it }
105105

106106
then: 'the result is correct'
107-
new PollingConditions(timeout: 5).eventually {
108-
result == [6, 8]
107+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
108+
assert result == [6, 8]
109109
}
110110
}
111111

@@ -119,9 +119,9 @@ class PromiseSpec extends Specification {
119119
promise.onError { hasError = true }
120120

121121
then: 'the onComplete handler is invoked and the onError handler is ignored'
122-
new PollingConditions(timeout: 5).eventually {
123-
result == 2
124-
hasError == false
122+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
123+
assert result == 2
124+
assert hasError == false
125125
}
126126
}
127127

@@ -135,10 +135,10 @@ class PromiseSpec extends Specification {
135135
promise.onError { error = it }
136136

137137
then: 'the onComplete handler is invoked and the onError handler is ignored'
138-
new PollingConditions(timeout: 5).eventually {
139-
!result
140-
error
141-
error.message.contains('bad')
138+
new PollingConditions(timeout: 5, delay: 0.2).eventually {
139+
assert !result
140+
assert error
141+
assert error.message.contains('bad')
142142
}
143143
}
144144

0 commit comments

Comments
 (0)