pipeline { agent { label 'macos' } parameters { string( name: 'BUILD_TYPE', description: 'Specify build type. Values: pr / e2e / nightly / release', defaultValue: 'pr', ) } options { timestamps() /* Prevent Jenkins jobs from running forever */ timeout(time: 45, unit: 'MINUTES') /* Limit builds retained */ buildDiscarder(logRotator( numToKeepStr: '10', daysToKeepStr: '20', artifactNumToKeepStr: '10', )) } environment { BUILD_PLATFORM = 'ios' LANG = 'en_US.UTF-8' LANGUAGE = 'en_US.UTF-8' LC_ALL = 'en_US.UTF-8' FASTLANE_DISABLE_COLORS=1 REALM_DISABLE_ANALYTICS=1 BUNDLE_PATH = "${HOME}/.bundle" } stages { stage('Prep') { steps { script { /* Necessary to load methods */ mobile = load 'ci/mobile.groovy' cmn = load 'ci/common.groovy' btype = cmn.utils.getBuildType() print "Running ${btype} build!" cmn.ci.abortPreviousRunningBuilds() /* Read the valid NodeJS version */ env.NODE_VERSION = cmn.utils.getToolVersion('node') /* Cleanup and Prep */ nvm(env.NODE_VERSION) { mobile.prep(btype) } } } } stage('Lint') { steps {nvm(env.NODE_VERSION) { sh 'lein cljfmt check' } } } stage('Tests') { steps { nvm(env.NODE_VERSION) { sh 'lein test-cljs' } } } stage('Build') { steps { nvm(env.NODE_VERSION) { sh "lein prod-build-ios" } } } stage('Bundle') { steps { nvm(env.NODE_VERSION) { script { api = mobile.ios.bundle(btype) } } } } stage('Archive') { steps { archiveArtifacts api } } stage('Upload') { steps { script { env.PKG_URL = cmn.utils.uploadArtifact(api) /* e2e builds get tested in SauceLabs */ if (btype == 'e2e') { env.SAUCE_URL = mobile.ios.uploadToSauceLabs() } else { env.DIAWI_URL = mobile.ios.uploadToDiawi() } } } } stage('Cleanup') { steps { sh 'make clean' } } } post { success { script { load('ci/common.groovy').notifyPR(true) } } failure { script { load('ci/common.groovy').notifyPR(false) } } } }