diff scripts/release.groovy @ 208:f200b931ea9d

add release and hgflow scripts
author smith@nwoca.org
date Sat, 19 Dec 2015 14:26:46 +0000
parents
children 5bebb590b30e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/release.groovy	Sat Dec 19 14:26:46 2015 +0000
@@ -0,0 +1,93 @@
+#!groovy
+
+/**
+This script implements the SSDT branching strategy based on hg flow.  
+
+The intension is to reduce dudgery of creating release branches.  The 
+script tries to do the right thing based on standard SSDT project structures, 
+but it is the user's responsibility to ensure it's correct.
+
+The script does NOT "hg push --new-branch".  That step is left for you
+if the branch was created correctly.
+
+*/
+	def project = new Properties()
+
+	if (new File('gradle.properties').exists() ) {
+		project.load(new File('gradle.properties').newInputStream())
+	}	
+	
+	println "\nCurrent project:"
+	println "\tversion: " + project.version ?: "Unknown"
+	println "-" * 20
+	
+if (args.size() < 2) {
+	println """	
+	usage:  release.groovy {releaseVersion} {nextVersion}\n
+	  e.g:  release.groovy 1.6.0 1.7.0    (SNAPSHOT will be added automatically)
+	  
+	If release ends in ".0", then will create 'release' stream, otherwise 'hotfix'.
+	For hotfix, current working branch should be the release branch.
+	
+	Recommend that this script be executed in a fresh clone of the repo.
+	
+	** Any uncommitted changes in the working directory will be committed with
+	   the initial setting of the version. This are assumed to be 
+	   'latest.integration' changes.
+"""	
+
+	System.exit(0)
+}
+
+def releaseVersion = args[0]
+def nextVersion = args[1]
+def hotfix = !releaseVersion.endsWith('.0')
+def stream = hotfix ? 'hotfix' : 'release'
+
+println "Creating ${hotfix ? 'hotfix' : 'release'} branch for $releaseVersion"
+
+checkForSnapshots()
+
+println "hg flow $stream start v${releaseVersion} --dry-run".execute().text
+
+println "Continue? Enter = Yes, ^C to cancel"
+System.in.newReader().readLine()
+
+updateVersion(releaseVersion)
+
+println 'hg com -m "release: set release version"'.execute().text
+
+println "hg flow ${stream} start v${releaseVersion} --dirty".execute().text
+
+println "hg update default".execute().text
+
+updateVersion(nextVersion + ".SNAPSHOT")
+
+println 'hg com -m "release: set next release version"'.execute().text
+
+println "hg update ${stream}/v${releaseVersion}".execute().text
+
+println "Done! Created $releaseVersion $stream branch."
+println "      Verify the branch created correctly then push the new branch."
+println "      If any problems, then delete repo and clone fresh repository."
+
+def updateVersion(String newVersion) {
+
+	new File('gradle.properties').write(
+		new File('gradle.properties').text.replaceAll(/version=(.*)/,"version=$newVersion")
+	)
+}
+
+def checkForSnapshots() {
+		def lines = new File('gradle.properties').readLines() + new File('build.gradle').readLines()
+		def snapshots = lines.collect { it.trim() }.findAll{ 
+			it.contains('.SNAPSHOT') && !it.startsWith('version=') ||
+			it.contains('latest.') && (it.startsWith('compile') || it.startsWith('runtime'))
+		}
+		if (snapshots) {
+			println "project contains SNAPSHOT dependencies: \n\t" + snapshots.join('\n\t')
+			System.exit(1)
+		}
+
+}
+