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))
}