Skip to content

Instantly share code, notes, and snippets.

@tmtrademarked
Created January 3, 2017 00:03
Show Gist options
  • Save tmtrademarked/704e9ef8fab49cceceefcdadad3b328b to your computer and use it in GitHub Desktop.
Save tmtrademarked/704e9ef8fab49cceceefcdadad3b328b to your computer and use it in GitHub Desktop.
Gradle Versioning, Redux
// 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