Skip to content

Commit 021ca65

Browse files
committed
[skip ci] rework versions task to depend on grails-core instead of pulling the bom remotely
1 parent 5f6c229 commit 021ca65

File tree

7 files changed

+126
-116
lines changed

7 files changed

+126
-116
lines changed

gradle/publish-config.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ afterEvaluate {
7272
if (plugins.hasPlugin('maven-publish')) {
7373
def checksumTask = tasks.register('publishedChecksums', Checksum)
7474
checksumTask.configure { Checksum check ->
75+
check.group = 'publishing'
7576
check.checksumAlgorithm = Checksum.Algorithm.SHA512
7677
check.outputDirectory = layout.buildDirectory.dir('checksums')
7778
check.dependsOn(tasks.withType(Jar))
@@ -80,6 +81,7 @@ afterEvaluate {
8081
def artifactsDir = layout.buildDirectory.dir('artifacts')
8182
def artifactsTask = tasks.register('savePublishedArtifacts')
8283
artifactsTask.configure {
84+
it.group = 'publishing'
8385
it.outputs.dir(artifactsDir)
8486
it.dependsOn(tasks.withType(Jar))
8587
}

grails-forge/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ allprojects {
6363

6464
tasks.withType(Test).configureEach { Task testTask ->
6565
def grailsIncludedBuildName = rootProject.layout.projectDirectory.dir('..').asFile.name
66+
logger.lifecycle("Configuring test task '${testTask.name}' to depend on included builds with name ${grailsIncludedBuildName}")
6667
testTask.dependsOn(
6768
gradle.includedBuild(grailsIncludedBuildName).task(':publishAllPublicationsToTestCaseMavenRepoRepository'),
6869
gradle.includedBuild('grails-gradle').task(':publishAllPublicationsToTestCaseMavenRepoRepository')
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* https://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.apache.grails.buildsrc
21+
22+
import groovy.transform.CompileStatic
23+
import groovy.xml.XmlSlurper
24+
import groovy.xml.slurpersupport.GPathResult
25+
import groovy.xml.slurpersupport.NodeChild
26+
import org.gradle.api.DefaultTask
27+
import org.gradle.api.GradleException
28+
import org.gradle.api.Project
29+
import org.gradle.api.file.DirectoryProperty
30+
import org.gradle.api.file.RegularFileProperty
31+
import org.gradle.api.model.ObjectFactory
32+
import org.gradle.api.provider.Property
33+
import org.gradle.api.tasks.CacheableTask
34+
import org.gradle.api.tasks.Input
35+
import org.gradle.api.tasks.InputFile
36+
import org.gradle.api.tasks.OutputDirectories
37+
import org.gradle.api.tasks.OutputDirectory
38+
import org.gradle.api.tasks.OutputFile
39+
import org.gradle.api.tasks.PathSensitive
40+
import org.gradle.api.tasks.PathSensitivity
41+
import org.gradle.api.tasks.TaskAction
42+
import org.xml.sax.SAXException
43+
44+
import javax.inject.Inject
45+
import javax.xml.parsers.ParserConfigurationException
46+
import java.nio.charset.StandardCharsets
47+
import java.nio.file.Files
48+
49+
@CompileStatic
50+
@CacheableTask
51+
abstract class WriteGrailsVersionInfoTask extends DefaultTask {
52+
53+
@Input
54+
final Property<String> projectVersion
55+
56+
@InputFile
57+
@PathSensitive(PathSensitivity.RELATIVE)
58+
final RegularFileProperty bomPublicationFile
59+
60+
@OutputDirectory
61+
final DirectoryProperty versionsDirectory
62+
63+
@Inject
64+
WriteGrailsVersionInfoTask(ObjectFactory objects, Project project) {
65+
projectVersion = objects.property(String).convention(project.provider {
66+
project.version as String
67+
})
68+
bomPublicationFile = objects.fileProperty()
69+
versionsDirectory = objects.directoryProperty()
70+
}
71+
72+
@TaskAction
73+
void writeVersionInfo() {
74+
File versionsDirectory = versionsDirectory.get().asFile
75+
if (versionsDirectory.exists()) {
76+
versionsDirectory.deleteDir()
77+
}
78+
versionsDirectory.mkdirs()
79+
80+
File versions = new File(versionsDirectory, 'grails-versions.properties')
81+
82+
File pomFile = bomPublicationFile.get().asFile
83+
84+
GPathResult pom = null
85+
try {
86+
pom = new XmlSlurper().parse(pomFile)
87+
} catch (IOException | SAXException | ParserConfigurationException e) {
88+
new GradleException("Unable to parse BOM publication file: ${pomFile.absolutePath}", e)
89+
}
90+
91+
TreeMap<String, String> props = []
92+
props.put("grails.version", getProjectVersion().get())
93+
((GPathResult) pom.getProperty("properties")).children().forEach(child -> {
94+
NodeChild node = (NodeChild) child
95+
props.put(node.name(), node.text())
96+
})
97+
98+
try (OutputStream out = Files.newOutputStream(versions.toPath())) {
99+
for (Map.Entry<String, String> entry : props.entrySet()) {
100+
getLogger().info("Writing version property: {} => {}", entry.getKey(), entry.getValue())
101+
String line = "${entry.getKey()}=${entry.getValue()}\n" as String
102+
out.write(line.getBytes(StandardCharsets.ISO_8859_1))
103+
}
104+
}
105+
}
106+
}

grails-forge/buildSrc/src/main/groovy/org/grails/forge/internal/tasks/WriteGrailsVersionInfoTask.java

Lines changed: 0 additions & 107 deletions
This file was deleted.

grails-forge/gradle/publish-config.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ afterEvaluate {
7272
if (plugins.hasPlugin('maven-publish')) {
7373
def checksumTask = tasks.register('publishedChecksums', Checksum)
7474
checksumTask.configure { Checksum check ->
75+
check.group = 'publishing'
7576
check.checksumAlgorithm = Checksum.Algorithm.SHA512
7677
check.outputDirectory = layout.buildDirectory.dir('checksums')
7778
check.dependsOn(tasks.withType(Jar))
@@ -80,6 +81,7 @@ afterEvaluate {
8081
def artifactsDir = layout.buildDirectory.dir('artifacts')
8182
def artifactsTask = tasks.register('savePublishedArtifacts')
8283
artifactsTask.configure {
84+
it.group = 'publishing'
8385
it.outputs.dir(artifactsDir)
8486
it.dependsOn(tasks.withType(Jar))
8587
}

grails-forge/grails-forge-core/build.gradle

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import org.apache.grails.buildsrc.WriteGrailsVersionInfoTask
2+
13
/*
24
* Licensed to the Apache Software Foundation (ASF) under one
35
* or more contributor license agreements. See the NOTICE file
@@ -17,8 +19,6 @@
1719
* under the License.
1820
*/
1921

20-
import org.grails.forge.internal.tasks.WriteGrailsVersionInfoTask
21-
2222
plugins {
2323
id 'groovy'
2424
id 'java-library'
@@ -75,15 +75,19 @@ dependencies {
7575
}
7676

7777

78-
def grailsVersionInfo = tasks.register('grailsVersionInfo', WriteGrailsVersionInfoTask) {
79-
version = projectVersion
80-
outputDirectory = layout.buildDirectory.dir('version-info')
78+
def grailsVersionsPath = layout.buildDirectory.dir('version-info')
79+
def grailsVersionInfoTask = tasks.register('grailsVersionInfo', WriteGrailsVersionInfoTask)
80+
grailsVersionInfoTask.configure { WriteGrailsVersionInfoTask it ->
81+
def grailsIncludedBuildName = rootProject.layout.projectDirectory.dir('..').asFile.name
82+
def bomPublicationTask = gradle.includedBuild(grailsIncludedBuildName).task(':grails-bom:generatePomFileForMavenPublication')
83+
it.dependsOn(bomPublicationTask)
84+
it.bomPublicationFile = rootProject.layout.projectDirectory.file('../grails-bom/build/publications/maven/pom-default.xml')
85+
it.versionsDirectory = grailsVersionsPath
8186
}
82-
83-
sourceSets.main.resources.srcDir(grailsVersionInfo)
87+
sourceSets.main.resources.srcDir(grailsVersionsPath)
8488

8589
tasks.named('build').configure {
86-
it.dependsOn(grailsVersionInfo)
90+
it.dependsOn(grailsVersionInfoTask)
8791
}
8892

8993
rocker {
@@ -125,7 +129,7 @@ nohttp {
125129

126130
['processResources', 'sourcesJar', 'spotlessJavaMisc', 'checkstyleNohttp'].each { name ->
127131
tasks.named(name).configure {
128-
it.dependsOn copyGrailsWrapper
132+
it.dependsOn(copyGrailsWrapper, grailsVersionInfoTask)
129133
}
130134
}
131135

grails-gradle/gradle/checksum-config.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ afterEvaluate {
3333
if (plugins.hasPlugin('maven-publish')) {
3434
def checksumTask = tasks.register('publishedChecksums', Checksum)
3535
checksumTask.configure { Checksum check ->
36+
check.group = 'publishing'
3637
check.checksumAlgorithm = Checksum.Algorithm.SHA512
3738
check.outputDirectory = layout.buildDirectory.dir('checksums')
3839
check.dependsOn(tasks.withType(Jar))
@@ -41,6 +42,7 @@ afterEvaluate {
4142
def artifactsDir = layout.buildDirectory.dir('artifacts')
4243
def artifactsTask = tasks.register('savePublishedArtifacts')
4344
artifactsTask.configure {
45+
it.group = 'publishing'
4446
it.outputs.dir(artifactsDir)
4547
it.dependsOn(tasks.withType(Jar))
4648
}

0 commit comments

Comments
 (0)