From 31349c553d3db10289fa59bac45fa41f0041b32e Mon Sep 17 00:00:00 2001
From: Nikolaus Krismer <nikolaus.krismer@uibk.ac.at>
Date: Wed, 13 Aug 2014 14:18:29 +0200
Subject: [PATCH] added changelog generation to build process   (by now the
 changelog is not checked in into git)

---
 build.gradle | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/build.gradle b/build.gradle
index 5337a644..4a40cb65 100644
--- a/build.gradle
+++ b/build.gradle
@@ -107,6 +107,25 @@ def getDate() {
 	return formattedDate
 }
 
+def readGitTags() {
+	def tags = []
+	def proc = "git tag".execute()
+	proc.in.eachLine { line -> tags += line}
+	Collections.reverse( tags )
+
+	tags
+}
+
+ def readGitMessages(String tag, String prevTag) {
+	def message = []
+	def range = (prevTag == null || prevTag == "") ? "$tag" : "$prevTag..$tag"
+	def proc = "git log $range --oneline --no-merges".execute()
+	proc.in.eachLine { line -> message += line }
+	proc.err.eachLine { line -> println line }
+
+	message
+}
+
 // Detailled settings (dependencies, tasks, task configuration, ...)
 
 repositories {
@@ -276,6 +295,25 @@ vagrantDestroy.doFirst {
 
 // Custom task definitions
 
+task changelog << {
+	def fileChangelog = new File('CHANGELOG.md')
+	def tags = ["HEAD"] + readGitTags()
+	def numTags = tags.size();
+	def prevTag
+	def tag
+
+	fileChangelog.delete()
+	for (int i = 0; i < numTags; i++) {
+		tag = tags[i];
+		prevTag = tags[i+1]
+
+		fileChangelog << "- Version ${tag}:\n".replaceAll("Version HEAD", "Upcoming version")
+		def message = readGitMessages(tag, prevTag)
+		message.each{fileChangelog << "  - $it\n"}
+		fileChangelog << "\n"
+	}
+}
+
 task cleanAfterDaily(type: Delete) {
 	delete "$buildDir/dependency-cache"
 	delete "$buildDir/tmp"
@@ -371,7 +409,7 @@ task vagrantPrepare << {
 
 task jarAll(dependsOn: [jar, javadocJar, sourcesJar, staticJar, testJar])
 task buildAll(dependsOn: [jarAll, build])
-task daily(dependsOn: [clean, asciidoctor, check, javadoc, jarAll])
+task daily(dependsOn: [clean, asciidoctor, changelog, check, javadoc, jarAll])
 task release
 
 // task dependencies
-- 
GitLab