diff --git a/Jenkinsfile b/Jenkinsfile index e756c48..1672d7f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -51,103 +51,6 @@ ]) ) -def getVersion(part, returnGroup = false) { - def gradleFile = readFile(encoding: 'UTF-8', file: 'app/build.gradle') - def m = gradleFile =~ /([^\n]*(?:${part})(?:[^:]*:?\s+|\s*=\s*)"?)([.0-9]+)("?\s*(?:(?:\/\/|#)[^\n]*)?[\n])/ - if (m) returnGroup ? m[0] : m[0][2] - else return null -} - -def withGitPassword(id, body = { sh 'git version' }) { - withCredentials([usernamePassword([credentialsId: id, passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER'])]) { - // TODO: Move git_askpass.sh as a library resource - withEnv(["GIT_ASKPASS=/opt/jenkins-scripts/git_askpass.sh"]) { - body() - } - } -} - -def gitMerge(from, into, msg) { - sh(""" -git checkout ${from} -git checkout ${into} -git merge --no-ff ${from} -m '${msg}' - """) -} - -def gitPush(gitRemote, gitCommit, gitOpts = "") { - gitOpts = ( env.DRYRUN == 'true' ) ? "--dry-run ${gitOpts}" : gitOpts - sh("git push ${gitOpts} ${gitRemote} ${gitCommit}") -} - -def gitLog(bottom = null, top = 'HEAD') { - sh("git fetch --tags --quiet") - def from = bottom ?: 'tags/' + sh(script: "git tag -l | tail -1", returnStdout: true).trim() - sh(script: "git --no-pager log ${from}...${top} --pretty=format:'- %s' --reverse", returnStdout: true) -} - - -def prepareChangelogs(versionCode) { - lDir = 'fastlane/metadata/android' - // TODO: Test if latest changelogs have changed since last tag and use gitLog if not - sh(""" -for LOCALE in \$(ls -1d ${lDir}/??-??); do - cp -vf \${LOCALE}/changelogs/latest.txt \${LOCALE}/changelogs/${versionCode}.txt -done -""") -} - -def gitUpdateChangelogs(versionCode, gitBranch = null, gitRemote = 'origin') { - prepareChangelogs(versionCode) - def lDir = 'fastlane/metadata/android' - sh(""" -git status --porcelain ${lDir} | grep -q 'changelogs/${versionCode}\\.txt\$' \ -|| { echo 'Nothing to update'; exit 0; } - """) - if (gitBranch) sh(""" -git stash save --quiet --include-untracked changelogs -git checkout --quiet ${gitRemote}/${gitBranch} -git stash pop -""") - sh(""" -git add ${lDir}/*/changelogs/${versionCode}.txt -git commit --quiet -s -m 'Provide changelogs for version ${versionCode}' ${lDir} -""") - if (gitBranch) gitPush(gitRemote, gitBranch) -} - -def gitTag(version, gitRemote = 'origin' ) { - sh("git tag -a '${version}' -m 'Create new tag for version ${version}'") - gitPush(gitRemote, version) -} - -def setVersion(versionName, versionCode) { - def gradleFilePath = 'app/build.gradle' - def gradleFile = readFile(encoding: 'UTF-8', file: gradleFilePath) - gName = getVersion('versionName', true) - gCode = getVersion('versionCode', true) - gradleFile = gradleFile.replace(gName[0], gName[1] + versionName + gName[3]) - gradleFile = gradleFile.replace(gCode[0], gCode[1] + versionCode + gCode[3]) - writeFile(encoding: 'UTF-8', file: gradleFilePath, text: gradleFile) -} - -def gitUpdateVersion(versionName, versionCode, gitBranch = null, gitRemote = 'origin') { - def gradleFilePath = 'app/build.gradle' - def dryRun = ( env.DRYRUN == 'true' ) ? '--dry-run' : '' - setVersion(versionName, versionCode) - sh(""" -git status --porcelain ${gradleFilePath} | grep -q '${gradleFilePath}\$' \ -|| { echo 'Nothing to update'; exit 0; } - """) - if (gitBranch) sh(""" -git stash save --quiet versions -git checkout --quiet ${gitRemote}/${gitBranch} -git stash pop - """) - sh("git commit --quiet -s -m 'Update version from ${gName[2]}-${gCode[2]} to ${versionName}-${versionCode}' app/build.gradle") - if (gitBranch) gitPush(gitRemote, gitBranch) -} - // Define the remotes and the branches used to release from and to def releaseFrom = [ remote: 'origin', branch: 'devel' ] def releaseTo = [ remote: 'origin', branch: 'master' ] @@ -193,17 +96,17 @@ ] tasks = [ run: { - def currentVersion = [ name: getVersion('versionName') as String, code: getVersion('versionCode') as Integer ] + def currentVersion = [ name: android.getVersion('versionName') as String, code: android.getVersion('versionCode') as Integer ] echo("currentVersion = ${currentVersion.toString()}") - withGitPassword('bot-ci-dgm', { + lazyGit.withPassword('bot-ci-dgm', { // Fork a release branch as requested echo("Git logs since last tag:\n" + gitLog()) sh("git checkout -b release-${env.LAZY_INPUT}") - gitUpdateVersion(env.LAZY_INPUT, currentVersion.code + 1) - def nextVersion = [ name: getVersion('versionName') as String, code: getVersion('versionCode') as Integer ] + android.gitUpdateVersion(env.LAZY_INPUT, currentVersion.code + 1) + def nextVersion = [ name: android.getVersion('versionName') as String, code: android.getVersion('versionCode') as Integer ] echo("nextVersion = ${nextVersion.toString()}" ) - gitUpdateChangelogs(nextVersion.code) - gitPush(releaseFrom['remote'], "release-${env.LAZY_INPUT}") + android.gitUpdateChangelogs(nextVersion.code) + lazyGit.push(releaseFrom['remote'], "release-${env.LAZY_INPUT}") }) }, on: 'android', @@ -221,16 +124,16 @@ sh("ls -lA app/build/outputs/apk") }, run: { - def currentVersion = [ name: getVersion('versionName') as String, code: getVersion('versionCode') as Integer ] + def currentVersion = [ name: android.getVersion('versionName') as String, code: android.getVersion('versionCode') as Integer ] echo("currentVersion = ${currentVersion.toString()}") if ( env.DRYRUN != 'true' ) fastlane('android', 'alpha') - withGitPassword('bot-ci-dgm', { - gitMerge( + lazyGit.withPassword('bot-ci-dgm', { + lazyGit.merge( "${env.BRANCH_NAME}", "${releaseFrom['branch']}", "Merge changes from ${currentVersion['name']}-${currentVersion['code']} back into ${releaseFrom['branch']}" ) - gitPush(releaseFrom['remote'], releaseFrom['branch']) + lazyGit.push(releaseFrom['remote'], releaseFrom['branch']) }) }, on: 'android', @@ -262,16 +165,16 @@ }, run: { if ( env.DRYRUN != 'true' ) fastlane('android', 'production') -*/ def currentVersion = [ name: getVersion('versionName') as String, code: getVersion('versionCode') as Integer ] +*/ def currentVersion = [ name: android.getVersion('versionName') as String, code: android.getVersion('versionCode') as Integer ] echo("currentVersion = ${currentVersion.toString()}") - withGitPassword('bot-ci-dgm', { - gitMerge( + lazyGit.withPassword('bot-ci-dgm', { + lazyGit.merge( "${env.BRANCH_NAME}", "${releaseTo['branch']}", "Merge changes from ${currentVersion['name']}-${currentVersion['code']} into ${releaseTo['branch']}" ) - gitPush(releaseTo['remote'], releaseTo['branch']) - gitTag("${currentVersion.name}", releaseTo['remote']) + lazyGit.push(releaseTo['remote'], releaseTo['branch']) + lazyGit.tag("${currentVersion.name}", releaseTo['remote']) }) }, on: 'android',