From 8fb2c13e2d5f014a4d7c89d42c4628282a445abf Mon Sep 17 00:00:00 2001 From: Oskar Thoren Date: Thu, 30 Nov 2017 21:29:27 +0100 Subject: [PATCH] Add Jenkins parameterized build config file --- Jenkinsfile.parameters | 112 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 Jenkinsfile.parameters diff --git a/Jenkinsfile.parameters b/Jenkinsfile.parameters new file mode 100644 index 0000000000..6dadb927a8 --- /dev/null +++ b/Jenkinsfile.parameters @@ -0,0 +1,112 @@ +env.LANG="en_US.UTF-8" +env.LANGUAGE="en_US.UTF-8" +env.LC_ALL="en_US.UTF-8" +node ('macos1') { + def apkUrl = '' + def ipaUrl = '' + def testPassed = true + def branch; + + load "$HOME/env.groovy" + + try { + + stage('Git & Dependencies') { + slackSend color: 'good', message: REPO + ":" + BRANCH_NAME + ' build started. ' + env.BUILD_URL + git([url: 'https://github.com/' + REPO + '/status-react.git', branch: BRANCH_NAME]) + // Checkout master because used for iOS Plist version information + sh 'git checkout -- .' + sh 'git checkout master' + sh 'git checkout ' + BRANCH_NAME + sh 'rm -rf node_modules' + + // 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 NOTIFICATIONS_WIP_ENABLED=' + NOTIFICATIONS_WIP_ENABLED + '>>' + '.env' + sh 'echo DEBUG_LOGS_ENABLED=' + DEBUG_LOGS_ENABLED + '>>' + '.env' + sh 'echo STUB_STATUS_GO=' + STUB_STATUS_GO + '>>' + '.env' + sh 'echo ETHEREUM_DEV_CLUSTER=' + ETHEREUM_DEV_CLUSTER + '>>' + '.env' + sh 'echo MAINNET_NETWORKS_ENABLED=' + MAINNET_NETWORKS_ENABLED + '>>' + '.env' + sh 'echo ERC20_ENABLED=' + ERC20_ENABLED + '>>' + '.env' + sh 'echo LOG_LEVEL=' + LOG_LEVEL + '>>' + '.env' + sh 'echo JSC_ENABLED=' + JSC_ENABLED + '>>' + '.env' + sh 'echo OFFLINE_INBOX_ENABLED=' + OFFLINE_INBOX_ENABLED + '>>' + '.env' + + sh 'echo "**********************************************************************"' + sh 'echo PARAMETERIZED BUILD - USING CUSTOM ENVIRONMENT' + sh 'cat .env' + sh 'echo "**********************************************************************"' + + sh 'lein deps && npm install && ./re-natal deps' + // Uncomment with RN merge + sh '[ -f node_modules/react-native/packager/src/JSTransformer/index.js ] && sed -i "" "s/301000/1201000/g" node_modules/react-native/packager/src/JSTransformer/index.js || echo "New packager"' + // sh 'sed -i "" "s/301000/1201000/g" node_modules/react-native/packager/src/JSTransformer/index.js' + 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 assembleRelease' + } + stage('Deploy (Android)') { + withCredentials([string(credentialsId: 'diawi-token', variable: 'token')]) { + def job = sh(returnStdout: true, script: 'curl https://upload.diawi.com/ -F token='+token+' -F file=@android/app/build/outputs/apk/app-release.apk -F find_by_udid=0 -F wall_of_apps=0 | jq -r ".job"').trim() + sh 'sleep 10' + def hash = sh(returnStdout: true, script: "curl -vvv 'https://upload.diawi.com/status?token="+token+"&job="+job+"'|jq -r '.hash'").trim() + apkUrl = 'https://i.diawi.com/' + hash + + sh ('echo ARTIFACT Android: ' + apkUrl) + } + } + + // try { + // stage('Test (Android)') { + // sauce('b9aded57-5cc1-4f6b-b5ea-42d989987852') { + // sh 'cd test/appium && mvn -DapkUrl=' + apkUrl + ' test' + // saucePublisher() + // } + // } + // } catch(e) { + // testPassed = false + // } + + // iOS + stage('Build (iOS)') { + sh 'export RCT_NO_LAUNCH_PACKAGER=true && xcodebuild -workspace ios/StatusIm.xcworkspace -scheme StatusIm -configuration release -archivePath status clean archive' + sh 'xcodebuild -exportArchive -exportPath status -archivePath status.xcarchive -exportOptionsPlist ~/archive.plist' + } + stage('Deploy (iOS)') { + withCredentials([string(credentialsId: 'diawi-token', variable: 'token')]) { + def job = sh(returnStdout: true, script: 'curl https://upload.diawi.com/ -F token='+token+' -F file=@status/StatusIm.ipa -F find_by_udid=0 -F wall_of_apps=0 | jq -r ".job"').trim() + sh 'sleep 10' + def hash = sh(returnStdout: true, script: "curl -vvv 'https://upload.diawi.com/status?token="+token+"&job="+job+"'|jq -r '.hash'").trim() + ipaUrl = 'https://i.diawi.com/' + hash + + sh ('echo ARTIFACT iOS: ' + ipaUrl) + + } + } + + stage('Slack Notification') { + def c = (testPassed ? 'good' : 'warning' ) + slackSend color: c, 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 + } +} \ No newline at end of file