From d8c557c367169fe2ea7048af6a840440fe8e813d Mon Sep 17 00:00:00 2001 From: IlarionHalushka Date: Thu, 4 Jul 2019 14:23:31 +0300 Subject: [PATCH] [CI] Restore cache on CI (#1029) * feat: add fastlane save\restore cache config; comment not needed jobs; * install fastlane using 'bundle install' * install fastlane using 'sudo bundle install' * uncomment ios build commands * run set up google services in ios folder * add working_directory: ios to ios-build steps * remove 'cd ios' from Fastlane build step * add save\restore cache for npm modules * group save_cache steps * cache fastlane in ios-testflight job * uncomment previously commented jobs\steps * fix: add missing colon * use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }} * add names for save\restore steps * ci: add `default` step with `working_directory: ~/repo` to ios-build job * return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}` * fix: add missing curly braces * save\restore cache in e2e-test job; remove {{arch}} from cache names * add names to restore_cache steps in android-build job * add names to save_cache steps in android-build job * add names to all save\restore steps; change checksum package.json to yarn.lock * change `npm` to `NPM` in steps naming * remove {{ checksum circle ci }} from android-build job and fix naming of steps --- .circleci/config.yml | 88 +++++++++++++++++------ ios/Gemfile | 2 + ios/Gemfile.lock | 159 ++++++++++++++++++++++++++++++++++++++++++ ios/fastlane/Fastfile | 1 + 4 files changed, 228 insertions(+), 22 deletions(-) create mode 100644 ios/Gemfile create mode 100644 ios/Gemfile.lock diff --git a/.circleci/config.yml b/.circleci/config.yml index 3caf381e3..8e1745caa 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,8 @@ jobs: - checkout - restore_cache: - key: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }} + name: Restore NPM cache + key: node-modules-{{ checksum "yarn.lock" }} - run: name: Install NPM modules @@ -38,7 +39,8 @@ jobs: yarn codecov - save_cache: - key: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }} + key: node-modules-{{ checksum "yarn.lock" }} + name: Save NPM cache paths: - ./node_modules @@ -52,6 +54,10 @@ jobs: steps: - checkout + - restore_cache: + name: Restore NPM cache + key: node-v1-mac-{{ checksum "yarn.lock" }} + - run: name: Install Node 8 command: | @@ -84,6 +90,12 @@ jobs: command: | detox test --configuration ios.sim.release --cleanup + - save_cache: + name: Save NPM cache + key: node-v1-mac-{{ checksum "yarn.lock" }} + paths: + - node_modules + - store_artifacts: path: /tmp/screenshots @@ -103,7 +115,8 @@ jobs: - checkout - restore_cache: - key: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }} + name: Restore NPM cache + key: node-modules-{{ checksum "yarn.lock" }} - run: name: Install NPM modules @@ -111,7 +124,8 @@ jobs: yarn - restore_cache: - key: android-{{ checksum ".circleci/config.yml" }}-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }} + name: Restore gradle cache + key: android-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }} - run: name: Configure Gradle @@ -155,12 +169,14 @@ jobs: path: /tmp/build/outputs - save_cache: - key: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }} + name: Save NPM cache + key: node-modules-{{ checksum "yarn.lock" }} paths: - ./node_modules - save_cache: - key: android-{{ checksum ".circleci/config.yml" }}-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }} + name: Save gradle cache + key: android-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }} paths: - ~/.gradle @@ -174,6 +190,14 @@ jobs: steps: - checkout + - restore_cache: + name: Restore gems cache + key: bundle-v1-{{ checksum "ios/Gemfile.lock" }} + + - restore_cache: + name: Restore NPM cache + key: node-v1-mac-{{ checksum "yarn.lock" }} + - run: name: Install Node 8 command: | @@ -183,38 +207,49 @@ jobs: 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: | yarn + - run: + name: Update Fastlane + command: | + sudo bundle install + working_directory: ios + - run: name: Set Google Services command: | - cd ios cp GoogleService-Info.prod.plist GoogleService-Info.plist + working_directory: ios - 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 + bundle exec fastlane ios release else export MATCH_KEYCHAIN_NAME="temp" export MATCH_KEYCHAIN_PASSWORD="temp" - fastlane ios build + bundle exec fastlane ios build fi + working_directory: ios + + - save_cache: + name: Save NPM cache + key: node-v1-mac-{{ checksum "yarn.lock" }} + paths: + - node_modules + + - save_cache: + name: Save gems cache + key: bundle-v1-{{ checksum "ios/Gemfile.lock" }} + paths: + - vendor/bundle - store_artifacts: path: ios/RocketChatRN.ipa @@ -235,18 +270,27 @@ jobs: - attach_workspace: at: ios + - restore_cache: + name: Restore gems cache + key: bundle-v1-{{ checksum "ios/Gemfile.lock" }} + - run: name: Update Fastlane command: | - brew update - brew install ruby - sudo gem install fastlane + sudo bundle install + working_directory: ios - run: name: Fastlane Tesflight Upload command: | - cd ios - fastlane pilot upload --ipa ios/RocketChatRN.ipa --changelog "$(sh ../.circleci/changelog.sh)" + bundle exec fastlane pilot upload --ipa ios/RocketChatRN.ipa --changelog "$(sh ../.circleci/changelog.sh)" + working_directory: ios + + - save_cache: + name: Save gems cache + key: bundle-v1-{{ checksum "ios/Gemfile.lock" }} + paths: + - vendor/bundle workflows: version: 2 diff --git a/ios/Gemfile b/ios/Gemfile new file mode 100644 index 000000000..806dc3170 --- /dev/null +++ b/ios/Gemfile @@ -0,0 +1,2 @@ +source "https://rubygems.org" +gem 'fastlane' diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock new file mode 100644 index 000000000..176769997 --- /dev/null +++ b/ios/Gemfile.lock @@ -0,0 +1,159 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.0) + addressable (2.6.0) + public_suffix (>= 2.0.2, < 4.0) + atomos (0.1.3) + babosa (1.0.2) + claide (1.0.2) + colored (1.2) + colored2 (3.1.2) + commander-fastlane (4.4.6) + highline (~> 1.7.2) + declarative (0.0.10) + declarative-option (0.1.0) + digest-crc (0.4.1) + domain_name (0.5.20180417) + unf (>= 0.0.5, < 1.0.0) + dotenv (2.7.4) + emoji_regex (1.0.1) + excon (0.64.0) + faraday (0.15.4) + multipart-post (>= 1.2, < 3) + faraday-cookie_jar (0.0.6) + faraday (>= 0.7.4) + http-cookie (~> 1.0.0) + faraday_middleware (0.13.1) + faraday (>= 0.7.4, < 1.0) + fastimage (2.1.5) + fastlane (2.126.0) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.3, < 3.0.0) + babosa (>= 1.0.2, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored + commander-fastlane (>= 4.4.6, < 5.0.0) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 2.0) + excon (>= 0.45.0, < 1.0.0) + faraday (~> 0.9) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 0.9) + fastimage (>= 2.1.0, < 3.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-api-client (>= 0.21.2, < 0.24.0) + google-cloud-storage (>= 1.15.0, < 2.0.0) + highline (>= 1.7.2, < 2.0.0) + json (< 3.0.0) + jwt (~> 2.1.0) + mini_magick (~> 4.5.1) + multi_xml (~> 0.5) + multipart-post (~> 2.0.0) + plist (>= 3.1.0, < 4.0.0) + public_suffix (~> 2.0.0) + rubyzip (>= 1.2.2, < 2.0.0) + security (= 0.1.3) + simctl (~> 1.6.3) + slack-notifier (>= 2.0.0, < 3.0.0) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (>= 1.4.5, < 2.0.0) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.8.1, < 2.0.0) + xcpretty (~> 0.3.0) + xcpretty-travis-formatter (>= 0.0.3) + gh_inspector (1.1.3) + google-api-client (0.23.9) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.5, < 0.7.0) + httpclient (>= 2.8.1, < 3.0) + mime-types (~> 3.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.0) + signet (~> 0.9) + google-cloud-core (1.3.0) + google-cloud-env (~> 1.0) + google-cloud-env (1.2.0) + faraday (~> 0.11) + google-cloud-storage (1.16.0) + digest-crc (~> 0.4) + google-api-client (~> 0.23) + google-cloud-core (~> 1.2) + googleauth (>= 0.6.2, < 0.10.0) + googleauth (0.6.7) + faraday (~> 0.12) + jwt (>= 1.4, < 3.0) + memoist (~> 0.16) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (~> 0.7) + highline (1.7.10) + http-cookie (1.0.3) + domain_name (~> 0.5) + httpclient (2.8.3) + json (2.2.0) + jwt (2.1.0) + memoist (0.16.0) + mime-types (3.2.2) + mime-types-data (~> 3.2015) + mime-types-data (3.2019.0331) + mini_magick (4.5.1) + multi_json (1.13.1) + multi_xml (0.6.0) + multipart-post (2.0.0) + nanaimo (0.2.6) + naturally (2.2.0) + os (1.0.1) + plist (3.5.0) + public_suffix (2.0.5) + representable (3.0.4) + declarative (< 0.1.0) + declarative-option (< 0.2.0) + uber (< 0.2.0) + retriable (3.1.2) + rouge (2.0.7) + rubyzip (1.2.3) + security (0.1.3) + signet (0.11.0) + addressable (~> 2.3) + faraday (~> 0.9) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.5) + CFPropertyList + naturally + slack-notifier (2.3.2) + terminal-notifier (2.0.0) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + tty-cursor (0.7.0) + tty-screen (0.7.0) + tty-spinner (0.9.1) + tty-cursor (~> 0.7) + uber (0.1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.6) + unicode-display_width (1.6.0) + word_wrap (1.0.0) + xcodeproj (1.10.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.2.6) + xcpretty (0.3.0) + rouge (~> 2.0.7) + xcpretty-travis-formatter (1.0.0) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + ruby + +DEPENDENCIES + fastlane + +BUNDLED WITH + 2.0.2 diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index a4e06992d..e7c66e6a6 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -20,6 +20,7 @@ platform :ios do # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..." # cocoapods # carthage + setup_circle_ci create_keychain( name: ENV["MATCH_KEYCHAIN_NAME"], password: ENV["MATCH_KEYCHAIN_PASSWORD"],