Saturday, September 6, 2014

Automatic versioning and increment using Git tags and Gradle

How do you set versions for you Android app? There are many ways at it. At the manifest, at the gradle in a "def", in a version.properties file... But, if you are looking for a cleaner way where you don't have to actually change a file, and it will continuously increment after each commit - here it is.


Lets get started:
  1. We will be using the git command "git describe --tags --long" this commands shows us some useful info:
    [LATEST_TAG_NAME]-[HOW FAR AM I FROM THAT TAG]-[COMMIT HASH] .
    For example - if our last tag was "1.4.3" and I'm currently checked out 23 commits ahead, the output will be: 1.4.3-23-g3s4s3dsf
  2. Another helpful thing we will be using is a trick to turn version name into version code, have a look at Jake Wharton post to see where we got inspired from.
  3. Open up your build.gradle and set the code: 
  4. android {
    defaultConfig {
    ...
    // Fetch the version according to git latest tag and "how far are we from last tag"
    def longVersionName = "git -C ${rootDir} describe --tags --long".execute().text.trim()
    def (fullVersionTag, versionBuild, gitSha) = longVersionName.tokenize('-')
    def(versionMajor, versionMinor, versionPatch) = fullVersionTag.tokenize('.')
    // Set the version name
    versionName "$versionMajor.$versionMinor.$versionPatch($versionBuild)"
    // Turn the version name into a version code
    versionCode versionMajor.toInteger() * 100000 +
    versionMinor.toInteger() * 10000 +
    versionPatch.toInteger() * 1000 +
    versionBuild.toInteger()
    // Friendly print the version output to the Gradle console
    printf("\n--------" + "VERSION DATA--------" + "\n" + "- CODE: " + versionCode + "\n" +
    "- NAME: " + versionName + "\n----------------------------\n")
    ...
    }
    }
    view raw build.gradle hosted with ❤ by GitHub
    Assumption - this script assumes that your tags don't have a prefix of some kind.

No comments:

Post a Comment