456 lines
15 KiB
YAML
456 lines
15 KiB
YAML
aliases:
|
|
- &restore-node-cache
|
|
keys:
|
|
- v1-dependencies-{{ arch }}-{{ .Branch }}-{{ checksum "package.json" }}
|
|
# Fallback in case checksum fails
|
|
- v1-dependencies-{{ arch }}-{{ .Branch }}-
|
|
|
|
- &save-node-cache
|
|
paths:
|
|
- node_modules
|
|
key: v1-dependencies-{{ arch }}-{{ .Branch }}-{{ checksum "package.json" }}
|
|
|
|
- &restore-cache-website
|
|
keys:
|
|
- v1-website-dependencies-{{ arch }}-{{ .Branch }}-{{ checksum "website/package.json" }}
|
|
# Fallback in case checksum fails
|
|
- v1-website-dependencies-{{ arch }}-{{ .Branch }}-
|
|
|
|
- &save-cache-website
|
|
paths:
|
|
- website/node_modules
|
|
key: v1-website-dependencies-{{ arch }}-{{ .Branch }}-{{ checksum "website/package.json" }}
|
|
|
|
- &restore-cache-danger
|
|
keys:
|
|
- v1-danger-dependencies-{{ arch }}-{{ .Branch }}-{{ checksum "danger/package.json" }}
|
|
# Fallback in case checksum fails
|
|
- v1-danger-dependencies-{{ arch }}-{{ .Branch }}-
|
|
|
|
- &save-cache-danger
|
|
paths:
|
|
- danger/node_modules
|
|
key: v1-danger-dependencies-{{ arch }}-{{ .Branch }}-{{ checksum "danger/package.json" }}
|
|
|
|
- &restore-cache-android-packages
|
|
keys:
|
|
- v1-android-sdkmanager-packages-{{ arch }}-{{ checksum "scripts/circle-ci-android-setup.sh" }}
|
|
# Fallback in case checksum fails
|
|
- v1-android-sdkmanager-packages-{{ arch }}-
|
|
- &save-cache-android-packages
|
|
paths:
|
|
- /opt/android/sdk/system-images/android-23
|
|
- /opt/android/sdk/system-images/android-19
|
|
- /opt/android/sdk/platforms/android-26
|
|
- /opt/android/sdk/platforms/android-23
|
|
- /opt/android/sdk/platforms/android-19
|
|
- /opt/android/sdk/build-tools/23.0.1
|
|
- /opt/android/sdk/add-ons/addon-google_apis-google-23
|
|
key: v1-android-sdkmanager-packages-{{ arch }}-{{ checksum "scripts/circle-ci-android-setup.sh" }}
|
|
|
|
- &restore-cache-ndk
|
|
keys:
|
|
- v1-android-ndk-{{ arch }}-r10e-32-64
|
|
|
|
- &save-cache-ndk
|
|
paths:
|
|
- /opt/ndk
|
|
key: v1-android-ndk-{{ arch }}-r10e-32-64
|
|
|
|
- &restore-cache-buck-downloads
|
|
keys:
|
|
- v1-buck-downloads-{{ arch }}-{{ .Branch }}-{{ checksum "ReactAndroid/build.gradle" }}
|
|
# Fallback in case checksum fails
|
|
- v1-buck-downloads-{{ arch }}-{{ .Branch }}-
|
|
- &save-cache-buck-downloads
|
|
paths:
|
|
- "ReactAndroid/build/downloads"
|
|
key: v1-buck-downloads-{{ arch }}-{{ .Branch }}-{{ checksum "ReactAndroid/build.gradle" }}
|
|
|
|
- &restore-cache-buck
|
|
keys:
|
|
- v1-buck-{{ arch }}-v2017.09.04.02
|
|
- &save-cache-buck
|
|
paths:
|
|
- ~/buck
|
|
key: v1-buck-{{ arch }}-v2017.09.04.02
|
|
|
|
- &restore-cache-watchman
|
|
keys:
|
|
- v1-watchman-{{ arch }}-v4.9.0
|
|
- &save-cache-watchman
|
|
paths:
|
|
- ~/watchman
|
|
key: v1-watchman-{{ arch }}-v4.9.0
|
|
|
|
- &install-node-dependencies
|
|
|
|
|
npm install --no-package-lock --no-spin --no-progress
|
|
|
|
- &run-node-tests
|
|
|
|
|
npm test -- --maxWorkers=2
|
|
npm run lint
|
|
npm run flow -- check
|
|
|
|
defaults: &defaults
|
|
working_directory: ~/react-native
|
|
|
|
version: 2
|
|
jobs:
|
|
|
|
# Runs unit tests on Node 8
|
|
test-js-node-8:
|
|
<<: *defaults
|
|
docker:
|
|
- image: circleci/node:8
|
|
steps:
|
|
- checkout
|
|
- restore-cache: *restore-node-cache
|
|
- run: *install-node-dependencies
|
|
- save-cache: *save-node-cache
|
|
- run: *run-node-tests
|
|
|
|
# Runs unit tests on Node 6
|
|
test-js-node-6:
|
|
<<: *defaults
|
|
docker:
|
|
- image: circleci/node:6.11.0
|
|
steps:
|
|
- checkout
|
|
- restore-cache: *restore-node-cache
|
|
- run: *install-node-dependencies
|
|
- save-cache: *save-node-cache
|
|
- run: *run-node-tests
|
|
|
|
# Runs unit tests on Node 4
|
|
test-js-node-4:
|
|
<<: *defaults
|
|
docker:
|
|
- image: circleci/node:4.8.4
|
|
steps:
|
|
- checkout
|
|
- restore-cache: *restore-node-cache
|
|
- run: *install-node-dependencies
|
|
- save-cache: *save-node-cache
|
|
- run: *run-node-tests
|
|
|
|
# Runs unit tests on iOS devices
|
|
test-objc-ios:
|
|
<<: *defaults
|
|
macos:
|
|
xcode: "9.0"
|
|
dependencies:
|
|
pre:
|
|
- xcrun instruments -w "iPhone 5s (10.3.1)" || true
|
|
steps:
|
|
- checkout
|
|
- restore-cache: *restore-node-cache
|
|
- run: *install-node-dependencies
|
|
- save-cache: *save-node-cache
|
|
- run: ./scripts/objc-test-ios.sh
|
|
|
|
# Runs unit tests on tvOS devices
|
|
test-objc-tvos:
|
|
<<: *defaults
|
|
macos:
|
|
xcode: "9.0"
|
|
dependencies:
|
|
pre:
|
|
- xcrun instruments -w "Apple TV 1080p (10.0)" || true
|
|
steps:
|
|
- checkout
|
|
- restore-cache: *restore-node-cache
|
|
- run: *install-node-dependencies
|
|
- save-cache: *save-node-cache
|
|
- run: ./scripts/objc-test-tvos.sh
|
|
|
|
# Runs end to end tests
|
|
test-objc-e2e:
|
|
<<: *defaults
|
|
macos:
|
|
xcode: "9.0"
|
|
dependencies:
|
|
pre:
|
|
- xcrun instruments -w "iPhone 5s (10.3.1)" || true
|
|
steps:
|
|
- checkout
|
|
- restore-cache: *restore-node-cache
|
|
- run: *install-node-dependencies
|
|
- save-cache: *save-node-cache
|
|
- run: node ./scripts/run-ci-e2e-tests.js --ios --js --retries 3;
|
|
|
|
# Checks podspec
|
|
test-podspec:
|
|
<<: *defaults
|
|
macos:
|
|
xcode: "9.0"
|
|
steps:
|
|
- checkout
|
|
- restore-cache: *restore-node-cache
|
|
- run: *install-node-dependencies
|
|
- save-cache: *save-node-cache
|
|
- run: ./scripts/process-podspecs.sh
|
|
|
|
test-website:
|
|
<<: *defaults
|
|
docker:
|
|
- image: circleci/node:8
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Install Dependencies
|
|
command: |
|
|
cd website
|
|
npm install --no-package-lock
|
|
- run:
|
|
name: Test Website
|
|
command: |
|
|
cd website
|
|
npm test
|
|
- run:
|
|
name: Test Build Static Website
|
|
command: cd website && node ./server/generate.js
|
|
|
|
deploy-website:
|
|
<<: *defaults
|
|
docker:
|
|
- image: circleci/node:8
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Install Dependencies
|
|
command: |
|
|
cd website
|
|
npm install --no-package-lock
|
|
- run:
|
|
name: Build and Deploy Static Website
|
|
command: |
|
|
if [[ $CIRCLE_PROJECT_USERNAME == "facebook" && -z $CI_PULL_REQUEST && -z $CIRCLE_PR_USERNAME ]]; then
|
|
git config --global user.email "reactjs-bot@users.noreply.github.com"
|
|
git config --global user.name "Website Deployment Script"
|
|
echo "machine github.com login reactjs-bot password $GITHUB_TOKEN" > ~/.netrc
|
|
|
|
echo "Deploying website..."
|
|
cd website && GIT_USER=reactjs-bot npm run gh-pages
|
|
else
|
|
echo "Skipping deploy."
|
|
fi
|
|
|
|
build-js-bundle:
|
|
<<: *defaults
|
|
docker:
|
|
- image: circleci/node:8
|
|
steps:
|
|
- checkout
|
|
- restore-cache: *restore-node-cache
|
|
- run: *install-node-dependencies
|
|
- save-cache: *save-node-cache
|
|
- run:
|
|
name: Build JavaScript Bundle
|
|
command: node local-cli/cli.js bundle --max-workers 2 --platform android --dev true --entry-file ReactAndroid/src/androidTest/js/TestBundle.js --bundle-output ReactAndroid/src/androidTest/assets/AndroidTestBundle.js
|
|
- persist_to_workspace:
|
|
root: ReactAndroid/src/androidTest/assets/
|
|
paths:
|
|
- AndroidTestBundle.js
|
|
- store_artifacts:
|
|
path: ReactAndroid/src/androidTest/assets/AndroidTestBundle.js
|
|
|
|
test-android:
|
|
<<: *defaults
|
|
docker:
|
|
- image: circleci/android:api-26-alpha
|
|
environment:
|
|
- TERM: "dumb"
|
|
- ADB_INSTALL_TIMEOUT: 10
|
|
- GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError"'
|
|
- ANDROID_NDK: '/opt/ndk/android-ndk-r10e'
|
|
- BUILD_THREADS: 2
|
|
steps:
|
|
- checkout
|
|
# CircleCI does not support interpolating env variables in the environment: step above.
|
|
# https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables
|
|
- run:
|
|
name: Configure PATH
|
|
command: |
|
|
echo 'export PATH=${ANDROID_NDK}:~/react-native/gradle-2.9/bin:~/buck/bin:$PATH' >> $BASH_ENV
|
|
source $BASH_ENV
|
|
# Configure dependencies
|
|
- run:
|
|
name: Install Build Dependencies
|
|
command: |
|
|
sudo apt-get update -y
|
|
sudo apt-get install ant autoconf automake g++ gcc libqt5widgets5 lib32z1 lib32stdc++6 make maven python-dev python3-dev qml-module-qtquick-controls qtdeclarative5-dev -y
|
|
- restore-cache: *restore-cache-android-packages
|
|
- run:
|
|
name: Install Android Packages
|
|
command: source scripts/circle-ci-android-setup.sh && getAndroidSDK
|
|
- save-cache: *save-cache-android-packages
|
|
- run:
|
|
name: Create Android Virtual Device
|
|
command: source scripts/circle-ci-android-setup.sh && createAVD
|
|
# Starting emulator in advance as it takes some time to boot.
|
|
- run:
|
|
name: Launch Android Virtual Device in Background
|
|
command: source scripts/circle-ci-android-setup.sh && launchAVD
|
|
background: true
|
|
# Continue configuring dependencies while AVD boots.
|
|
- run:
|
|
name: Create Android NDK Directory
|
|
command: |
|
|
if [[ ! -e /opt/ndk ]]; then
|
|
sudo mkdir /opt/ndk
|
|
fi
|
|
sudo chown ${USER:=$(/usr/bin/id -run)}:$USER /opt/ndk
|
|
- restore-cache: *restore-cache-ndk
|
|
- run:
|
|
name: Install Android NDK
|
|
command: source scripts/circle-ci-android-setup.sh && getAndroidNDK
|
|
- save-cache: *save-cache-ndk
|
|
- restore-cache: *restore-cache-buck
|
|
- run:
|
|
name: Install Buck
|
|
command: |
|
|
if [[ ! -e ~/buck ]]; then
|
|
git clone https://github.com/facebook/buck.git ~/buck --branch v2017.09.04.02 --depth=1
|
|
fi
|
|
cd ~/buck && ant
|
|
buck --version
|
|
- save-cache: *save-cache-buck
|
|
- run:
|
|
name: Install Node
|
|
command: |
|
|
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
|
|
sudo apt-get install -y nodejs
|
|
- restore-cache: *restore-node-cache
|
|
- run: *install-node-dependencies
|
|
- save-cache: *save-node-cache
|
|
# TODO: Install and use watchman to speed up builds
|
|
# - restore-cache: *restore-cache-watchman
|
|
# - run:
|
|
# name: Install Watchman Dependencies
|
|
# command: |
|
|
# sudo apt-get update -y
|
|
# sudo apt-get install libtool pkg-config -y
|
|
# - run:
|
|
# name: Install Watchman
|
|
# command: |
|
|
# if [[ ! -e ~/watchman ]]; then
|
|
# mkdir ~/watchman
|
|
# git clone https://github.com/facebook/watchman.git ~/watchman --branch v4.9.0 --depth=1
|
|
# cd ~/watchman
|
|
# ./autogen.sh
|
|
# ./configure
|
|
# make
|
|
# fi
|
|
# cd ~/watchman
|
|
# sudo make install
|
|
# - save-cache: *save-cache-watchman
|
|
- restore-cache: *restore-cache-buck-downloads
|
|
- run:
|
|
name: Download Android App Dependencies
|
|
command: |
|
|
buck fetch ReactAndroid/src/test/java/com/facebook/react/modules
|
|
buck fetch ReactAndroid/src/main/java/com/facebook/react
|
|
buck fetch ReactAndroid/src/main/java/com/facebook/react/shell
|
|
buck fetch ReactAndroid/src/test/...
|
|
buck fetch ReactAndroid/src/androidTest/...
|
|
./gradlew :ReactAndroid:downloadBoost :ReactAndroid:downloadDoubleConversion :ReactAndroid:downloadFolly :ReactAndroid:downloadGlog :ReactAndroid:downloadJSCHeaders
|
|
- save-cache: *save-cache-buck-downloads
|
|
- run:
|
|
name: Build Android App
|
|
command: |
|
|
buck build ReactAndroid/src/main/java/com/facebook/react
|
|
buck build ReactAndroid/src/main/java/com/facebook/react/shell
|
|
# Wait for AVD to finish booting before running tests
|
|
- run:
|
|
name: Wait for Android Virtual Device
|
|
command: source scripts/circle-ci-android-setup.sh && waitForAVD
|
|
# The JavaScript Bundle is built as part of the build-js-bundle workflow, and is required for instrumentation tests.
|
|
- attach_workspace:
|
|
at: ReactAndroid/src/androidTest/assets/
|
|
- run:
|
|
name: Check for JavaScript Bundle
|
|
command: |
|
|
if [[ ! -e ReactAndroid/src/androidTest/assets/AndroidTestBundle.js ]]; then
|
|
echo "JavaScript bundle missing, verify build-js-bundle step"; exit 1;
|
|
else
|
|
echo "JavaScript bundle found.";
|
|
fi
|
|
# Tests
|
|
- run:
|
|
name: Compile Native Libs for Unit and Integration Tests
|
|
command: ./gradlew :ReactAndroid:packageReactNdkLibsForBuck -Pjobs=$BUILD_THREADS -Pcom.android.build.threadPoolSize=1
|
|
no_output_timeout: 6m
|
|
- run:
|
|
name: Unit Tests
|
|
command: buck test ReactAndroid/src/test/... --config build.threads=$BUILD_THREADS
|
|
# Integration Tests
|
|
- run:
|
|
name: Build and Install Test APK
|
|
command: source scripts/circle-ci-android-setup.sh && NO_BUCKD=1 retry3 buck install ReactAndroid/src/androidTest/buck-runner:instrumentation-tests --config build.threads=$BUILD_THREADS
|
|
# TODO: Uncomment, test was already failing on Circle 1.0
|
|
# - run:
|
|
# name: Run Installed APK with Tests
|
|
# command: node ./scripts/run-android-ci-instrumentation-tests.js --retries 3 --path ./ReactAndroid/src/androidTest/java/com/facebook/react/tests --package com.facebook.react.tests
|
|
# TODO: Should be disabled, pending on https://our.intern.facebook.com/intern/tasks?t=16912142
|
|
# - run:
|
|
# name: Run Android End to End Tests
|
|
# command: source scripts/circle-ci-android-setup.sh && retry3 node ./scripts/run-ci-e2e-tests.js --android --js --retries 2
|
|
|
|
# post (always runs)
|
|
- run:
|
|
name: Collect Test Results
|
|
command: |
|
|
mkdir -p ~/junit/
|
|
find . -type f -regex ".*/build/test-results/debug/.*xml" -exec cp {} ~/junit/ \;
|
|
find . -type f -regex ".*/outputs/androidTest-results/connected/.*xml" -exec cp {} ~/junit/ \;
|
|
# TODO: Circle does not understand Buck's report, maybe need to transform xml slightly
|
|
# find . -type f -regex ".*/buck-out/gen/ReactAndroid/src/test/.*/.*xml" -exec cp {} ~/junit/ \;
|
|
when: always
|
|
- store_test_results:
|
|
path: ~/junit
|
|
- store_artifacts:
|
|
path: ~/junit
|
|
|
|
# Workflows enables us to run multiple jobs in parallel
|
|
workflows:
|
|
version: 2
|
|
|
|
test_node:
|
|
jobs:
|
|
- test-js-node-8
|
|
- test-js-node-6
|
|
# TODO: Node 4 tests are already failing on Circle 1.0
|
|
# - test-js-node-4
|
|
|
|
website:
|
|
jobs:
|
|
- test-website
|
|
- deploy-website:
|
|
requires:
|
|
- test-website
|
|
filters:
|
|
branches:
|
|
only:
|
|
- /.*-stable/
|
|
- master
|
|
|
|
test_android:
|
|
jobs:
|
|
- build-js-bundle:
|
|
filters:
|
|
branches:
|
|
ignore: gh-pages
|
|
- test-android:
|
|
requires:
|
|
- build-js-bundle
|
|
|
|
test_ios:
|
|
jobs:
|
|
- test-objc-ios
|
|
- test-objc-tvos
|
|
# TODO: Podspec tests are already failing on Travis
|
|
# - test-podspec
|
|
- test-objc-e2e
|