status-mobile/ci/Jenkinsfile.combined

160 lines
4.9 KiB
Plaintext

pipeline {
agent { label 'master' }
options {
disableConcurrentBuilds()
/* Prevent Jenkins jobs from running forever */
timeout(time: 25, unit: 'MINUTES')
/* Limit builds retained */
buildDiscarder(logRotator(
numToKeepStr: '10',
daysToKeepStr: '30',
artifactNumToKeepStr: '10',
))
}
stages {
stage('Prep') {
steps { script {
println "Current JOB: ${env.JOB_NAME}"
/* load common lib */
cmn = load('ci/common.groovy')
/* just for a shorter access */
btype = cmn.getBuildType()
/* to avoid missing build tag parallel builds */
print "Build Number: ${cmn.tagBuild(true)}"
} }
}
stage('Build') {
parallel {
stage('MacOS') {
when { expression { btype != 'release' } }
steps { script {
osx = cmn.buildBranch('status-react/combined/desktop-macos')
} } }
stage('Linux') {
when { expression { btype != 'release' } }
steps { script {
nix = cmn.buildBranch('status-react/combined/desktop-linux')
} } }
stage('iOS') { steps { script {
ios = cmn.buildBranch('status-react/combined/mobile-ios')
} } }
stage('Android') { steps { script {
dro = cmn.buildBranch('status-react/combined/mobile-android')
} } }
stage('Android e2e') { steps { script {
e2e = cmn.buildBranch('status-react/combined/mobile-android', 'e2e')
} } }
}
}
stage('Archive') {
steps { script {
sh('rm -f pkg/*')
if (btype != 'release') {
cmn.copyArts('status-react/combined/desktop-macos', osx.number)
cmn.copyArts('status-react/combined/desktop-linux', nix.number)
}
cmn.copyArts('status-react/combined/mobile-ios', ios.number)
cmn.copyArts('status-react/combined/mobile-android', dro.number)
cmn.copyArts('status-react/combined/mobile-android', e2e.number)
cmn.copyArts('status-react/combined/mobile-ios', ios.number)
archiveArtifacts('pkg/*')
} }
}
stage('Upload') {
steps { script {
e2eUrl = cmn.uploadArtifact(cmn.pkgFind('e2e.apk'))
apkUrl = cmn.uploadArtifact(cmn.pkgFind("${btype}.apk"))
if (btype != 'release') {
dmgUrl = cmn.uploadArtifact(cmn.pkgFind('dmg'))
appUrl = cmn.uploadArtifact(cmn.pkgFind('AppImage'))
} else {
dmgUrl = null
appUrl = null
}
/* special case for iOS Diawi links */
ipaUrl = ios.getBuildVariables().get('DIAWI_URL')
/* add URLs to the build description */
cmn.setBuildDesc(
Apk: apkUrl,
e2e: e2eUrl,
iOS: ipaUrl,
App: appUrl,
Mac: dmgUrl
)
} }
}
stage('Notify') {
steps { script {
def dmgLink = "<${dmgUrl}|MacOS>"
def appLink = "<${appUrl}|AppImage>"
def message = (
(env.CHANGE_ID != null ?
"Build PR #${BRANCH_NAME}(${CHANGE_BRANCH}) success! " :
"Build ${btype} success! "
)+
"<${currentBuild.absoluteUrl}|${currentBuild.displayName}> "+
"(${currentBuild.durationString})\n"+
"Packages: <${apkUrl}|Android>, (<${e2eUrl}|e2e>), <${ipaUrl}|iOS>"
)
if (dmgUrl != null) {
message = message + ", <${dmgUrl}|MacOS>"
}
if (appUrl != null) {
message = message + ", <${appUrl}|AppImage>"
}
slackSend(
message: message,
color: 'good'
)
if (env.CHANGE_ID != null) {
cmn.githubNotify(
apkUrl, e2eUrl, ipaUrl, dmgUrl, appUrl,
env.CHANGE_ID
)
}
} }
}
stage('Publish') {
steps { script {
switch (btype) {
case 'nightly':
build(
job: 'misc/status-im.github.io-update_env',
parameters: [
[name: 'APK_URL', value: apkUrl, $class: 'StringParameterValue'],
[name: 'IOS_URL', value: ipaUrl, $class: 'StringParameterValue'],
[name: 'DMG_URL', value: dmgUrl, $class: 'StringParameterValue'],
[name: 'NIX_URL', value: appUrl, $class: 'StringParameterValue']
]
); break
case 'release':
build(
job: 'misc/cn.status.im',
parameters: [
[name: 'APK_URL', value: apkUrl, $class: 'StringParameterValue'],
]
); break
}
} }
}
stage('Run e2e') {
when { expression { btype == 'nightly' } }
steps { script {
e2eApk = e2e.getBuildVariables().get('SAUCE_URL')
build(
job: 'end-to-end-tests/status-app-nightly', wait: false,
parameters: [string(name: 'apk', value: "--apk=${e2eApk}")]
)
} }
}
}
}