library 'status-jenkins-lib@v1.2.18' pipeline { agent { label 'linux' } options { timestamps() /* Prevent Jenkins jobs from running forever */ timeout(time: 20, unit: 'MINUTES') /* Limit builds retained */ buildDiscarder(logRotator( numToKeepStr: '10', daysToKeepStr: '20', artifactNumToKeepStr: '10', )) /* Allows combined build to copy */ copyArtifactPermission('/status-react/*') } parameters { string( name: 'BUILD_TYPE', description: 'Specify build type. Values: pr / e2e / nightly / release', defaultValue: 'pr', ) } environment { LANG = "en_US.UTF-8" LC_ALL = "en_US.UTF-8" LANGUAGE = "en_US.UTF-8" TARGET = 'android' BUILD_ENV = 'prod' NIX_CONF_DIR = "${env.WORKSPACE}/nix" FASTLANE_DISABLE_COLORS = 1 /* coverage report identification */ COVERALLS_SERVICE_NAME = "jenkins" COVERALLS_SERVICE_JOB_ID = "${JOB_NAME}#${BUILD_NUMBER}" } stages { stage('Prep') { steps { script { btype = utils.getBuildType() print "Running ${btype} build!" jenkins.abortPreviousRunningBuilds() /* Cleanup and Prep */ commonPrep(btype) } } } stage('Parallel Assemble') { parallel { stage('Checks') { stages { stage('Lint') { steps { script { /* We want the build result to be uploaded */ catchError( message: 'Linting check failed!', buildResult: 'FAILURE', stageResult: 'FAILURE' ) { sh 'make lint' } } } } stage('Tests') { steps { script { sh 'make test' } } } } } stage('Build') { stages { stage('Bundle') { steps { script { apks = android.bundle() } } } } } } } stage('Parallel Upload') { parallel { stage('Archive') { steps { script { apks.each { archiveArtifacts it } } } } stage('Upload') { steps { script { def urls = apks.collect { s3.uploadArtifact(it) } /* return only the universal APK */ if (urls.size() > 1) { env.PKG_URL = urls.find { it.contains('universal') } } else { /* if no universal is available pick first */ env.PKG_URL = urls.first() } jenkins.setBuildDesc(APK: env.PKG_URL) /* e2e builds get tested in SauceLabs */ if (utils.isE2EBuild()) { env.SAUCE_URL = android.uploadToSauceLabs() } if (utils.isNightlyBuild()) { env.DIAWI_URL = android.uploadToDiawi() } } } } } } stage('Cleanup') { steps { sh 'make purge' } } } post { success { script { github.notifyPR(true) } } failure { script { github.notifyPR(false) } } always { sh 'make _fix-node-perms' } } }