This is an automated email from the ASF dual-hosted git repository. jamesfredley pushed a commit to branch gradle-version in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 415882c77eb9bbda730fc92b786970f38897ad5c Author: James Fredley <[email protected]> AuthorDate: Sat Jan 24 17:19:02 2026 -0500 Add syncGradleWrapperVersion task to consolidate Gradle version updates --- build.gradle | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- gradle.properties | 5 +++- 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 2338d4bac6..ea8072069c 100644 --- a/build.gradle +++ b/build.gradle @@ -88,4 +88,79 @@ apply { // logger.lifecycle("\t- ${dep}") // } // } -//} \ No newline at end of file +//} + +// Configure wrapper task to use gradleVersion property +wrapper { + gradleVersion = project.property('gradleVersion') +} + +/** + * Task to synchronize Gradle wrapper version across all locations in the monorepo. + * + * When upgrading Gradle, update gradleVersion in gradle.properties and run: + * ./gradlew syncGradleWrapperVersion + * + * This updates: + * - Root and composite build wrapper files + * - Profile skeleton wrappers + * - Forge template + * - .sdkmanrc + */ +tasks.register('syncGradleWrapperVersion') { + group = 'build setup' + description = 'Synchronizes Gradle wrapper version across all locations from gradleVersion property' + + doLast { + def version = project.property('gradleVersion') + def updatedFiles = [] + + // Pattern to match gradle version in distributionUrl + def versionPattern = ~/gradle-[\d.]+(-\w+)?-bin\.zip/ + def newVersionString = "gradle-${version}-bin.zip" + + // Find all gradle-wrapper.properties files (excluding test resources and build outputs) + fileTree(rootDir) { + include '**/gradle/wrapper/gradle-wrapper.properties' + exclude '**/build/**' // Exclude build output directories + exclude '**/grails-shell-cli/src/test/**' // Test fixture with intentionally old version + }.each { File file -> + def content = file.text + def newContent = content.replaceAll(versionPattern, newVersionString) + if (content != newContent) { + file.text = newContent + updatedFiles << rootDir.toPath().relativize(file.toPath()).toString() + } + } + + // Update Forge rocker template + def forgeTemplate = file('grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/gradleWrapperProperties.rocker.raw') + if (forgeTemplate.exists()) { + def content = forgeTemplate.text + def newContent = content.replaceAll(versionPattern, newVersionString) + if (content != newContent) { + forgeTemplate.text = newContent + updatedFiles << rootDir.toPath().relativize(forgeTemplate.toPath()).toString() + } + } + + // Update .sdkmanrc + def sdkmanrc = file('.sdkmanrc') + if (sdkmanrc.exists()) { + def content = sdkmanrc.text + def sdkmanPattern = ~/gradle=[\d.]+(-\w+)?/ + def newContent = content.replaceAll(sdkmanPattern, "gradle=${version}") + if (content != newContent) { + sdkmanrc.text = newContent + updatedFiles << '.sdkmanrc' + } + } + + if (updatedFiles) { + logger.lifecycle("Updated Gradle version to ${version} in ${updatedFiles.size()} files:") + updatedFiles.each { logger.lifecycle(" - ${it}") } + } else { + logger.lifecycle("All files already have Gradle version ${version}") + } + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 54be24387c..f963bcec56 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,7 +32,10 @@ defaultElImplementationVersion=5.0.0 elApiVersion=5.0.1 expectitCoreVersion=0.9.0 gparsVersion=1.2.1 -gradleToolingApiVersion=8.14.3 +# Gradle version - used by wrapper task and syncGradleWrapperVersion task +# When updating, run: ./gradlew syncGradleWrapperVersion +gradleVersion=8.14.4 +gradleToolingApiVersion=8.14.4 hibernate5Version=5.6.15.Final javassistVersion=3.30.2-GA jnrPosixVersion=3.1.20
