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/07/15 20:36:26 UTC
(grails-core) 01/01: Fix forge reproducibility issues
This is an automated email from the ASF dual-hosted git repository.
jdaugherty pushed a commit to branch fix/forge-groovy-reproducibility
in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit c1a579b2ad967daeea7a0f26036cf34e3395f7ae
Author: James Daugherty <jd...@jdresources.net>
AuthorDate: Wed Jul 15 16:33:59 2026 -0400
Fix forge reproducibility issues
---
grails-forge/gradle.properties | 2 ++
grails-forge/gradle/groovy-version-pin.gradle | 29 ++++++++++++++++++++++
.../grails-forge-analytics-postgres/build.gradle | 1 +
grails-forge/grails-forge-api/build.gradle | 1 +
grails-forge/grails-forge-cli/build.gradle | 1 +
grails-forge/grails-forge-core/build.gradle | 1 +
grails-forge/grails-forge-web-netty/build.gradle | 1 +
grails-forge/test-core/build.gradle | 1 +
8 files changed, 37 insertions(+)
diff --git a/grails-forge/gradle.properties b/grails-forge/gradle.properties
index 0f47db7f67..b82968e526 100644
--- a/grails-forge/gradle.properties
+++ b/grails-forge/gradle.properties
@@ -30,6 +30,8 @@ antlr4Version=4.8-1!!
asciidoctorGradleJvmVersion=4.0.5
commonsCompressVersion=1.28.0
gradleSdkvendorPluginVersion=3.0.0
+# minimum 4.0.32 - groovydoc output is non-deterministic before GROOVY-11954, breaking reproducible javadoc jars
+groovyVersion=4.0.32
jacksonDatabindVersion=2.18.3
# match the jansi version in grails-bom
jansiVersion=2.4.2
diff --git a/grails-forge/gradle/groovy-version-pin.gradle b/grails-forge/gradle/groovy-version-pin.gradle
new file mode 100644
index 0000000000..6f8b44bf10
--- /dev/null
+++ b/grails-forge/gradle/groovy-version-pin.gradle
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// Pin all Groovy modules to the version in gradle.properties instead of the
+// (older) version managed by the Micronaut platform BOM.
+configurations.configureEach {
+ resolutionStrategy.eachDependency { DependencyResolveDetails details ->
+ if (details.requested.group == 'org.apache.groovy') {
+ details.useVersion(groovyVersion)
+ details.because('groovydoc output is non-deterministic before GROOVY-11954, breaking reproducible javadoc jars')
+ }
+ }
+}
diff --git a/grails-forge/grails-forge-analytics-postgres/build.gradle b/grails-forge/grails-forge-analytics-postgres/build.gradle
index 04fe266cf8..a3959e4b5d 100644
--- a/grails-forge/grails-forge-analytics-postgres/build.gradle
+++ b/grails-forge/grails-forge-analytics-postgres/build.gradle
@@ -116,4 +116,5 @@ tasks.named('dockerBuild') {
images = [findProperty('dockerImageName') ?: 'grailsforge']
}
+apply from: rootProject.layout.projectDirectory.file('gradle/groovy-version-pin.gradle')
apply from: rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle')
diff --git a/grails-forge/grails-forge-api/build.gradle b/grails-forge/grails-forge-api/build.gradle
index f85fbfc048..ca318cb0a9 100644
--- a/grails-forge/grails-forge-api/build.gradle
+++ b/grails-forge/grails-forge-api/build.gradle
@@ -74,6 +74,7 @@ dependencies {
}
apply {
+ from rootProject.layout.projectDirectory.file('gradle/groovy-version-pin.gradle')
from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle')
from rootProject.layout.projectDirectory.file('gradle/micronaut-openapi-config.gradle')
from rootProject.layout.projectDirectory.file('gradle/test-config.gradle')
diff --git a/grails-forge/grails-forge-cli/build.gradle b/grails-forge/grails-forge-cli/build.gradle
index 86fda42e8a..4f9f4bdab2 100644
--- a/grails-forge/grails-forge-cli/build.gradle
+++ b/grails-forge/grails-forge-cli/build.gradle
@@ -119,6 +119,7 @@ rocker {
}
apply {
+ from rootProject.layout.projectDirectory.file('gradle/groovy-version-pin.gradle')
from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle')
from rootProject.layout.projectDirectory.file('gradle/test-config.gradle')
from rootProject.layout.projectDirectory.file('gradle/doc-config.gradle')
diff --git a/grails-forge/grails-forge-core/build.gradle b/grails-forge/grails-forge-core/build.gradle
index 8e8c052c00..5ae9de8d9f 100644
--- a/grails-forge/grails-forge-core/build.gradle
+++ b/grails-forge/grails-forge-core/build.gradle
@@ -118,6 +118,7 @@ copyGrailsWrapper.configure { Sync it ->
}
apply {
+ from rootProject.layout.projectDirectory.file('gradle/groovy-version-pin.gradle')
from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle')
from rootProject.layout.projectDirectory.file('gradle/test-config.gradle')
from rootProject.layout.projectDirectory.file('gradle/doc-config.gradle')
diff --git a/grails-forge/grails-forge-web-netty/build.gradle b/grails-forge/grails-forge-web-netty/build.gradle
index c0fa95e7d5..e752ed0c4e 100644
--- a/grails-forge/grails-forge-web-netty/build.gradle
+++ b/grails-forge/grails-forge-web-netty/build.gradle
@@ -121,4 +121,5 @@ tasks.named('dockerBuild') {
images = [findProperty('dockerImageName') ?: 'grailsforge']
}
+apply from: rootProject.layout.projectDirectory.file('gradle/groovy-version-pin.gradle')
apply from: rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle')
diff --git a/grails-forge/test-core/build.gradle b/grails-forge/test-core/build.gradle
index 70fad3183b..59480a0a67 100644
--- a/grails-forge/test-core/build.gradle
+++ b/grails-forge/test-core/build.gradle
@@ -71,5 +71,6 @@ dependencies {
}
apply {
+ from rootProject.layout.projectDirectory.file('gradle/groovy-version-pin.gradle')
from rootProject.layout.projectDirectory.file('gradle/test-config.gradle')
}
\ No newline at end of file