defaults: &defaults working_directory: ~/repo version: 2 jobs: lint-testunit: <<: *defaults docker: - image: circleci/node:8 environment: CODECOV_TOKEN: caa771ab-3d45-4756-8e2a-e1f25996fef6 steps: - checkout - run: name: Install NPM modules command: | npm install # npm install codecov - run: name: Lint command: | npm run lint - run: name: Test command: | npm test - run: name: Codecov command: | npx codecov android-build: <<: *defaults docker: - image: circleci/android:api-26-alpha environment: GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError" JVM_OPTS: -Xmx2048m TERM: dumb BASH_ENV: "~/.nvm/nvm.sh" steps: - checkout - run: name: Install Node 8 command: | curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash source ~/.nvm/nvm.sh nvm install 8 - restore_cache: key: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "package.json" }} - run: name: Install NPM modules command: | npm install - restore_cache: key: android-{{ checksum ".circleci/config.yml" }}-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }} - run: name: Configure Gradle command: | cd android echo -e "" > ./gradle.properties if [[ $KEYSTORE ]]; then echo $KEYSTORE_BASE64 | base64 --decode > ./app/$KEYSTORE echo -e "KEYSTORE=$KEYSTORE" >> ./gradle.properties echo -e "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties echo -e "KEY_ALIAS=$KEY_ALIAS" >> ./gradle.properties echo -e "KEY_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties fi echo -e "VERSIONCODE=$CIRCLE_BUILD_NUM" >> ./gradle.properties - run: name: Install Android Depedencies command: | cd android ./gradlew androidDependencies - run: name: Build Android App command: | cd android if [[ $KEYSTORE ]]; then ./gradlew assembleRelease else ./gradlew assembleDebug fi mkdir -p /tmp/build mv app/build/outputs /tmp/build/ - store_artifacts: path: /tmp/build/outputs - save_cache: key: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "package.json" }} paths: - ./node_modules - save_cache: key: android-{{ checksum ".circleci/config.yml" }}-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }} paths: - ~/.gradle ios-build: macos: xcode: "8.3.3" environment: BASH_ENV: "~/.nvm/nvm.sh" steps: - checkout - run: name: Install Node 8 command: | curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash source ~/.nvm/nvm.sh # https://github.com/creationix/nvm/issues/1394 set +e nvm install 8 - run: name: Update Fastlane command: | brew update brew install ruby sudo gem install fastlane - run: name: Install NPM modules command: | rm -rf node_modules npm install # npm install react-native - run: name: Fix known build error command: | # Fix error https://github.com/facebook/react-native/issues/14382 cd node_modules/react-native/scripts/ curl https://raw.githubusercontent.com/facebook/react-native/5c53f89dd86160301feee024bce4ce0c89e8c187/scripts/ios-configure-glog.sh > ios-configure-glog.sh chmod +x ios-configure-glog.sh - run: name: Fastlane Build no_output_timeout: 1200 command: | cd ios agvtool new-version -all $CIRCLE_BUILD_NUM if [[ $MATCH_KEYCHAIN_NAME ]]; then fastlane ios release else export MATCH_KEYCHAIN_NAME="temp" export MATCH_KEYCHAIN_PASSWORD="temp" fastlane ios build fi - store_artifacts: path: ios/RocketChatRN.ipa - persist_to_workspace: root: ios paths: - RocketChatRN.ipa ios-testflight: macos: xcode: "8.3.3" steps: - checkout - attach_workspace: at: ios - run: name: Update Fastlane command: | brew update brew install ruby sudo gem install fastlane - run: name: Fastlane Tesflight Upload command: | cd ios fastlane pilot upload --changelog "$(sh ../.circleci/changelog.sh)" workflows: version: 2 build-and-test: jobs: - lint-testunit - ios-build: requires: - lint-testunit - ios-hold-testflight: type: approval requires: - ios-build filters: branches: only: - develop - master - ios-testflight: requires: - ios-hold-testflight - android-build: requires: - lint-testunit