Skip to content

Commit c284613

Browse files
committed
Add release task to build.gradle
1 parent 874f09e commit c284613

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

build.gradle

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17+
import org.gradle.util.VersionNumber
18+
1719
plugins {
1820
// https://docs.gradle.org/current/userguide/java_library_plugin.html
1921
id 'java-library'
@@ -26,6 +28,9 @@ plugins {
2628

2729
// https://docs.gradle.org/current/userguide/idea_plugin.html
2830
id 'idea'
31+
32+
// https://ajoberstar.org/grgit/grgit-gradle.html
33+
id 'org.ajoberstar.grgit' version '3.1.1'
2934
}
3035

3136
repositories {
@@ -140,3 +145,107 @@ jar {
140145
)
141146
}
142147
}
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

Comments
 (0)