@ -24,39 +24,108 @@ ext {
task configureVersionInfo {
task configureVersionInfo {
try {
try {
// Users can configure behavior by setting properties on the command
// line:
//
// jmeVersionName:
// If set this will override all automatic version detection .
//
// useCommitHashAsVersionName:
// If there is no jmeVersionName set and the current commit has no
// specific tag then setting this to 'true' will cause the version to
// be the full commit ID .
//
// includeBranchInVersion:
// Set to true if a non - master branch name should be included in the automatically
// generated version .
def grgit = Grgit . open ( project . file ( '.' ) )
def grgit = Grgit . open ( project . file ( '.' ) )
def head = grgit . head ( )
def head = grgit . head ( )
jmeRevision = grgit . log ( includes: [ head ] ) . size ( )
jmeRevision = grgit . log ( includes: [ head ] ) . size ( )
jmeGitHash = head . id
jmeGitHash = head . id
jmeShortGitHash = head . abbreviatedId
jmeShortGitHash = head . abbreviatedId
jmeBranchName = grgit . branch . current . name
jmeBranchName = grgit . branch . current . name
// This code will find an exact - match tag if the current
// commit is the same as the tag commit .
jmeGitTag = grgit . tag . list ( ) . find { it . commit = = head }
jmeGitTag = grgit . tag . list ( ) . find { it . commit = = head }
def latestTag ;
if ( jmeGitTag ) {
// Just use the name . We keep jmeGitTag separate because there
// is some logic that wants to know if this specific commit has
// a tag versus 'whatever tag we are a child of' . . . which is what
// 'latestTag' will be .
jmeGitTag = jmeGitTag . name
latestTag = jmeGitTag ;
} else {
// Use describe to find the most recent tag . Unfortunately ,
// in this version of grgit , we don 't have the ' always ' options
// so we can ' t make as many assumptions about the format of the
// string .
// If the commit is an exact match then it will return just the
// tag name . . . else it will be tagName - commitCount - abbreviatedId
// We ' ll use some groovy regex magic to get the tag either way .
def describe = grgit . describe ( )
def fullDescribe = ( describe = ~ /(.*?)-(\d+)-g$jmeShortGitHash/ )
latestTag = fullDescribe ? fullDescribe [ 0 ] [ 1 ] : describe
println "Latest tag:" + latestTag
}
// We could enhance this with some more regex if we wanted to sanity
// check that it was formatted like our versions .
def tagVersion = ( latestTag = ~ /v?(.*)/ ) [ 0 ] [ 1 ] ;
// If the branch is not master then use the tag .
if ( jmeBranchName ! = "master" ) {
jmeVersion = tagVersion
}
if ( jmeVersionName = = "" ) {
// Parse out just the base version part . - SNAPSHOT versions
if ( jmeGitTag ! = null ) {
// shouldn ' t really include our release suffixes
jmeGitTag = jmeGitTag . name
def baseVersion = ( tagVersion = ~ /(\d+\.\d+.\d+)/ )
jmeFullVersion = jmeGitTag
baseVersion = baseVersion . size ( ) > 0 ? baseVersion [ 0 ] [ 0 ] : tagVersion
if ( ! jmeVersionName ) {
// If there is a specific tag for the top commit then we always
// use that .
if ( jmeGitTag ) {
println "Using GIT tag as version"
jmeFullVersion = tagVersion ; // already cleaned up
jmeVersionTag = "" // and no SNAPSHOT suffix for an exact version tag
// Note: this will not automatically add SNAPSHOT if the user has
// local changes that they haven ' t committed . Technically , only
// real CI builds should be using non - SNAPSHOT versions so we may
// eventually want to change the script to always use - SNAPSHOT with
// a CI option to turn it off .
// We could also check the grgit . status for unstaged modified / removed files .
// def unstaged = grgit . status ( ) . unstaged ;
// def modCount = unstaged . modified . size ( ) + unstaged . removed . size ( )
// . . . but that seems like a wasteful check considering only official
// version builds should not have a - SNAPSHOT .
} else if ( useCommitHashAsVersionName = = "true" & & jmeGitHash ) {
// The user has opted to use the hash . . . and we actually have
// a hash .
println "Using commit ID as version"
jmeFullVersion = jmeGitHash ;
jmeVersionTag = ""
jmeVersionTag = ""
if ( jmeFullVersion . startsWith ( "v" ) & & Character . isDigit ( jmeFullVersion . charAt ( 1 ) ) ) {
jmeFullVersion = jmeFullVersion . substring ( 1 ) ;
}
} else {
} else {
if ( useCommitHashAsVersionName = = "true" & & jmeGitHash ! = null & & ! jmeGitHash . equals ( "" ) ) {
println "Auto-detecting version"
jmeFullVersion = jmeGitHash
jmeVersionTag = "SNAPSHOT"
jmeVersionTag = ""
} else {
if ( includeBranchInVersion = = "true" & & jmeBranchName ! = "master" ) {
jmeFullVersion = "${jmeVersion}-" ;
jmeFullVersion = baseVersion + "-" + jmeBranchName + "-" + jmeVersionTag ;
if ( jmeBranchName ! = "master" ) jmeFullVersion + = "${jmeBranchName}-" ;
} else {
jmeFullVersion + = "SNAPSHOT"
jmeFullVersion = baseVersion + "-" + jmeVersionTag ;
jmeVersionTag = "SNAPSHOT"
}
}
}
}
} else {
} else {
jmeVersionTag = ""
// Just use defaults
println "Using user-defined version"
jmeFullVersion = jmeVersionName
jmeFullVersion = jmeVersionName
jmeVersionTag = "SNAPSHOT"
}
}
println ( "Revision: ${jmeRevision}" )
println ( "Revision: ${jmeRevision}" )
println ( "Hash: ${jmeGitHash}" )
println ( "Hash: ${jmeGitHash}" )
println ( "Short Hash: ${jmeShortGitHash}" )
println ( "Short Hash: ${jmeShortGitHash}" )
@ -64,7 +133,8 @@ task configureVersionInfo {
println ( "Build Date: ${jmeBuildDate}" )
println ( "Build Date: ${jmeBuildDate}" )
println ( "Build Branch: ${jmeBranchName}" )
println ( "Build Branch: ${jmeBranchName}" )
println ( "Use commit hash as version ${useCommitHashAsVersionName}" )
println ( "Use commit hash as version ${useCommitHashAsVersionName}" )
println ( "Build Tag: ${jmeVersionTag}" )
println ( "Base Version: ${baseVersion}" )
println ( "Build Suffix: ${jmeVersionTag}" )
println ( "Build Version: ${jmeFullVersion}" )
println ( "Build Version: ${jmeFullVersion}" )
} catch ( ex ) {
} catch ( ex ) {