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

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


The following commit(s) were added to refs/heads/7.0.x by this push:
     new 021ca6527c [skip ci] rework versions task to depend on grails-core 
instead of pulling the bom remotely
021ca6527c is described below

commit 021ca6527c1759f1a08e29604da4880c27daf948
Author: James Daugherty <[email protected]>
AuthorDate: Tue Jul 8 20:47:21 2025 -0400

    [skip ci] rework versions task to depend on grails-core instead of pulling 
the bom remotely
---
 gradle/publish-config.gradle                       |   2 +
 grails-forge/build.gradle                          |   1 +
 .../buildsrc/WriteGrailsVersionInfoTask.groovy     | 106 ++++++++++++++++++++
 .../internal/tasks/WriteGrailsVersionInfoTask.java | 107 ---------------------
 grails-forge/gradle/publish-config.gradle          |   2 +
 grails-forge/grails-forge-core/build.gradle        |  22 +++--
 grails-gradle/gradle/checksum-config.gradle        |   2 +
 7 files changed, 126 insertions(+), 116 deletions(-)

diff --git a/gradle/publish-config.gradle b/gradle/publish-config.gradle
index 6ceb4acb35..d9672c1bcd 100644
--- a/gradle/publish-config.gradle
+++ b/gradle/publish-config.gradle
@@ -72,6 +72,7 @@ afterEvaluate {
     if (plugins.hasPlugin('maven-publish')) {
         def checksumTask = tasks.register('publishedChecksums', Checksum)
         checksumTask.configure { Checksum check ->
+            check.group = 'publishing'
             check.checksumAlgorithm = Checksum.Algorithm.SHA512
             check.outputDirectory = layout.buildDirectory.dir('checksums')
             check.dependsOn(tasks.withType(Jar))
@@ -80,6 +81,7 @@ afterEvaluate {
         def artifactsDir = layout.buildDirectory.dir('artifacts')
         def artifactsTask = tasks.register('savePublishedArtifacts')
         artifactsTask.configure {
+            it.group = 'publishing'
             it.outputs.dir(artifactsDir)
             it.dependsOn(tasks.withType(Jar))
         }
diff --git a/grails-forge/build.gradle b/grails-forge/build.gradle
index ee287f6de6..c01fcc27ce 100644
--- a/grails-forge/build.gradle
+++ b/grails-forge/build.gradle
@@ -63,6 +63,7 @@ allprojects {
 
     tasks.withType(Test).configureEach { Task testTask ->
         def grailsIncludedBuildName = 
rootProject.layout.projectDirectory.dir('..').asFile.name
+        logger.lifecycle("Configuring test task '${testTask.name}' to depend 
on included builds with name ${grailsIncludedBuildName}")
         testTask.dependsOn(
                 
gradle.includedBuild(grailsIncludedBuildName).task(':publishAllPublicationsToTestCaseMavenRepoRepository'),
                 
gradle.includedBuild('grails-gradle').task(':publishAllPublicationsToTestCaseMavenRepoRepository')
diff --git 
a/grails-forge/buildSrc/src/main/groovy/org/apache/grails/buildsrc/WriteGrailsVersionInfoTask.groovy
 
b/grails-forge/buildSrc/src/main/groovy/org/apache/grails/buildsrc/WriteGrailsVersionInfoTask.groovy
new file mode 100644
index 0000000000..7aee8f8240
--- /dev/null
+++ 
b/grails-forge/buildSrc/src/main/groovy/org/apache/grails/buildsrc/WriteGrailsVersionInfoTask.groovy
@@ -0,0 +1,106 @@
+/*
+ *  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.
+ */
+
+package org.apache.grails.buildsrc
+
+import groovy.transform.CompileStatic
+import groovy.xml.XmlSlurper
+import groovy.xml.slurpersupport.GPathResult
+import groovy.xml.slurpersupport.NodeChild
+import org.gradle.api.DefaultTask
+import org.gradle.api.GradleException
+import org.gradle.api.Project
+import org.gradle.api.file.DirectoryProperty
+import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.model.ObjectFactory
+import org.gradle.api.provider.Property
+import org.gradle.api.tasks.CacheableTask
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.InputFile
+import org.gradle.api.tasks.OutputDirectories
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.PathSensitive
+import org.gradle.api.tasks.PathSensitivity
+import org.gradle.api.tasks.TaskAction
+import org.xml.sax.SAXException
+
+import javax.inject.Inject
+import javax.xml.parsers.ParserConfigurationException
+import java.nio.charset.StandardCharsets
+import java.nio.file.Files
+
+@CompileStatic
+@CacheableTask
+abstract class WriteGrailsVersionInfoTask extends DefaultTask {
+
+    @Input
+    final Property<String> projectVersion
+
+    @InputFile
+    @PathSensitive(PathSensitivity.RELATIVE)
+    final RegularFileProperty bomPublicationFile
+
+    @OutputDirectory
+    final DirectoryProperty versionsDirectory
+
+    @Inject
+    WriteGrailsVersionInfoTask(ObjectFactory objects, Project project) {
+        projectVersion = objects.property(String).convention(project.provider {
+            project.version as String
+        })
+        bomPublicationFile = objects.fileProperty()
+        versionsDirectory = objects.directoryProperty()
+    }
+
+    @TaskAction
+    void writeVersionInfo() {
+        File versionsDirectory = versionsDirectory.get().asFile
+        if (versionsDirectory.exists()) {
+            versionsDirectory.deleteDir()
+        }
+        versionsDirectory.mkdirs()
+
+        File versions = new File(versionsDirectory, 
'grails-versions.properties')
+
+        File pomFile = bomPublicationFile.get().asFile
+
+        GPathResult pom = null
+        try {
+            pom = new XmlSlurper().parse(pomFile)
+        } catch (IOException | SAXException | ParserConfigurationException e) {
+            new GradleException("Unable to parse BOM publication file: 
${pomFile.absolutePath}", e)
+        }
+
+        TreeMap<String, String> props = []
+        props.put("grails.version", getProjectVersion().get())
+        ((GPathResult) pom.getProperty("properties")).children().forEach(child 
-> {
+            NodeChild node = (NodeChild) child
+            props.put(node.name(), node.text())
+        })
+
+        try (OutputStream out = Files.newOutputStream(versions.toPath())) {
+            for (Map.Entry<String, String> entry : props.entrySet()) {
+                getLogger().info("Writing version property: {} => {}", 
entry.getKey(), entry.getValue())
+                String line = "${entry.getKey()}=${entry.getValue()}\n" as 
String
+                out.write(line.getBytes(StandardCharsets.ISO_8859_1))
+            }
+        }
+    }
+}
diff --git 
a/grails-forge/buildSrc/src/main/groovy/org/grails/forge/internal/tasks/WriteGrailsVersionInfoTask.java
 
b/grails-forge/buildSrc/src/main/groovy/org/grails/forge/internal/tasks/WriteGrailsVersionInfoTask.java
deleted file mode 100644
index 5d162c35e3..0000000000
--- 
a/grails-forge/buildSrc/src/main/groovy/org/grails/forge/internal/tasks/WriteGrailsVersionInfoTask.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- *  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.
- */
-package org.grails.forge.internal.tasks;
-
-import groovy.xml.XmlSlurper;
-import groovy.xml.slurpersupport.GPathResult;
-import groovy.xml.slurpersupport.NodeChild;
-import org.gradle.api.DefaultTask;
-import org.gradle.api.artifacts.result.ArtifactResolutionResult;
-import org.gradle.api.artifacts.result.ComponentArtifactsResult;
-import org.gradle.api.artifacts.result.ResolvedArtifactResult;
-import org.gradle.api.file.DirectoryProperty;
-import org.gradle.api.provider.Property;
-import org.gradle.api.tasks.CacheableTask;
-import org.gradle.api.tasks.Input;
-import org.gradle.api.tasks.OutputDirectory;
-import org.gradle.api.tasks.TaskAction;
-import org.gradle.maven.MavenModule;
-import org.gradle.maven.MavenPomArtifact;
-import org.xml.sax.SAXException;
-
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-@CacheableTask
-public abstract class WriteGrailsVersionInfoTask extends DefaultTask {
-    @Input
-    public abstract Property<String> getVersion();
-
-    @OutputDirectory
-    public abstract DirectoryProperty getOutputDirectory();
-
-    public WriteGrailsVersionInfoTask() {
-        getOutputs().doNotCacheIf("snapshot version", spec -> 
getVersion().get().endsWith("SNAPSHOT"));
-    }
-
-    @TaskAction
-    public void writeVersionInfo() throws IOException {
-        Map<String, String> props = generateProperties();
-        File outputFile = 
getOutputDirectory().file("grails-versions.properties").get().getAsFile();
-        if(outputFile.exists()) {
-            outputFile.delete();
-        }
-        try (OutputStream out = Files.newOutputStream(outputFile.toPath())) {
-            for (Map.Entry<String, String> entry : props.entrySet()) {
-                getLogger().info("Writing version property: {} => {}", 
entry.getKey(), entry.getValue());
-                String line = entry.getKey() + "=" + entry.getValue() + "\n";
-                out.write(line.getBytes(StandardCharsets.ISO_8859_1));
-            }
-        }
-    }
-
-    private Map<String, String> generateProperties() {
-        ArtifactResolutionResult result = 
getProject().getDependencies().createArtifactResolutionQuery()
-                .forModule("org.apache.grails", "grails-bom", 
getVersion().get())
-                .withArtifacts(MavenModule.class, MavenPomArtifact.class)
-                .execute();
-        Map<String, String> props = new TreeMap<>();
-        props.put("grails.version", getVersion().get());
-        Set<ComponentArtifactsResult> resolvedComponents = 
result.getResolvedComponents();
-        getLogger().info("Resolved {} components", resolvedComponents.size());
-        for (ComponentArtifactsResult component : resolvedComponents) {
-            component.getArtifacts(MavenPomArtifact.class).forEach(artifact -> 
{
-                if (artifact instanceof ResolvedArtifactResult) {
-                    ResolvedArtifactResult resolved = (ResolvedArtifactResult) 
artifact;
-                    GPathResult pom = null;
-                    try {
-                        pom = new XmlSlurper().parse(resolved.getFile());
-                    } catch (IOException | SAXException | 
ParserConfigurationException e) {
-                        getLogger().warn("Failed to parse POM file: {} due to 
{}", resolved.getFile(), e.getMessage());
-                    }
-                    ((GPathResult) 
pom.getProperty("properties")).children().forEach(child -> {
-                        NodeChild node = (NodeChild) child;
-                        props.put(node.name(), node.text());
-                    });
-                }
-                else {
-                    getLogger().warn("Expected ResolvedArtifactResult but got: 
{}", artifact.getClass().getName());
-                }
-            });
-        }
-        return props;
-    }
-}
diff --git a/grails-forge/gradle/publish-config.gradle 
b/grails-forge/gradle/publish-config.gradle
index 42cf44c0ab..7afe315d0c 100644
--- a/grails-forge/gradle/publish-config.gradle
+++ b/grails-forge/gradle/publish-config.gradle
@@ -72,6 +72,7 @@ afterEvaluate {
     if (plugins.hasPlugin('maven-publish')) {
         def checksumTask = tasks.register('publishedChecksums', Checksum)
         checksumTask.configure { Checksum check ->
+            check.group = 'publishing'
             check.checksumAlgorithm = Checksum.Algorithm.SHA512
             check.outputDirectory = layout.buildDirectory.dir('checksums')
             check.dependsOn(tasks.withType(Jar))
@@ -80,6 +81,7 @@ afterEvaluate {
         def artifactsDir = layout.buildDirectory.dir('artifacts')
         def artifactsTask = tasks.register('savePublishedArtifacts')
         artifactsTask.configure {
+            it.group = 'publishing'
             it.outputs.dir(artifactsDir)
             it.dependsOn(tasks.withType(Jar))
         }
diff --git a/grails-forge/grails-forge-core/build.gradle 
b/grails-forge/grails-forge-core/build.gradle
index f3a72902d7..37d220c3fe 100644
--- a/grails-forge/grails-forge-core/build.gradle
+++ b/grails-forge/grails-forge-core/build.gradle
@@ -1,3 +1,5 @@
+import org.apache.grails.buildsrc.WriteGrailsVersionInfoTask
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
@@ -17,8 +19,6 @@
  *  under the License.
  */
 
-import org.grails.forge.internal.tasks.WriteGrailsVersionInfoTask
-
 plugins {
     id 'groovy'
     id 'java-library'
@@ -75,15 +75,19 @@ dependencies {
 }
 
 
-def grailsVersionInfo = tasks.register('grailsVersionInfo', 
WriteGrailsVersionInfoTask) {
-    version = projectVersion
-    outputDirectory = layout.buildDirectory.dir('version-info')
+def grailsVersionsPath = layout.buildDirectory.dir('version-info')
+def grailsVersionInfoTask = tasks.register('grailsVersionInfo', 
WriteGrailsVersionInfoTask)
+grailsVersionInfoTask.configure { WriteGrailsVersionInfoTask it ->
+    def grailsIncludedBuildName = 
rootProject.layout.projectDirectory.dir('..').asFile.name
+    def bomPublicationTask = 
gradle.includedBuild(grailsIncludedBuildName).task(':grails-bom:generatePomFileForMavenPublication')
+    it.dependsOn(bomPublicationTask)
+    it.bomPublicationFile = 
rootProject.layout.projectDirectory.file('../grails-bom/build/publications/maven/pom-default.xml')
+    it.versionsDirectory = grailsVersionsPath
 }
-
-sourceSets.main.resources.srcDir(grailsVersionInfo)
+sourceSets.main.resources.srcDir(grailsVersionsPath)
 
 tasks.named('build').configure {
-    it.dependsOn(grailsVersionInfo)
+    it.dependsOn(grailsVersionInfoTask)
 }
 
 rocker {
@@ -125,7 +129,7 @@ nohttp {
 
 ['processResources', 'sourcesJar', 'spotlessJavaMisc', 
'checkstyleNohttp'].each { name ->
     tasks.named(name).configure {
-        it.dependsOn copyGrailsWrapper
+        it.dependsOn(copyGrailsWrapper, grailsVersionInfoTask)
     }
 }
 
diff --git a/grails-gradle/gradle/checksum-config.gradle 
b/grails-gradle/gradle/checksum-config.gradle
index 610723a33d..023d359997 100644
--- a/grails-gradle/gradle/checksum-config.gradle
+++ b/grails-gradle/gradle/checksum-config.gradle
@@ -33,6 +33,7 @@ afterEvaluate {
     if (plugins.hasPlugin('maven-publish')) {
         def checksumTask = tasks.register('publishedChecksums', Checksum)
         checksumTask.configure { Checksum check ->
+            check.group = 'publishing'
             check.checksumAlgorithm = Checksum.Algorithm.SHA512
             check.outputDirectory = layout.buildDirectory.dir('checksums')
             check.dependsOn(tasks.withType(Jar))
@@ -41,6 +42,7 @@ afterEvaluate {
         def artifactsDir = layout.buildDirectory.dir('artifacts')
         def artifactsTask = tasks.register('savePublishedArtifacts')
         artifactsTask.configure {
+            it.group = 'publishing'
             it.outputs.dir(artifactsDir)
             it.dependsOn(tasks.withType(Jar))
         }

Reply via email to