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