14
14
* limitations under the License.
15
15
*/
16
16
17
+ import org.gradle.util.VersionNumber
18
+
17
19
plugins {
18
20
// https://docs.gradle.org/current/userguide/java_library_plugin.html
19
21
id ' java-library'
@@ -26,6 +28,9 @@ plugins {
26
28
27
29
// https://docs.gradle.org/current/userguide/idea_plugin.html
28
30
id ' idea'
31
+
32
+ // https://ajoberstar.org/grgit/grgit-gradle.html
33
+ id ' org.ajoberstar.grgit' version ' 3.1.1'
29
34
}
30
35
31
36
repositories {
@@ -140,3 +145,107 @@ jar {
140
145
)
141
146
}
142
147
}
148
+
149
+ task releaseCommitsAndTag () {
150
+ description ' Make release commits and the tag necessary for release'
151
+ group ' GitHub release'
152
+
153
+ doFirst {
154
+ checkReleasePrerequisites()
155
+ }
156
+
157
+ outputs. upToDateWhen {
158
+ def tag = releaseTag()
159
+ def tagExists = grgit. tag. list(). stream(). anyMatch { it. getName() == tag }
160
+ if (tagExists) {
161
+ logger. quiet(" Tag $tag exists" )
162
+ }
163
+ return tagExists
164
+ }
165
+
166
+ doLast {
167
+ def releaseMessage = " Release version $releaseVersion "
168
+ def tag = releaseTag()
169
+
170
+ setVersionInGradleProperties(releaseVersion)
171
+
172
+ logger. quiet(' Committing' )
173
+ grgit. add(patterns : [' gradle.properties' ])
174
+ grgit. commit(message : releaseMessage)
175
+
176
+ logger. quiet(' Tagging with tag {}' , tag)
177
+ grgit. tag. add(name : tag, annotate : true , message : releaseMessage)
178
+
179
+ setVersionInGradleProperties(nextSnapshotVersion)
180
+
181
+ logger. quiet(' Committing' )
182
+ grgit. add(patterns : [' gradle.properties' ])
183
+ grgit. commit(message : " Bump version to $nextSnapshotVersion " )
184
+ }
185
+ }
186
+
187
+ def checkReleasePrerequisites () {
188
+ if (! project. hasProperty(' releaseVersion' )) {
189
+ throw new GradleException (' releaseVersion property is not set' )
190
+ }
191
+
192
+ if (! (releaseVersion ==~ / \d +\.\d +\.\d +/ )) {
193
+ throw new GradleException (" Invalid releaseVersion format, must be 'x.y.z'" )
194
+ }
195
+
196
+ if (! project. hasProperty(' nextSnapshotVersion' )) {
197
+ throw new GradleException (' nextSnapshotVersion property is not set' )
198
+ }
199
+
200
+ if (! (nextSnapshotVersion ==~ / \d +\.\d +\.\d +-SNAPSHOT/ )) {
201
+ throw new GradleException (" Invalid nextSnapshotVersion format, must be 'x.y.z-SNAPSHOT'" )
202
+ }
203
+
204
+ def releaseVersionParsed = VersionNumber . parse(releaseVersion)
205
+ def nextSnapshotVersionParsed = VersionNumber . parse(nextSnapshotVersion)
206
+ if (nextSnapshotVersionParsed. getBaseVersion() <= releaseVersionParsed. getBaseVersion()) {
207
+ throw new GradleException (' Next snapshot version must be higher than release version' )
208
+ }
209
+
210
+ if (grgit. branch. current(). getName() != ' master' ) {
211
+ throw new GradleException (" Repository must be on branch 'master'" )
212
+ }
213
+ }
214
+
215
+ def setVersionInGradleProperties (ver ) {
216
+ logger. quiet(' Changing version in gradle.properties to {}' , ver)
217
+ file(' gradle.properties.new' ). withWriter { writer ->
218
+ file(' gradle.properties' ). eachLine { line ->
219
+ if (line ==~ / version=.*/ ) {
220
+ writer. writeLine(" version=${ ver} " )
221
+ } else {
222
+ writer. writeLine(line)
223
+ }
224
+ }
225
+ }
226
+ file(' gradle.properties.new' ). renameTo(' gradle.properties' )
227
+ }
228
+
229
+ task releasePush () {
230
+ description ' Push commits and release tag'
231
+ group ' GitHub release'
232
+
233
+ dependsOn releaseCommitsAndTag
234
+
235
+ outputs. upToDateWhen {
236
+ return false
237
+ }
238
+
239
+ doLast {
240
+ def githubRepo = ' https://github.com/aiven/aiven-kafka-connect-transforms'
241
+
242
+ grgit. push(tags : false , dryRun : false )
243
+ grgit. push(tags : true , dryRun : false )
244
+ logger. warn(' Please visit {}/releases/tag/{} and add the distribution files and changelog' , githubRepo, releaseTag())
245
+ }
246
+
247
+ }
248
+
249
+ def releaseTag () {
250
+ return ' v' + releaseVersion
251
+ }
0 commit comments