# HG changeset patch # User smith@nwoca.org # Date 1467226051 -3600 # Node ID 49a220a1bde08973b38d1d3694727477f484d4f6 # Parent b628d49d2891e6dee935c03007cbbadec7e98ef2 DEP-11: allow keywords to calculate release version based on current branch diff -r b628d49d2891 -r 49a220a1bde0 scripts/release.groovy --- a/scripts/release.groovy Wed Jun 29 13:57:17 2016 +0100 +++ b/scripts/release.groovy Wed Jun 29 19:47:31 2016 +0100 @@ -4,15 +4,15 @@ import groovy.transform.TupleConstructor /** -This script implements the SSDT branching strategy based on hg flow + This script implements the SSDT branching strategy based on hg flow and dependency resolution locking. -The intention is to automate of creation of correctly configured release branches. + The intention is to automate of creation of correctly configured 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. + The script does NOT "hg push --new-branch". That step is left for you + if the branch was created correctly. */ @@ -29,9 +29,12 @@ if (args.size() < 1) { println """ - usage: release.groovy {releaseVersion}\n - e.g: release.groovy 1.6.0 - + usage: release.groovy {major|minor|patch|n.n.n}\n + e.g: release.groovy minor + + If "major", "minor" or "patch" is specified, then the release version is + calculated based on the current branch. Otherwise specify a specific version. + If release ends in ".0", then will create 'release' stream, otherwise 'hotfix'. For hotfix, current working branch should be the release branch being hotfix'ed. @@ -45,12 +48,24 @@ System.exit(0) } -def releaseVersion = args[0] +def releaseVersion -def hotfix = !releaseVersion.endsWith('.0') +if ( args[0] == 'major') { + releaseVersion = branch.version.nextMajor() +} else if ( args[0] == 'minor') { + releaseVersion = branch.version.nextMinor() +} else if ( args[0] == 'patch') { + releaseVersion = branch.version.nextPatch() +} else { + releaseVersion = new Version(*args[0].split('\\.')*.toInteger()) +} + +def hotfix = releaseVersion.patch > 0 + def stream = hotfix ? 'hotfix' : 'release' -println "Creating $stream branch for $releaseVersion" +println "Preparing to create $stream branch for version $releaseVersion" +println() checkForSnapshots() @@ -64,7 +79,7 @@ println "hg update ${stream}/v${releaseVersion}".execute().text println "Starting dependency lock via gradle... (please wait)" -println "cmd /c gradlew.bat deleteGLobalLock generateGlobalLock saveGlobalLock".execute().text +println "cmd /c gradlew.bat deleteGlobalLock generateGlobalLock saveGlobalLock".execute().text println 'hg commit -A release.lock -m "lock dynamic dependencies for release"'.execute().text @@ -92,10 +107,26 @@ Integer major = 0 Integer minor = 0 Integer patch = 0 - Boolean snapshot = true + Boolean snapshot = false + + Version nextMajor() { + new Version(major + 1, 0, 0) + } - Version nextVersion() { - new Version(major, minor + 1, 0) + Version nextMinor() { + if (snapshot) { + new Version(major, minor , 0) + } else { + new Version(major, minor + 1, 0) + } + } + + Version nextSnapshot() { + new Version(major, minor + 1, 0,true) + } + + Version nextPatch() { + new Version(major, minor, patch + 1) } String toString() { @@ -165,6 +196,7 @@ def getHash() { generateMD5(name) } + def generateMD5(String s) { def digest = java.security.MessageDigest.getInstance("MD5") digest.update(s.bytes); @@ -177,10 +209,10 @@ }.collect { it.replaceAll('\\s+',' ').split(' ')[0].split('/')[1] - 'v' }.collect { - new Version(*it.split('\\.')*.toInteger()) + new Version(*it.split('\\.')*.toInteger(),true) }.sort { v1, v2 -> v2 <=> v1 } - return versions ? versions.first().nextVersion() : new Version().nextVersion() + return versions ? versions.first().nextSnapshot() : new Version().nextSnapshot() }