# HG changeset patch # User smith@nwoca.org # Date 1467151281 -3600 # Node ID 5bebb590b30e0f5fc4cfe60e94fe63f3528bf507 # Parent 0ca4f3c952b74d83a915b7b90180069946ed92e1 DEP-11: determine project version based on branch diff -r 0ca4f3c952b7 -r 5bebb590b30e init20.gradle --- a/init20.gradle Mon Jun 27 19:50:00 2016 +0100 +++ b/init20.gradle Tue Jun 28 23:01:21 2016 +0100 @@ -1,5 +1,7 @@ import groovy.sql.Sql +import groovy.transform.Sortable import groovy.transform.ToString +import groovy.transform.TupleConstructor buildscript { repositories { @@ -73,8 +75,7 @@ gradle.ext.branchName = gradle.branch.name gradle.ext.branchStream = gradle.branch.stream gradle.ext.branchHash = gradle.branch.hash -println "${gradle.hgRepositoryUrl} ${gradle.branch} ${gradle.branch.imageId} ${gradle.branch.deployName}" -println "$gradle.runtimeInfo" +println "${gradle.hgRepositoryUrl} ${gradle.branch} ${gradle.branch.version}" loadEnvironments() @@ -344,23 +345,33 @@ def void projectsEvaluated(Gradle gradle) { def ssdtArtifactory = 'http://repos.ssdt.nwoca.org/artifactory' Project root = gradle.getRootProject() + + + def branchVersioning = gradle.rootProject.version == 'unspecified' + root.allprojects { def thisProject = delegate thisProject.status = 'integration' if (gradle.branchStream) { - thisProject.status = 'integration' - def fixupVersion = thisProject.version - ".SNAPSHOT" - if (gradle.branchStream == 'feature') { - fixupVersion = fixupVersion + ".SNAPSHOT" + if (branchVersioning) { + thisProject.version = gradle.branch.version + thisProject.status = gradle.branch.defaultDependencyStatus + } else { + + thisProject.status = 'integration' + def fixupVersion = thisProject.version - ".SNAPSHOT" + if (gradle.branchStream == 'feature') { + fixupVersion = fixupVersion + ".SNAPSHOT" + } + if (gradle.branchStream == 'develop') { + fixupVersion = fixupVersion + ".SNAPSHOT" + } + if (gradle.branchStream in ['production', 'release', 'hotfix']) { + thisProject.status = 'release' + } + thisProject.version = fixupVersion } - if (gradle.branchStream == 'develop') { - fixupVersion = fixupVersion + ".SNAPSHOT" - } - if (gradle.branchStream in ['production', 'release','hotfix']) { - thisProject.status = 'release' - } - thisProject.version = fixupVersion } configurations.all { @@ -582,12 +593,33 @@ } +@TupleConstructor +@Sortable +class Version { + + Integer major = 0 + Integer minor = 0 + Integer patch = 0 + Boolean snapshot = true + + Version nextVersion() { + new Version(major, minor + 1, 0) + } + + String toString() { + "${major}.${minor}.${patch}${snapshot ? '.SNAPSHOT' : ''}" + } + +} + + @ToString(includes=['name','shortName','buildVersion','imageId','deployName'],includeNames= true) class BranchInfo { def name def stream = "none" def buildNumber = "" def changeset = "" + def version BranchInfo(name) { this.name = name @@ -598,22 +630,37 @@ determineStream() buildNumber = System.getenv('bamboo_buildNumber') ?: "" changeset = System.getenv('bamboo_planRepository_revision') ?: "" - } String getDefaultDependencyStatus() { - return stream in ['release','hotfix'] ? 'release' : 'integration' + return isRelease() ? 'release' : 'integration' } - - def getShortName() { + + private boolean isRelease() { + return stream in ['release', 'hotfix'] + } + + def getShortName() { def result = name.contains('/') ? name.split('/')[1] : name } - def getBuildVersion() { - stream in ['release','hotfix'] ? shortName - "v": "" + String getBuildVersion() { + def v = isRelease() ? shortName - "v": "" + return v } - - def getImageId() { + + def Version getVersion() { + if (!version) { + if (isRelease()) { + version = new Version(*getBuildVersion().split('\\.')*.toInteger(), false) + } else { + version = findSnapshotVersion() + } + } + return version + } + + def getImageId() { (buildVersion ?: shortName.take(25)) + (buildNumber ? "-${buildNumber}" : "-0") } @@ -632,6 +679,20 @@ new BigInteger(1, digest.digest()).toString(16).padLeft(32, '0') } + private findSnapshotVersion() { + def versions = "hg branches --closed".execute().text.split('\n').findAll { + it.startsWith( 'release') || it.startsWith( 'hotfix') + }.collect { + it.replaceAll('\\s+',' ').split(' ')[0].split('/')[1] - 'v' + }.collect { + new Version(*it.split('\\.')*.toInteger()) + }.sort { v1, v2 -> v2 <=> v1 } + + return versions ? versions.first().nextVersion() : new Version().nextVersion() + + } + + def determineName() { try { def branch = "hg branch".execute().text.trim() diff -r 0ca4f3c952b7 -r 5bebb590b30e scripts/release.groovy --- a/scripts/release.groovy Mon Jun 27 19:50:00 2016 +0100 +++ b/scripts/release.groovy Tue Jun 28 23:01:21 2016 +0100 @@ -3,7 +3,7 @@ /** This script implements the SSDT branching strategy based on hg flow. -The intension is to reduce dudgery of creating release branches. The +The intention is to reduce drudgery 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. @@ -32,7 +32,7 @@ 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 + the initial setting of the version. These are assumed to be 'latest.integration' changes. """