Created
January 3, 2017 00:03
-
-
Save tmtrademarked/704e9ef8fab49cceceefcdadad3b328b to your computer and use it in GitHub Desktop.
Gradle Versioning, Redux
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// In version.properties: | |
major=0 | |
minor=1 | |
// In root-level build.gradle: | |
def readVersion = { -> | |
def versionPropsFile = file('../version.properties') | |
def Properties versionProps = new Properties() | |
versionProps.load(new FileInputStream(versionPropsFile)) | |
// Find the sha of the last commit to the version file on the current branch. | |
def current = "git rev-parse --abbrev-ref HEAD".execute() | |
def shaCmd = "git rev-list " + current.text.trim() + " --max-count=1 version.properties" | |
def versionSha = shaCmd.execute() | |
// Now count the number of commits from that change. That's how many builds have been run | |
// since we last updated the version. | |
def buildCmd = "git rev-list " + versionSha.text.trim() + "..HEAD --count" | |
def buildNum = buildCmd.execute().text.trim(); | |
assert buildNum.toInteger() < 1000: "Can only handle 3 digits for builds" | |
// Set the build number and return the properties. | |
versionProps['build'] = buildNum | |
return versionProps | |
} | |
def getBaseVersionCode = { -> | |
def versionInfo = readVersion() | |
def major = versionInfo['major'].toInteger() | |
def minor = versionInfo['minor'].toInteger() | |
def build = versionInfo['build'].toInteger() | |
return (major * 10000) + (minor * 1000) + build | |
} | |
def getBaseVersionName = { -> | |
def versionInfo = readVersion() | |
def major = versionInfo['major'] | |
def minor = versionInfo['minor'] | |
def build = versionInfo['build'] | |
return major + "." + minor + "." + build | |
} | |
// Helper function to create the relevant version code. | |
ext.getVersionCode = { int inflation -> | |
assert inflation < 1000: "Inflation can only be three digits" | |
return getBaseVersionCode() * 1000 + inflation | |
} | |
// Helper function to append a suffix if provided | |
ext.getVersionName = { String suffix -> | |
if (suffix == null) { | |
return getBaseVersionName() | |
} | |
return getBaseVersionName() + suffix | |
} | |
// In module-level build.gradle: | |
android { | |
// Set the version code and name based on variant. | |
applicationVariants.all { variant -> | |
def flavor = variant.mergedFlavor | |
def versionIncrement = 20; | |
def versionSuffix = ""; | |
def variantName = variant.getName(); | |
if (variantName.contains("alpha")) { | |
versionIncrement = 10; | |
versionSuffix = "-alpha" | |
} else if (variantName.contains("debug")) { | |
versionIncrement = 0; | |
versionSuffix = "-debug"; | |
} | |
flavor.versionName = getVersionName(versionSuffix); | |
flavor.versionCode = getVersionCode(versionIncrement) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment