react-native-firebase/.circleci/config.yml

233 lines
6.2 KiB
YAML

# -------------------------
# ALIASES
# -------------------------
aliases:
# -------------------------
# CACHE
# -------------------------
- &restore-yarn-cache
keys:
- yarn-cache-{{ arch }}-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }}-{{ checksum "tests/package.json" }}-{{ checksum "tests/yarn.lock" }}
- yarn-cache-{{ arch }}
- &save-yarn-cache
paths:
- ~/.cache/yarn
- ~/Library/Detox/ios
key: yarn-cache-{{ arch }}-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }}-{{ checksum "tests/package.json" }}-{{ checksum "tests/yarn.lock" }}
- &save-pods-cache
paths:
- ~/react-native-firebase/tests/ios/Pods
key: v2-pods-cache-{{ arch }}-{{ checksum "ios/RNFirebase.podspec" }}-{{ checksum "tests/ios/Podfile" }}-{{ checksum "tests/ios/Podfile.lock" }}
- &restore-pods-cache
keys:
- v2-pods-cache-{{ arch }}-{{ checksum "ios/RNFirebase.podspec" }}-{{ checksum "tests/ios/Podfile" }}-{{ checksum "tests/ios/Podfile.lock" }}
- v2-pods-cache-{{ arch }}
- &save-ios-build-cache
paths:
- ~/react-native-firebase/tests/ios/build
key: v1-ios-build-cache-{{ arch }}-{{ checksum "ios/RNFirebase.podspec" }}-{{ checksum "tests/ios/Podfile" }}-{{ checksum "tests/ios/Podfile.lock" }}
- &restore-ios-build-cache
keys:
- v1-ios-build-cache-{{ arch }}-{{ checksum "ios/RNFirebase.podspec" }}-{{ checksum "tests/ios/Podfile" }}-{{ checksum "tests/ios/Podfile.lock" }}
- ios-build-cache-{{ arch }}
- &save-brew-cache
paths:
- /usr/local/Homebrew
- /usr/local/Cellar
- /usr/local/opt
key: v2-brew-cache-{{ arch }}
- &restore-brew-cache
keys:
- v2-brew-cache-{{ arch }}
- &configure-jet-detox-environment
name: Configure Jet + Detox Environment
command: |
brew install node@8
brew link --overwrite node@8 --force
brew tap wix/brew
brew install applesimutils
brew link applesimutils --force
brew install watchman
brew link watchman --force
touch .watchmanconfig
node -v
- &packager-jet
name: Start React Native Pacakager (background)
background: true
command: cd tests && yarn run packager-jet || true
- &packager-warmup
name: Warming up Packager
background: true
command: node .circleci/scripts/packager-warmup.js
# -------------------------
# INSTALLATION
# -------------------------
- &yarn
name: Run Yarn
command: |
yarn install --non-interactive --cache-folder ~/.cache/yarn
cd tests && yarn install --non-interactive --cache-folder ~/.cache/yarn
# -------------------------
# ANALYSE
# -------------------------
# eslint
- &eslint
name: Lint Code
command: yarn run lint
# flow
- &validate-flow-declarations
name: Validate Flow Declarations
command: yarn run validate-flow-declarations
# typescript
- &validate-ts-declarations
name: Validate TypeScript Declarations
command: yarn run validate-ts-declarations
# -------------------------
# DEFAULTS
# -------------------------
defaults: &defaults
working_directory: ~/react-native-firebase
environment:
- GIT_COMMIT_DESC: git log --format=oneline -n 1 $CIRCLE_SHA1
# JAVASCRIPT
js_defaults: &js_defaults
<<: *defaults
docker:
- image: circleci/node:8
environment:
- PATH: "/opt/yarn/yarn-v1.5.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# ANDROID
android_defaults: &android_defaults
<<: *defaults
docker:
- image: circleci/android:api-27-node8-alpha
resource_class: "large"
environment:
- TERM: "dumb"
- ADB_INSTALL_TIMEOUT: 10
- _JAVA_OPTIONS: "-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
- GRADLE_OPTS: '-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-XX:+HeapDumpOnOutOfMemoryError"'
- BUILD_THREADS: 2
# IOS
macos_defaults: &macos_defaults
<<: *defaults
resource_class: "large"
macos:
xcode: "9.4.0"
# -------------------------
# JOBS
# -------------------------
version: 2
jobs:
# Set up a Node environment for downstream jobs
checkout-code:
<<: *js_defaults
steps:
- checkout
- restore-cache: *restore-yarn-cache
- run: *yarn
- save-cache: *save-yarn-cache
- persist_to_workspace:
root: .
paths: .
analyse:
<<: *js_defaults
steps:
- attach_workspace:
at: ~/react-native-firebase
- run: *eslint
- run: *validate-flow-declarations
- run: *validate-ts-declarations
jet-test-ios:
<<: *macos_defaults
steps:
- attach_workspace:
at: ~/react-native-firebase
- run:
name: Start iPhone 7 Plus simulator (background)
background: true
command: xcrun simctl boot "iPhone 7 Plus" || true
- run:
name: Configure Environment Variables
command: |
echo 'export PATH=/usr/local/opt/node@8/bin:$PATH' >> $BASH_ENV
source $BASH_ENV
# Brew
- restore-cache: *restore-brew-cache
- run: *configure-jet-detox-environment
- save-cache: *save-brew-cache
# Yarn install - to ensure detox post install builds
- restore-cache: *restore-yarn-cache
- run: *yarn
- save-cache: *save-yarn-cache
# Pods
- restore-cache: *restore-pods-cache
- run:
name: Install CocoaPods + Pod Install
command: |
cd tests/ios
curl https://cocoapods-specs.circleci.com/fetch-cocoapods-repo-from-s3.sh | bash -s cf
pod install
- save-cache: *save-pods-cache
# must always be after environment config job but before ios build
- run: *packager-jet
- run: *packager-warmup
# XCode Build
- restore-cache: *restore-ios-build-cache
- run:
name: Build iOS Testing App
command: cd tests && yarn run build-ios
- save-cache: *save-ios-build-cache
# Now Test \o/
- run:
name: Run Jet Tests
command: cd tests && yarn run test-ios-cover
# -------------------------
# WORK FLOWS
# -------------------------
workflows:
version: 2
Test:
jobs:
# Checkout repo and run Yarn install at root and in tests
- checkout-code
# Run lint, flow, and typescript checks
- analyse:
requires:
- checkout-code
- jet-test-ios:
requires:
- checkout-code