Skip to content

Instantly share code, notes, and snippets.

@osvalr
Forked from IliaEremin/app_version.gradle
Created October 25, 2019 11:17
Show Gist options
  • Save osvalr/b114732eeaee1dedea6292aed34587b8 to your computer and use it in GitHub Desktop.
Save osvalr/b114732eeaee1dedea6292aed34587b8 to your computer and use it in GitHub Desktop.
Npm version for gradle
final VERSION_CODE = 'versionCode'
final VERSION_NAME = 'versionName'
final PATH_TO_VERSIONING_FILE = 'app/gradle.properties'
final GROUP_NAME = 'bumper'
def getVersionFile() {
return file('gradle.properties')
}
def getVersionProps() {
def versionPropsFile = getVersionFile()
def versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
return versionProps
}
private Integer getVersionNamePatch() {
return (getVersionProps()[VERSION_NAME] =~ /\d+/)[2].toInteger()
}
private Integer getVersionNameMinor() {
return (getVersionProps()[VERSION_NAME] =~ /\d+/)[1].toInteger()
}
private Integer getVersionNameMajor() {
return (getVersionProps()[VERSION_NAME] =~ /\d+/)[0].toInteger()
}
private void commitAndSetTag(String versionName) {
Process addChanges = ['git', 'add', PATH_TO_VERSIONING_FILE].execute(null, project.rootDir)
addChanges.waitForProcessOutput(System.out, System.err)
Process createCommit = ['git', 'commit', "-m Release ${versionName}"].execute(null, project.rootDir)
createCommit.waitForProcessOutput(System.out, System.err)
Process createTag = ['git', 'tag', "v${versionName}".toString()].execute(null, project.rootDir)
createTag.waitForProcessOutput(System.out, System.err)
}
private def getAppVersionCode() {
return getVersionProps()[VERSION_CODE].toInteger()
}
private void saveChanges(String versionName, Integer versionCode) {
def versionProps = getVersionProps()
versionProps[VERSION_NAME] = versionName
versionProps[VERSION_CODE] = versionCode.toString()
versionProps.store(getVersionFile().newWriter(), null)
}
task bumperInit() {
group = GROUP_NAME
doLast {
def versionName = project.hasProperty('bumperVersionName') ? bumperVersionName : '1.0.0'
def versionCode = project.hasProperty('bumperVersionCode') ? bumperVersionCode : '1'
def propertyFile = getVersionFile()
if (!propertyFile.exists()) {
propertyFile.createNewFile()
}
def props = new Properties()
propertyFile.withReader { props.load(it) }
props.setProperty('versionName', versionName)
props.setProperty('versionCode', versionCode)
props.store(propertyFile.newWriter(), null)
}
}
task bumpVersionPatch () {
group = GROUP_NAME
doLast {
def versionCode = getAppVersionCode() + 1
def versionNameMajor = getVersionNameMajor()
def versionNameMinor = getVersionNameMinor()
def versionNamePatch = getVersionNamePatch() + 1
def versionName = "${versionNameMajor}.${versionNameMinor}.${versionNamePatch}".toString()
saveChanges(versionName, versionCode)
commitAndSetTag(versionName)
}
}
task bumperVersionMinor () {
group = GROUP_NAME
doLast {
def versionCode = getAppVersionCode() + 1
def versionNameMajor = getVersionNameMajor()
def versionNameMinor = getVersionNameMinor() + 1
def versionNamePatch = 0
def versionName = "${versionNameMajor}.${versionNameMinor}.${versionNamePatch}".toString()
saveChanges(versionName, versionCode)
commitAndSetTag(versionName)
}
}
task bumperVersionMajor () {
group = GROUP_NAME
doLast {
def versionCode = getAppVersionCode() + 1
def versionNameMajor = getVersionNameMajor() + 1
def versionNameMinor = 0
def versionNamePatch = 0
def versionName = "${versionNameMajor}.${versionNameMinor}.${versionNamePatch}".toString()
saveChanges(versionName, versionCode)
commitAndSetTag(versionName)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment