Use version build in version name and version code

This commit is contained in:
wpetit 2019-07-03 19:56:37 +02:00
parent 2e473f66bd
commit 089519b036
4 changed files with 53 additions and 8 deletions

20
Jenkinsfile vendored
View File

@ -35,9 +35,25 @@ pipeline {
}
}
stage('Check BUILD_ID') {
steps {
script {
if ( env.BUILD_ID.toInteger() > 99 ) {
error """
BUILD_ID > 99 !
You should must this branch build history to prevent invalid APK version code.
See https://stackoverflow.com/a/33495326 for more informations.
"""
}
}
}
}
stage('Generate release') {
environment {
BUILD_VERSION_CLASSIFIER = buildVersionClassifier()
VERSION_CLASSIFIER = versionClassifier()
VERSION_BUILD = "${env.BUILD_ID}"
RELEASE_CHANNEL = releaseChannel()
}
steps {
@ -105,7 +121,7 @@ Commit: ${env.GIT_COMMIT}
}
}
def buildVersionClassifier() {
def versionClassifier() {
return env.BRANCH_NAME != params.STABLE_BRANCH ?
( 'SNAPSHOT-' + sh(script: 'git log -1 --format=%h', returnStdout: true).trim() ) :
''

View File

@ -102,17 +102,17 @@ def enableProguardInReleaseBuilds = false
// From https://medium.com/@maxirosson/versioning-android-apps-d6ec171cfd82
def generateVersionCode() {
return rootProject.ext.minSdkVersion * 10000000 + rootProject.ext.versionMajor * 10000 + rootProject.ext.versionMinor * 100 + rootProject.ext.versionPatch
return rootProject.ext.versionMajor * 1000000 + rootProject.ext.versionMinor * 10000 + rootProject.ext.versionPatch * 100 + rootProject.ext.versionBuild
}
def generateVersionName() {
def versionName = "${rootProject.ext.versionMajor}.${rootProject.ext.versionMinor}.${rootProject.ext.versionPatch}"
if (rootProject.ext.versionClassifier == null && rootProject.ext.isSnapshot) {
rootProject.ext.versionClassifier = "SNAPSHOT"
}
if (rootProject.ext.versionClassifier != null) {
versionName += "-" + rootProject.ext.versionClassifier
}
if ( rootProject.ext.versionBuild != 0 ) {
versionName += "+" + rootProject.ext.versionBuild
}
return versionName;
}

View File

@ -8,8 +8,9 @@ buildscript {
versionMajor = 1
versionMinor = 0
versionPatch = 0
versionClassifier = System.getenv('BUILD_VERSION_CLASSIFIER')
isSnapshot = System.getenv('BUILD_IS_SNAPSHOT') == "y" ? true : false
versionBuild = System.getenv('VERSION_BUILD') ? System.getenv('VERSION_BUILD').toInteger() : 0
versionClassifier = System.getenv('VERSION_CLASSIFIER')
releaseChannel = System.getenv('RELEASE_CHANNEL')
buildToolsVersion = '28.0.3'

28
misc/versionCode.js Normal file
View File

@ -0,0 +1,28 @@
const assert = require('assert');
const MAX_VERSION_CODE = 2100000000;
function getVersionCode(major, minor, patch, build) {
return major * 1000000 + minor * 10000 + patch * 100 + build;
}
const tests = [
[1, 0, 0, 0],
[1, 0, 0, 1],
[1, 1, 0, 99],
[1, 1, 1, 0],
[99, 99, 0, 99],
[99, 99, 99, 0],
[99, 99, 99, 99],
];
let previousVersionCode = 0;
tests.forEach(t => {
let versionCode = getVersionCode(...t);
console.log(`Version: ${t.join('.')}`);
console.log(`Version code: ${versionCode}`);
assert.ok(versionCode < MAX_VERSION_CODE, `${versionCode} < ${MAX_VERSION_CODE} == false`);
assert.ok(versionCode > previousVersionCode, `${versionCode} > ${previousVersionCode} == false`);
console.log("--------");
previousVersionCode = versionCode;
});