forked from gocd/gocd-plugin-gradle-task-helpers
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate-plugin-xml.gradle
128 lines (113 loc) · 4.26 KB
/
generate-plugin-xml.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
* Copyright 2019 ThoughtWorks, Inc.
*
* Licensed 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
*
* http://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.
*/
private static String xmlTemplate(Project project) {
def gocdPlugin = project.gocdPlugin
def targetOsSnippet = ""
if (gocdPlugin.targetOs != null && !gocdPlugin.targetOs.isEmpty()) {
String values = gocdPlugin.targetOs.collect({eachTargetOs -> "<value>${eachTargetOs}</value>"}).join("\n${' ' * 10}")
targetOsSnippet = """<target-os>
${values}
</target-os>"""
}
return """
<!--
~ Copyright ${java.time.Year.now().getValue()} ThoughtWorks, Inc.
~
~ Licensed 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
~
~ http://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.
-->
<go-plugin id="${gocdPlugin.id}" version="1">
<about>
<name>${gocdPlugin.name}</name>
<version>${project.version}</version>
<target-go-version>${gocdPlugin.goCdVersion}</target-go-version>
<description>${gocdPlugin.description}</description>
<vendor>
<name>${gocdPlugin.vendorName}</name>
<url>${gocdPlugin.vendorUrl}</url>
</vendor>
${targetOsSnippet}
</about>
</go-plugin>
""".stripIndent().trim()
}
private static String pluginProperties(Project project) {
def gocdPlugin = project.gocdPlugin
return """
#
# Copyright ${java.time.Year.now().getValue()} ThoughtWorks, Inc.
#
# Licensed 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
#
# http://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.
#
id=${gocdPlugin.id}
name=${gocdPlugin.name}
version=${project.version}
goCdVersion=${gocdPlugin.goCdVersion}
description=${gocdPlugin.description}
vendorName=${gocdPlugin.vendorName}
vendorUrl=${gocdPlugin.vendorUrl}
""".stripIndent().trim()
}
project.afterEvaluate {
project.gocdPlugin.pluginProject.with { Project pluginProject ->
def generatedResourcesOutput = pluginProject.file("src/main/resources-generated")
pluginProject.sourceSets {
main {
resources {
output.dir generatedResourcesOutput, builtBy: 'generateResources'
srcDirs += generatedResourcesOutput
}
}
pluginProject.tasks.create('generateResources') { thisTask ->
thisTask.outputs.upToDateWhen {false}
outputs.dir(generatedResourcesOutput)
doFirst {
project.delete(generatedResourcesOutput)
generatedResourcesOutput.mkdirs()
new File(generatedResourcesOutput, "plugin.xml").setText(xmlTemplate(project), "utf-8")
new File(generatedResourcesOutput, "plugin.properties").setText(pluginProperties(project), "utf-8")
}
}
processResources {
dependsOn generateResources
}
test {
java {
runtimeClasspath += configurations.compileClasspath
}
}
}
}
}