env.LANG="en_US.UTF-8" env.LANGUAGE="en_US.UTF-8" env.LC_ALL="en_US.UTF-8" env.FASTLANE_DISABLE_COLORS=1 env.REALM_DISABLE_ANALYTICS=1 def installJSDeps() { def attempt = 1 def maxAttempts = 10 def installed = false while (!installed && attempt <= maxAttempts) { println "#${attempt} attempt to install npm deps" sh 'scripts/prepare-for-platform.sh mobile' sh 'npm install' installed = fileExists('node_modules/web3/index.js') attemp = attempt + 1 } } timeout(90) { node ('fastlane') { def apkUrl = '' def ipaUrl = '' def branch; load "$HOME/env.groovy" try { stage('Git & Dependencies') { slackSend color: 'good', message: REPO + ":" + BRANCH_NAME + ' build started. ' + env.BUILD_URL checkout scm sh 'rm -rf node_modules' sh 'test ${JENKINS_REBASE_DEVELOP} -eq 1 && git rebase origin/develop || echo "Not rebasing on develop."' // Assume all parameters are set in Jenkins 'Parameterized build' // TODO(oskarth): Consider read/write from .env to avoid having to specify in Jenkins again // sh 'cp .env.jenkins .env' sh 'echo TESTFAIRY_ENABLED=' + TESTFAIRY_ENABLED + '>>' + '.env' sh 'echo ETHEREUM_DEV_CLUSTER=' + ETHEREUM_DEV_CLUSTER + '>>' + '.env' sh 'echo MAINNET_NETWORKS_ENABLED=' + MAINNET_NETWORKS_ENABLED + '>>' + '.env' sh 'echo LOG_LEVEL=' + LOG_LEVEL + '>>' + '.env' sh 'echo LOG_LEVEL_STATUS_GO=' + LOG_LEVEL_STATUS_GO + '>>' + '.env' sh 'echo OFFLINE_INBOX_ENABLED=' + OFFLINE_INBOX_ENABLED + '>>' + '.env' sh 'echo POW_TARGET=' + POW_TARGET + '>>' + '.env' sh 'echo POW_TIME=' + POW_TIME + '>>' + '.env' sh 'echo MAINNET_WARNING_ENABLED=' + MAINNET_WARNING_ENABLED + '>>' + '.env' sh 'echo DEFAULT_NETWORK=' + DEFAULT_NETWORK + '>>' + '.env' sh 'echo "**********************************************************************"' sh 'echo PARAMETERIZED BUILD - USING CUSTOM ENVIRONMENT' sh 'cat .env' sh 'echo "**********************************************************************"' installJSDeps() sh 'mvn -f modules/react-native-status/ios/RCTStatus dependency:unpack' sh 'cd ios && pod install && cd ..' } stage('Tests') { sh 'lein test-cljs' } stage('Build') { sh 'lein prod-build' } // Android stage('Build (Android)') { sh 'cd android && ./gradlew react-native-android:installArchives && ./gradlew assembleRelease' } stage('Deploy (Android)') { withCredentials([ string(credentialsId: 'diawi-token', variable: 'DIAWI_TOKEN'), string(credentialsId: 'GIT_HUB_TOKEN', variable: 'GITHUB_TOKEN'), string(credentialsId: 'SLACK_JENKINS_WEBHOOK', variable: 'SLACK_URL') ]) { sh 'fastlane android upload_diawi' apkUrl = readFile "${env.WORKSPACE}/fastlane/diawi.out" } } // iOS stage('Build (iOS)') { withCredentials([ string( credentialsId: "slave-pass-${env.NODE_NAME}", variable: 'KEYCHAIN_PASSWORD' ), string( credentialsId: 'fastlane-match-password', variable:'MATCH_PASSWORD' )]) { sh 'fastlane ios adhoc' } } stage('Deploy (iOS)') { withCredentials([ string(credentialsId: 'diawi-token', variable: 'DIAWI_TOKEN'), string(credentialsId: 'GIT_HUB_TOKEN', variable: 'GITHUB_TOKEN'), string(credentialsId: 'SLACK_JENKINS_WEBHOOK', variable: 'SLACK_URL') ]) { sh 'fastlane ios upload_diawi' env.WORKSPACE = pwd() ipaUrl = readFile "${env.WORKSPACE}/fastlane/diawi.out" } } stage('Slack Notification') { slackSend( color: 'good', message: "Branch: ${REPO}:${BRANCH_NAME}\nAndroid: ${apkUrl}\niOS: ${ipaUrl}" ) } } catch (e) { slackSend color: 'bad', message: REPO + ":" + BRANCH_NAME + ' failed to build. ' + env.BUILD_URL throw e } } }