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

163 lines
4.1 KiB
YAML

# -------------------------
# ALIASES
# -------------------------
aliases:
# -------------------------
# CACHE
# -------------------------
- &restore-yarn-cache
keys:
- v1-yarn-cache-{{ arch }}-{{ checksum "package.json" }}-{{ checksum "tests/package.json" }}
- v1-yarn-cache-{{ arch }}
- &save-yarn-cache
paths:
- ~/.cache/yarn
key: v1-yarn-cache-{{ arch }}-{{ checksum "package.json" }}-{{ checksum "tests/package.json" }}
# -------------------------
# 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
- FB_ADMIN_SERVICE_ACCOUNT: $FIREBASE_SERVICE_ACCOUNT
# 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: xcrun simctl boot "iPhone 7 Plus" || true
- run: cd tests && yarn run packager-jet || true
- run:
name: Configure Environment Variables
command: |
echo 'export PATH=/usr/local/opt/node@8/bin:$PATH' >> $BASH_ENV
source $BASH_ENV
- run:
name: Install Node 8
command: |
brew install node@8
brew link node@8
brew tap wix/brew
brew install applesimutils
node -v
- run: *yarn
# Download CocoaPods specs via HTTPS (faster than Git)
# and install CocoaPods.
- run:
name: Install CocoaPods
command: |
cd tests/ios
curl https://cocoapods-specs.circleci.com/fetch-cocoapods-repo-from-s3.sh | bash -s cf
pod install
- run:
name: Build iOS Testing App
command: cd tests && yarn run build-ios
- 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